发布时间:2022-08-17 13:25
Java的体系结构包含Java编程语言、Java类文件格式、Java API、JVM。
构造方法必须满足以下语法规则:
(1)方法名必须与类名相同;
(2)不要声明返回类型;
(3)不能被static、final、synchronized、abstract和native修饰;
(4)构造方法用final和abstract修饰没有意义。
一个类至少有一个构造方法,没有返回值类型,甚至连void也没有;
可见性修饰符方面,使用private也是可以的,能有一些特殊的作用比如在单例模式下。
使一个线程进入阻塞状态的方法:
1. sleep() / suspend()
2. 发生IO阻塞
3. 等待同步锁
4. 等待通知
解除一个线程的阻塞状态,使之进入就绪态的方法:
1. sleep() 指定的睡眠时间到了
2. IO阻塞解除
3. 获得同步锁
4. 收到通知
5. 调用了 suspend() 的线程阻塞后,再调用 resume() 解除阻塞
要写一个线程类,可以继承Thread方法,然后override他的run()方法
另一种方法是实现Runable接口,即为实现run()方法。
ConcurrentHashMap使用ReentrantLock来保证线程安全。
HashMap定义规则如下:
public class HashMap
HashMap实现的接口有:Serializable, Cloneable, Map
hibernate核心接口说明:
1、Configuration接口:配置Hibernate,根据其启动Hibernate,创建SessionFactory对象;
2、SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建session对象,SessionFactory是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级二级缓存;
3、session接口:负责保存、更新、删除、加载和查询对象,是一个非线程安全的,避免多个线程共享一个session,是轻量级,一级缓存。
4、Transaction接口:管理事务。可以对事务进行提交和回滚;
5、Query和Criteria接口:执行数据库的查询。
Java数据库连接库JDBC用到桥接模式
子类不可以继承父类的构造方法,只可以调用父类的构造方法。子类中所有的构造函数都会默认访问父类中的空参数构造函数,这是因为子类的构造函数内第一行都有默认的super()语句。super()表示子类在初始化时调用父类的空参数的构造函数来完成初始化。一个类都会有默认的空参数的构造函数,若指定了带参构造函数,那么默认的空参数的构造函数,就不存在了。这时如果子类的构造函数有默认的super()语句,那么就会出现错误,因为父类中没有空参数的构造函数。因此,在子类中默认super()语句,在父类中无对应的构造函数,必须在子类的构造函数中通过this或super(参数)指定要访问的父类中的构造函数。
抽象类
特点:
1.抽象类中可以构造方法
2.抽象类中可以存在普通属性,方法,静态属性和方法。
3.抽象类中可以存在抽象方法。
4.如果一个类中有一个抽象方法,那么当前类一定是抽象类;抽象类中不一定有抽象方法。
5.抽象类中的抽象方法,需要有子类实现,如果子类不实现,则子类也需要定义为抽象的。
接口
1.在接口中只有方法的声明,没有方法体。
2.在接口中只有常量,因为定义的变量,在编译的时候都会默认加上
public static final
3.在接口中的方法,永远都被public来修饰。
4.接口中没有构造方法,也不能实例化接口的对象。
5.接口可以实现多继承
6.接口中定义的方法都需要有实现类来实现,如果实现类不能实现接口中的所有方法
7.则实现类定义为抽象类。
并不是程序结束的时候进行GC,GC的时间是不确定的,且GC的过程需要经过可达性分析,一个对象只有被标记两次才会被GC。
当我们在为Integer赋值的时候,java编译器会将其翻译成调用valueOf()方法,对于-128到127之间的数,Java会对其进行缓存。而超出这个范围则新建一个对象。
在java中,数组是一个对象, 不是一种基本数据类型(原生类),对象所以存放在堆中,又因为数组特性,是连续的,
JVM根据两个方面判断两个类是否相同:一是类的全称;另一个是类加载器.
即使类的全称相同,而使用的加载器不同那Class对象也是不同的。
JDK中提供了三个ClassLoader,根据层级从高到低为:
JVM加载类的实现方式,我们称为 双亲委托模型:
如果一个类加载器收到了类加载的请求,他首先不会自己去尝试加载这个类,而是把这个请求委托给自己的父加载器,每一层的类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的Bootstrap ClassLoader中,只有当父加载器反馈自己无法完成加载请求时,子加载器才会尝试自己加载。
双亲委托模型的重要用途是为了解决类载入过程中的安全性问题。
假设有一个开发者自己编写了一个名为Java.lang.Object的类,想借此欺骗JVM。现在他要使用自定义ClassLoader来加载自己编写的java.lang.Object类。然而幸运的是,双亲委托模型不会让他成功。因为JVM会优先在Bootstrap ClassLoader的路径下找到java.lang.Object类,并载入它。
switch结构中没有break的话,匹配完不会跳出,会继续匹配下一个case直到整个结构结束。
ceil:大于等于 x,并且与它最接近的整数。
floor:小于等于 x,且与 x 最接近的整数。
Java并发中:
1、CopyOnWriteArrayList适用于写少读多的并发场景
2、ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,
读与读之间可以并发执行。在读多写少的情况下可以提高效率。
3、ConcurrentHashMap是同步的HashMap,读写都加锁
4、volatile只保证多线程操作的可见性,不保证原子性
./表示当前项目的路径
../表示当前目录的父目录路径
盘符:\\name\\file 或者 盘符:/name/file
表示物理路径