【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,希望能够帮到各位读者。如果喜欢我的文章,希望您能给我一个一键三连哦。
在这里插入图片描述

相关文章
|
1天前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:输入与输出:Scanner与System类
你是否也经历过这些崩溃瞬间?三天教程连`i++`和`++i`都说不清,面试时`a==b`与`equals()`区别大脑空白,代码总是莫名报NPE。这个系列就是为你打造的Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可学习。直击高频考点和实际开发中的“坑位”,拒绝冗长概念,每篇都有可运行代码示例。涵盖输入输出基础、猜数字游戏、企业编码规范、性能优化技巧、隐藏技能等。助你快速掌握Java核心知识,提升编程能力。点赞、收藏、转发,助力更多小伙伴一起成长!
30 19
|
2天前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
31 11
|
5天前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
54 23
|
8天前
|
Oracle Java 关系型数据库
课时37:综合实战:数据表与简单Java类映射转换
今天我分享的是数据表与简单 Java 类映射转换,主要分为以下四部分。 1. 映射关系基础 2. 映射步骤方法 3. 项目对象配置 4. 数据获取与调试
|
8天前
|
存储 Java 编译器
课时11:综合实战:简单Java类
本次分享的主题是综合实战:简单 Java 类。主要分为两个部分: 1.简单 Java 类的含义 2.简单 Java 类的开发
|
8天前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
|
9天前
|
传感器 监控 Java
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
32 5
|
7月前
|
存储 安全 Java
解锁Java并发编程奥秘:深入剖析Synchronized关键字的同步机制与实现原理,让多线程安全如磐石般稳固!
【8月更文挑战第4天】Java并发编程中,Synchronized关键字是确保多线程环境下数据一致性与线程安全的基础机制。它可通过修饰实例方法、静态方法或代码块来控制对共享资源的独占访问。Synchronized基于Java对象头中的监视器锁实现,通过MonitorEnter/MonitorExit指令管理锁的获取与释放。示例展示了如何使用Synchronized修饰方法以实现线程间的同步,避免数据竞争。掌握其原理对编写高效安全的多线程程序极为关键。
95 1
|
8月前
|
安全 Java 开发者
Java并发编程中的线程安全问题及解决方案探讨
在Java编程中,特别是在并发编程领域,线程安全问题是开发过程中常见且关键的挑战。本文将深入探讨Java中的线程安全性,分析常见的线程安全问题,并介绍相应的解决方案,帮助开发者更好地理解和应对并发环境下的挑战。【7月更文挑战第3天】
135 0
|
9月前
|
安全 Java 开发者
Java并发编程中的线程安全策略
在现代软件开发中,Java语言的并发编程特性使得多线程应用成为可能。然而,随着线程数量的增加,如何确保数据的一致性和系统的稳定性成为开发者面临的挑战。本文将探讨Java并发编程中实现线程安全的几种策略,包括同步机制、volatile关键字的使用、以及java.util.concurrent包提供的工具类,旨在为Java开发者提供一系列实用的方法来应对并发问题。
71 0

热门文章

最新文章