Java错题本02

作者: 牡丹福 | 来源:发表于2018-05-14 08:46 被阅读0次

    线程的生命周期

    新建→就绪→运行→阻塞→死亡

    New→Runnable→Running→Blocked→Dead

    调用start进入就绪。

    线程死亡:run或call方法执行完成

    抛出未捕获的异常Exception或Error

    调用线程的stop方法(不推荐,容易死锁)

    isAlive()中间三种状态返回true

    join方法让一个线程等待另一个线程完成

    后台线程/守护线程/精灵线程 特征:前台线程全部死亡,后台就会自动死亡

    如jvm的垃圾回收线程

    O.setDaemon(true)设O对象为后台线程,

    线程睡眠:sleep,让线程暂停,进入阻塞状态

    线程让步:yield,让线程进入阻塞状态,有优先级的执行

    setPriority()设置线程优先级

    JVM终止:

    程序正常结束

    程序使用System.exit() Runtime.getRuntime().exit()

    遇到为捕获的异常

    程序所在平台强制结束Jvm进程

    类加载或类初始化:加载→连接→初始化

    类加载是指,将类的class读入内存,并为之创建一个java.lang.Class对象。当程序使用任何类都会创建这么一个对象。

    类加载由类加载器完成,由JVM提供

    类的连接:把类的二进制数据合并到JRE中

    验证→准备→解析

    验证内部结构是否正确,和其他类是否协调

    准备:分配内存、设置初始值

    解析:将类的二进制数据中的符号引用替换成直接引用

    创建实例的方法:new、反射、反序列化

    同一个类:全限定类名(包名、类名)JVM中靠全限定类名和加载器

    JVM启动时,会形成由三个类加载器组成的初始类加载器的层次结构

    Bootstrap ClassLoader:根类加载器

    Extension ClassLoader:扩展类加载器:加载JRE扩展目录中JAR包的类

    System ClassLoader:系统类加载器

    JVM类加载机制

    全盘负责:class所依赖的和引用的其他Class也由该类加载器负责载入

    父类委托:先让父类加载器试图加载该Class

    缓存机制:所有加载过的Class都会被缓存,若不在缓存区,系统会读取其二进制数据,并将其转换成Class对象。修改了Class必须重新启动JVM

    通过反射创建对象两种方式

    ①使用Class对象的newInstance()方法来创建该Class对象对应类的实例

    执行newInstance()方法实际是利用默认构造器来创建该类的实例

    ②先使用Class对象获取Constructor对象,再调用Constructor的newInstance方法来创建该Class对象对应的类的实例。

    第一种方式比较常见

    Public

    进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程

    IO

    异常

    检查异常需要手动抛出

    集合

    Static修饰的成员不能访问没有static修饰的成员,例如main方法要先创建对象,才能访问Sting、int之类的。通过实例可以访问类变量,因为类变量都在一块内存区里。

    Static的真正作用:区分成员变量、方法、内部类、初始化块4

    Java通过new调用构造器,构造器构造实例,构造器是类创建对象的根本途径。

    构造器的返回值默认是隐式的。

    方法名以英文动词开头,void用来声明方法没有返回值,否则有return

    同一个对象里的一个成员可以直接调用另一个成员,即省略this

    Java里的方法的参数传递方式只有一种:值传递

    子类无法访问父类被覆盖的方法,但可通过super或父类类名来调用。子类和父类的private方法同名不是重写。

    外部类访问权限只需要给同一个包和任何位置,所以public和 默认 。内部类可以使用四种访问权限。

    JUC:

    New Thread(new Runnable(){重写run方法}).start

    两同:1)方法名2)形参列表两小:1)返回值类型比父类更小或相等2)异常比父类方法更小或相等一大:子类权限比父类大或相等

    被覆盖的方法不能为private

    命名合法:开头_、$ 、_1_

    接口定义的成员变量默认public static final,所有成员方法为 public /abstract,只能被public和abstract修饰

    构造方法无法被程序调用

    初始化顺序:静态成员变量、成员变量、构造方法

    按值传递不会改变实际参数的数值

    按引用传递不会改变实际参数的参考地址,但能改变实际参数的内容

    编译失败,方法体中的有static

    线程和进程的区别

    Java中可作为gc root 的对象有哪些?

    1 、 虚拟机栈(栈帧中的本地变量表)中引用的对象。

    2、 本地方法栈中JNI(即一般说的native方法)引用的对象。

    3、 方法区中的静态变量和常量引用的对象。

    -ha���W��k

    相关文章

      网友评论

        本文标题:Java错题本02

        本文链接:https://www.haomeiwen.com/subject/atcddftx.html