JAVA入门学习小结(一)类的数据存放位置和代码块解析

来源:互联网 发布:vmware for mac下载 编辑:程序博客网 时间:2024/06/06 17:10

内存泄漏:指存在这样一些对象,它们被分配(通过new关键字申请内存空间),它们是无用的,程序以后都不会再使用它们,但仍存在它们的引用,使得无法对它们进行垃圾自动回收。

栈:存放基本类型变量的引用,基本类型数据,对象的引用。栈内的数据是可共享的(int a=3时会现在栈内查找是否存在3,存在则将a引用指向3,不存在则在栈中创建一个3,并将a的引用指向它)。当一个数据没有引用指向它时,就会消失。


堆:存放使用new关键字申请的对象以及对象的成员变量和数组,数据不可共享(==:比较的是内存地址,equals:比较的是内容)。


常量池:存放字符串常量:String str=new String("China"); 会产生一个或者两个对象,首先会在常量池中查找有无China对象,没有则创建China对象,然后在堆中创建此对象的拷贝对象。数据共享。


final:修饰的引用不能再指向其他内存空间,但不能保证其指向内存空间的内容不变。


方法区:用来存放已被加载的类的信息、常量(常量池在方法区中)、静态变量、类的方法(只存在一份,所有对象共享它)即时编译器编译后的代码(在java中static的作用就是说明该变量,方法,代码块是属于类的还是属于实例的)。




java中四种代码块:
1.普通代码块:直接在一个方法中出现的{}就称为普通代码块
2.构造代码块:直接在类中定义的没有加static关键字的代码块{}称为构造代码块
3.静态代码块:使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性(类)初始化.静态代码块——>构造代码块——>构造方法(构造函数)的执行,静态代码块只执行一次!
4.同步代码块:

比较:静态代码块与静态方法
1.静态代码块是自动执行的;
2.静态方法是被调用或者类实例化的时候才执行的

静态代码块与非静态代码块:
1.静态代码块只给第一次类的实例初始化
2.非静态代码块每次类的实例都初始化(执行)
非静态代码块与构造函数:
1.构造函数是给对应的对象进行初始。因为:一个类中可以有多个构造函数,至于类的实例(创建对象)是根据传入的形式参数(形参个数、形参类型)而决定执行哪一个构造函数,
2.非静态构造代码块是给所有对象进行初始化。每创建一个对象(类的实例)都会执行非静态代码块
static:
1.static修饰变量又名静态变量(全局变量):
 a.在类中定义static变量,该类中函数可以直接调用(格式:直接调用变量名)
 b.任何方法中不可以定义静态变量(用static修饰)
 c.在本类中调用Demo类中的static int a;格式:类名.变量名(Demo.a)
 d.static修饰的变量,在类被载入时创建,随类的结束才释放

内存:静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期


摘自:http://blog.csdn.net/vvqiu/article/details/8350825##3


例子:

package Main;public class Main{public Main() {System.out.println("1");}public Main(int a) {System.out.println(a);}static {System.out.println(3);} {System.out.println(4);} public static void test() { System.out.println(5); }public static void main(String[] args){System.out.println(6);Main main=new Main(2);main.test();}}/*结果:

结果:3 6 4 2 5

结论:1.main方法为静态方法,执行main方法时主类没有实例化。
   2.静态变量,对象,代码块,方法均属于类  。静态代码块在类第一次被调用或者实例化时执行且只执行一次。
   3.构造代码块在类实例化时执行,且在构造函数之前执行,每次类实例化均会执行。但类被调用时不会执行。



静态不需要实例化,在类被加载时被分配到内存中。


原创粉丝点击