这一段时间对一些java等基础知识进行简单的学习和积累,以下知识主要是一些个人觉得还比较冷门的知识点,参考网上大神的解答。
1.java的符号引用和直接引用
在java中,一个java类将会编译成一个class文件。在编译时,java类并不知道引用类的实际内存地址,因此只能使用符号引用来代替。比如org.simple.People类引用org.simple.Tool类,在编译时People类并不知道Tool类的实际内存地址,因此只能使用符号org.simple.Tool(假设)来表示Tool类的地址。而在加载People类时,此时可以通过虚拟机获取Tool类 的实际内存地址,因此便可以既将符号org.simple.Tool替换为Tool类的实际内存地址,及直接引用地址。
2.字面量和变量,常量
字面量指的是数字,字符等构成的字符串或者数值,并且只在右边出现。
int a;//a变量 const int b=10;//b为常量,10为字面量 string str="hello world";//str为变量,hello world为也字面量
3.类的加载
类的装载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。
简单理解就是把class文件读入内存,加载到JVM虚拟机上,并在堆中创建对象的过程。
(1) 装载:查找和导入Class文件; (2) 链接:把类的二进制数据合并到JRE中; (a)校验:检查载入Class文件数据的正确性; (b)准备:给类的静态变量分配存储空间; (c)解析:将符号引用转成直接引用; (3) 初始化:对类的静态变量,静态代码块执行初始化操作
4.java反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。5.String,StringBuilder和StringBuffer
String:适用于少量的字符串操作的情况 StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况 StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
速度,StringBuilder>StringBuffer>String
6.静态方法和普通方法
非静态方法既可以访问静态方法又可以访问非静态方法,而静态方法只能访问静态数据方法。