在java中,一切都是对象;要实例化对象必须得先声明,例如:
String s;这是一个声明,但是变量s目前没有任何意义,他没有指向任何对象,没有指向任何内存段;只有当给s制定一个对象时s才能被表示为一个对象 String s=new String();
Java中有代码域的概念,一般来说代码域以{开始,以}结束,在当前代码域声明的变量只能在当前代码域中使用;但是当代码运行到下一个代码域时,当前代码域内声明的变量并不会立即被销毁;java有一套垃圾回收(GC)机制,这个机制会监控所有创建的对象,并在适当的时候销毁他们来回收内存;
{
Int x=2;
Public void f(){
Int x=4;
}
}
这段代码在c++中是合法的,因为在C++中,当代码运行到当前域之外后,当前域的对象都会被销毁;但是在java中,这段代码是不合法的;尽管当代码在其他域中运行时,当前域中的对象还未销毁(依旧占用内存空间),但是依然无法在其他域访问当前域的对象;
对于代码域的概念,我个人将它理解为一个盒子,只有同一个域下的对象和操作符被放在一个盒子里,你无法去触碰另一个盒子里的东西;但是当流水线走过你这个盒子的时候,你还不会立马被销毁,而是过一段时间等GC机制认为你可以被销毁了再去销毁;
在java中,也有些变量不受代码域的控制,这些变量或者成员方法必须加以static修饰;
关键字static表示这个变量或者成员方法占有一段的单独的内存,这段内存与任何对象没有关联,甚至哪怕你不创建这个类的对象,这个类中被标记为static的属性或者成员方法都可以被访问;
新建一个对象其本质就是去申请一段内存,并且将这段内存按类的属性和成员方法分成若个部分,再将这几个部分赋值;
当类内有static修饰的属性或者成员方法时,在new这个类的对象的时候并不会再去申请这部分的内存;
也就是说,无论如何这个类被实例化了几个对象,这些对象都共享同一段内存来表示其static的属性或者成员变量;
static关键字是的被其标记的变量不会被重复生成,所以放在工具类中很方便;
Class StaticTest{
Public static int c=4;
}
Void f(){
StaticTest t1=new StaticTest();
StaticTest t2=new StaticTest();
StaticTest.c++;
}
最后一行代码之后,t1和t1中的变量c都变成了5;
this关键字:
this关键字表示当前代码域下的当前对象;
final关键字:
final关键字可以修饰很多事物:
当final关键字修饰类时,这个类无法被继承,同时类内所有方法被隐性的标记为final;
通常将工具类声明在final;
当final关键字修饰变量时,代表这个变量不可被改变并且必须初始化;
变量的初始化有两种方法,直接在定义类的时候给上初始值或者在构造函数中写死初始值;
如果这个变量只是一个引用,则表示该引用的地址不能被改变,但是值可以有变动;
当final关键字修饰方法时,代表这个方法无法被重写,类内的private方法被隐性的标记为final;
super关键字:
super关键字表示当前类的父类;
super(Object);表示调用当前类的父类的构造函数,这个构造函数可以带参数,也可以调用不带参数的系统默认的构造函数;
super.i;表示调用当前类的父类的一个属性;
super的出现时为了避免当当前类和父类中某些方法或者属性名称相同时引起的混乱;
基本类型:
java中共有8种基本类型和一种特殊类型void;
基本类型 大小 默认值
boolean false
char. 16 null
short 16 0
byte 8 0
int 32 0
long 64 oL
float 32 0.0f
double 64 0.0d
Void
基本每一个基本类都有一个装箱类,java通过自动拆装想来使基本类型有较高的可用性;
对象的生命周期由域内声明至被GC销毁,只有在域内声明至当前域结束之前才可被调用;