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



    前言

    本文介绍了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);//匿名类
     
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    public class Demo04 {
        private int m_age;
        Demo04(int a)
        {
            m_age = a;
        }
        public class A{
            public void getAge()
            {
                System.out.println(m_age);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

    public class Demo06 {
        int age;
        static int b;
        public static class B{//静态内部类,无法访问非静态的属性
            public void put(){
                System.out.println(b);
                 class C{//局部内部类,写在方法里面的,不建议使用
     
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    二、线程优先级

    如果线程没有没有明确优先级的话,系统会默认分配给了一个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() 获取该线程的优先级
    
    • 1
    • 2
    • 3

    例子:

    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());
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    三、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());
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    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");
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    总结

    File

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

    内部类

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

    线程优先级

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

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

  • 相关阅读:
    Android 消息机制
    JavaSE数据类型
    网安基础之python学习第一天
    验证码自定义控件
    Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析
    vue 普通组件的 局部注册
    shell
    Python+Pytest+Yaml+Request+Allure+GitLab+Jenkins接口自动化测试框架概解
    Ubuntu 18.04安装最新版Visual Studio Code(VS Code)报依赖库版本过低错误
    深入理解常见的二十三种设计模式
  • 原文地址:https://blog.csdn.net/m0_59792745/article/details/126092219