一、对象与引用的区别
String hello = new String("Hello world");
代码右侧的new String(“Hello world”)在堆中开辟一块新的内存用于存放"Hello World"这个字符串
代码左侧的hello作为对象的引用储存在栈中,储存的值是一个指向字符串的引用
二、引用类型传递参数的特点
在Java语言中,所有方法参数的传递都属于值传递,例如:
String s = hello;
此时s复制了hello的内容,也即是指向"Hello World"这个字符串的一个地址,两个引用指向了同一个地址,那么当hello所指向的字符串内容改变时s所指向的内容也会随之改变
三、对象初始化
1.Java解释器会寻找类的路径,定位到已经编译好的class文件,在class对象首次加载时会首先对静态变量进行初始化,静态变量会储存在方法区中所有线程共享。
2.在堆上为对象分配足够的存储空间,给所有的变量和方法设置默认值
3.检查是否有父类,如果有,那么调用父类的构造函数
4.执行自身的构造函数
四、浅谈static
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。因此,如果说想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。我们最常见的static方法就是main方法,至于为什么main方法必须是static的,现在就很清楚了。因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static成员变量的初始化顺序按照定义的顺序进行初始化。