Java中的默认值:
基本数据类型:char默认类型: ’\u0000’
boolean默认类型:false
其他默认值 0
引用数据类型:null,用的会引起空指针异常
Static 静态修饰词:
修饰方法:修饰的方法得用类名访问。
静态方法:只能访问静态变量,,静态方法没有this指针 //类名.静态方法
修饰变量:静态成员变量在方法区(堆里)里存在,无论多少对象,只有一份(归类所有) // 类名.count
非静态成员变量:位于“堆”,每new一个对象创建一个,因此有多少对象该变量就有多少份。
补充:
不能修饰局部变量。
JVM:局部变量保存在栈中,静态变量保存在方法区。局部变量出了方法被回收,而静态变量不会,所以局部变量前不加static。
static和“this、super”势不两立,static跟具体对象无关,而this、super正好跟具体对象有关。
final修饰词:
修饰变量:必须初始化,且不能改变
修饰方法:不能被重写
修饰类: 不能被继承
Java内存分配之栈、堆、常量池:
Java内存分配主要包括以下几个区域:
寄存器:我们在程序中无法控制
栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中
.堆:存放用new产生的数据
静态域:存放在对象中用static定义的静态成员
常量池:存放常量
非RAM(随机存取存储器)存储:硬盘等永久存储空间
Java栈:基本数据类型的变量和引用变量
Java堆:堆内存用来存放由new创建的对象和数组。 在堆中分配的内存,在数组和对象没有变量指向的时候,才由Java虚拟机的自动垃圾回收器来管理。
常量池 (constant pool)、栈和堆的区别:
栈,堆和常量池,对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。
访问权限:
同包子类 同包非子类 不同包子类 不同包非子类
public ∨ ∨ ∨ ∨
protect ∨ ∨ ∨ ×
private × × × ×
在前面都不加时,默认包访问权限 (src包) ,就算继承也不行
创建字符串两种方法及比较:
String str1="Hello World";//第一种方法
String str2=new String("Hello World");//第二种方法
1、string直接赋值:
String s = "haha";
s的引用存在java栈中,引用指向的“haha”存在方法区的常量池中(先判断常量池中是否有一个“haha”,存在则直接指向)
2、string对象new创建
String s = new String("haha");
s的引用存在于Iava栈中,引用指向的haha对象,存在Java堆内存中(每new一次,在堆中创建一个新的haha对象)
String str = "Hello "; //此时str被初始化为“Hello”
str += "World!"; //此时str已经变成了“HelloWorld”
把str引用指向到"HelloWorld"字符串的内存存放地址,但其实在内存空间中,"Hello"这个字符串还存在,只是str不指向它了,而指向了"HelloWorld"这个新的字符串。
在前面都不加时,默认包访问权限 (src包) ,就算继承也不行。
在前面都不加时,默认包访问权限 (src包) ,就算继承也不行