JAVA对象与类

155 阅读3分钟

结合代码所做内存分析

抓重点,学习就要抓重点,重点就要三番五次学习消化吸收,牢固掌握.近期粗略学习Java300集基础部分,数据类型,语法等基础这些其它语言是相通的,理所当然当然是重点,而对象与类以及内存分析却是基础部分的分水岭,是重点中的重点,这部分内容的熟练掌握,对后期提高至关重要.下面我们一同来再次温习一下JAVA中的对象与类以及内存分析,当然大神飘过...

对象(object、instance):包括属性和方法


属性:用于定义该类或该类对象包含的数据或者说静态特征.属性作用范围是整个类体.在定义成员变量时可以对其初始化,否则JAVA使用默认值对其初始化;
方法:用于定义该类或该类实例的行为特征和功能实现,方法是类和对象的抽象;)

类(class):可以看做是对象的模板,或图纸,系统根据类的定义来造出对象.

举例:对现实世界的物体建模,如天使,就要对这个物体做抽象(抽出象的部分),通过抽象发现这个物体(天使)有的特征:1,有翅膀;2,女孩;3,善良;4,头上有光环.抽象出这些特征,我们可以归纳一个天使类,这个过程就是对象的抽象.

有天使类这个模板或图纸,可根据类的定义来造出天使这个对象,准确说是对象的实例(instance).


代码实现:

	
public class ZzzStu {
	//属性fields
	int id;
	String sname;
	int age;
	Computer comp;

void study(){//方法
	System.out.println("我在学习!使用电脑:"+comp.brand );
}

void play(){ //方法
	System.out.println("我在玩!");
}

ZzzStu(){  //	构造方法.用于创建这个类的对象.无参数的构造方法可不写,由系统自动生成
	System.out.println("调用了无参的构造方法!");
}

	//javac ZzzStu.java  java ZzzStu
public static void main(String[]args){  
	//程序执行的入口方法,必须有
	ZzzStu stu = new ZzzStu();    //创建一个对象实例
	
    stu.id=111;
	stu.sname = "zjgwhcn";
    stu.age = 22;
    	
	Computer c1= new Computer();
    
	c1.brand = "惠普";
	stu.comp=c1;
    
	stu.play();
	stu.study();//如果将该句移到stu.play();之后会出错
	System.out.println(stu);
    System.out.println(c1);//运行结果Computer@6d06d69c
		}
}
	//嵌套类
class Computer{
	String brand;
}


### 内存分析: #### Java虚拟机的内存分为三个区域:栈stack,堆heap,方法区method area.
`栈:`描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量,操作数,方法出口等);每个线程会创建一个栈,存放该线程执行方法的信息(实参和局部变量等);栈属于线程私有,不能实现线程间共享;存储特性是`先进后出,后进先出`;栈由系统自动分配,`速度快,是一个连续的内存空间!`
`堆:`用于存储建好的对象和数组(数组也是对象);JVM只有一个堆,被所有线程共享;是一个不连续的空间,分配灵活,速度慢!
`方法区(又叫静态区):`JVM只有一个方法区,被所有线程共享;方法区实际也是堆,只是用于`存储类,常量相关的信息`;存放程序中永远不变或唯一的内容(类信息[Class对象],静态变量,字符串常量等),很专一呵!