【Java】内部类、File类、线程优先级

简介: 【Java】内部类、File类、线程优先级

@TOC


前言

本文介绍了File类、内部类、以及线程优先级。通过这篇文章,您可以对三个知识有更深入的了解,其中线程优先级讲究概率,也就是即使你的优先级很高,也有可能被优先级低的抢到。线程的优先级属于多线程里面的,多线程在大学Java课程里非常重要,尽管我们当时没有学的很深入,后面的守卫线程都没有学,但是线程优先级是非常基础的一个知识。内部类则可以简化代码,内部类(Inner Class),是 Java 中对类的一种定义方式,是嵌套类的一个分类,即非静态嵌套类(Non-Static Nested Class)。内部类(非静态嵌套类)分为成员内部类、局部内部类和匿名内部类三种。有些知识我们可以不用,但之所以还学习他,就是防止其他人用的时候我们看不懂。所以还是有学习的必要的。


一、内部类

1、内部类,在类中再写一个类,可以调用外部类的私有方法,私有属性

2、静态内部类,在内部类前加关键字static,不能调用外部类的非静态属性、方法

3、局部内部类,写在方法里面(不建议使用)

4、匿名内部类

列代码如下:
内部类只能通过外部类实例化的对象来调用。

public class Demo05 {
    public static void main(String[] args) {
        Demo04 outer = new Demo04(18);
        Demo04.A b = outer.new A();
        b.getAge();
 
//        new Demo04(18);//匿名类
 
    }
}
public class Demo04 {
    private int m_age;
    Demo04(int a)
    {
        m_age = a;
    }
    public class A{
        public void getAge()
        {
            System.out.println(m_age);
        }
    }
}

静态内部类以及局部内部类

public class Demo06 {
    int age;
    static int b;
    public static class B{//静态内部类,无法访问非静态的属性
        public void put(){
            System.out.println(b);
             class C{//局部内部类,写在方法里面的,不建议使用
 
            }
        }
    }
}

二、线程优先级

如果线程没有没有明确优先级的话,系统会默认分配给了一个5的优先级。优先级:从1~10,其他的都是不合法的,优先级越高,代表这个线程先被调用的概率越高,优先级为10的线程,不一定比优先级为5的线程先执行,只是比他先执行的概率高。总结:1、线程优先级高的不一定先执行,只是概率高 2、先设置优先级,再start()

常用方法:

   setPriority(int )设置优先级,填数字1~10之间;或者用系统自带的
    Thread.NORM_PRIORITY(5),Thread.MIN_PRIORITY(1),                      Thread.MAX_PRIORITY(10)
    getPriority() 获取该线程的优先级
    

例子:

public class Demo11 {
    public static void main(String[] args) {
        Test test = new Test();
        Thread thread = new Thread(test);
        Thread thread1 = new Thread(test);
        Thread thread2 = new Thread(test);
        thread2.setPriority(Thread.MIN_PRIORITY);
        thread2.start();
        thread.setPriority(Thread.NORM_PRIORITY);
        thread.start();
        thread1.setPriority(Thread.MAX_PRIORITY);
        thread1.start();
    }
}
class Test implements Runnable{
 
    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName()+"的优先级为"+Thread.currentThread().getPriority());
    }
}

三、File类

Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。

File对象代表磁盘中实际存在的文件和目录。

常用方法:

1、判断存不存在

    fps.exist();//返回的是Boolean类型,需要用一个Boolean来接受

    2、创建文件

    fps.creatNewFile();//需要处理一下异常

    3、创建单级目录

    fps.mkdir();

    4、创建多级目录

    fps.mkdirs(); //既可以创建单级目录,也可以创建多级目录

    5、获取父文件的路径

    fps.getParent();//返回的是一个字符串类型,需要用一个字符串来接收

    fps.getParentFile();//返回的是文件,包括大小和姓名

    6、获取绝对路径

    fps.getParentFile.getAbstractPath();//获得父文件的绝对路径

    7、获取文件名

    fps.getName()

    8、判断是不是目录

    fps.isDirectory();

    9、判断是不是文件

    fps.isFile();

    10、获取文件最后一次的修改时间

    long time = fps.lastModified(); //返回来的是long类型,而且是时间戳,即从1970.1.1到现在的毫秒数

    11、将时间戳转化为日期

    SimpleDateFormat sdf =new SimpleDateFormat("yyyy-mm-dd HH:mm:ss sss");

    String strTime = sdf.format(time);

    12、获取文件的大小

    fps.length();//返回来的是数值型的,大小是字节

    13、获取当前目录下的所有子路径

    File[] files = fps.listFiles();

    for(File file : files)

    {

    System.out.println(file.getName());
    }
import java.io.File;
 
public class DirList {
    public static void main(String args[]) {
        String dirname = "/java";
        File f1 = new File(dirname);
        if (f1.isDirectory()) {
            System.out.println("Directory of " + dirname);
            String s[] = f1.list();
            for (int i = 0; i < s.length; i++) {
                File f = new File(dirname + "/" + s[i]);
                if (f.isDirectory()) {
                    System.out.println(s[i] + " is a directory");
                } else {
                    System.out.println(s[i] + " is a file");
                }
            }
        } else {
            System.out.println(dirname + " is not a directory");
        }
    }
}

总结

File

一个File对象代表硬盘中实际存在的一个文件或者目录。 无论该路径下是否存在文件或者目录,都不影响File对象的创建

内部类

内部类就是在一个类的内部定义一个类。比如在A中定义了一个B类,那么B类性对于A类来说就称为内部类。而A类相对于B类来说就是外部类了。
1、成员内部类
2、静态内部类
3、局部内部类
4、匿名内部类‘

线程优先级

尽管设置了优先级,但是依然有优先级低的线程在优先级高的线程前面执行,所以优先级低只是意味着获得调度的概率低并不是优先级低就不会被调用,这都是看CPU的调度。

通过本次文章的整理,使得我对四种内部类、File类、优先级的理解进一步加深。深刻的感受到了写博客的重要性,查缺补漏,能够让自己清晰的认识到哪里掌握了,哪里没掌握,就像自己的一个好朋友一样督促自己去更深入的学习,更深入的研究底层,更深入的反复尝试,今天把自己从前的学习历程翻出来记录在CSDN,希望能够帮到各位读者。如果喜欢我的文章,希望您能给我一个一键三连哦。
在这里插入图片描述

相关文章
|
2月前
|
存储 Java 索引
用Java语言实现一个自定义的ArrayList类
自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
115 4
|
2月前
|
IDE JavaScript Java
在Java 11中,如何处理被弃用的类或接口?
在Java 11中,如何处理被弃用的类或接口?
206 5
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
196 1
|
2月前
|
Java Go 开发工具
【Java】(8)正则表达式的使用与常用类分享
正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
247 1
|
2月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
199 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
221 1
|
安全 Java
深入理解Java并发编程:线程安全与性能优化
【2月更文挑战第22天】在Java并发编程中,线程安全和性能优化是两个重要的主题。本文将深入探讨这两个主题,包括线程安全的基本概念,如何实现线程安全,以及如何在保证线程安全的同时进行性能优化。
150 0
|
存储 安全 Java
深入理解Java并发编程:线程安全与锁机制
【5月更文挑战第31天】在Java并发编程中,线程安全和锁机制是两个核心概念。本文将深入探讨这两个概念,包括它们的定义、实现方式以及在实际开发中的应用。通过对线程安全和锁机制的深入理解,可以帮助我们更好地解决并发编程中的问题,提高程序的性能和稳定性。
|
存储 安全 Java
解锁Java并发编程奥秘:深入剖析Synchronized关键字的同步机制与实现原理,让多线程安全如磐石般稳固!
【8月更文挑战第4天】Java并发编程中,Synchronized关键字是确保多线程环境下数据一致性与线程安全的基础机制。它可通过修饰实例方法、静态方法或代码块来控制对共享资源的独占访问。Synchronized基于Java对象头中的监视器锁实现,通过MonitorEnter/MonitorExit指令管理锁的获取与释放。示例展示了如何使用Synchronized修饰方法以实现线程间的同步,避免数据竞争。掌握其原理对编写高效安全的多线程程序极为关键。
269 1
|
安全 Java
Java中的并发编程:理解并发性与线程安全
Java作为一种广泛应用的编程语言,在并发编程方面具有显著的优势和特点。本文将探讨Java中的并发编程概念,重点关注并发性与线程安全,并提供一些实用的技巧和建议,帮助开发人员更好地理解和应用Java中的并发机制。
187 28