一、类与对象的基本概念
1、什么是类?
类(构造对象的模板或蓝图):是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该特征。
属性:就是该事物的状态信息。
行为:就是该事物能够做什么。
2、什么是对象?
对象:是一类事物的具体实现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。
3、类与对象的关系:
类是对一类事物的描述,是抽象的。
对象是一类事物的实例,是具体的。
类是对象的模板,对象是类的实体。
二、类
1、类(事物)的通俗理解:
成员变量:对应事物的特性。
成员方法:对应事物的行为。
public class Student{
//成员变量
String name;//姓名
int age;//年龄
//成员方法
}
2、类的重要特点:
一个类可以包含以下类型变量:
局部变量(没有默认值,必须先定义、赋值): 在方法(参如:方法上的参数)、构造方法或者语句块中定义的变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
成员变量(有默认值): 定义在类中,方法之外的变量。在创建对象的时候实例化。可以被类中方法、构造方法和特定类的语句块访问。
类变量: 声明在类中,方法之外,但必须声明为static类型。
public class Myjava{
static int price=1000;///类变量
String color;///成员变量
public void Method(){
String brand="oppo";///局部变量
}
}
三、对象和对象变量
1、对象的使用格式
创建对象:
类名 对象名 = new 类名();
使用对象访问类中的成员:
对象名.成员变量;
对象名.成员方法();
要想使用对象,就必须首先构造对象,并指定其初始状态。然后,对对象应用方法。在Java程序设计语言中,使用构造器构造新实例。
构造器是一种特殊的方法,用来构造并初始化对象。比如在标准Java库中包含一个Date类。它的对象将描述一个时间点。
构造器的名字应该与类名相同。因此Date类的构造器名为Date。构造Data对象,需要在构造器前面加上new操作符。
new Date();///构造了一个新对象
Date b = new Date();///将对象存放在一个变量中,可以使构造的对象多次使用
2、对象与对象变量区别
比如:
Date d;///定义了一个对象变量d,它可以引用Date类型的对象
d不是一个对象实际上也没有引用对象。不能将任何Date方法应用于这个变量上(如s=d.tostring(); 这将会产生编译错误),所以此对象变量必须要初始化。
///第一种:用新构造的对象初始化这个变量
Date d;
d=new Date();
///第二种:引用一个存在的对象
d=b;///b是上面已存在的
注意:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
在Java中,任何一个对象变量的值都是对存储在另一个地方的一个对象的引用。new操作符的返回值也是一个引用。
Date d = new Date(); 表达式new Date()构造了一个Date类型的对象,并且它的值是对新创建对象的引用。这个引用存储在变量d中。重要的是,如果d初始化为null,表明对象变量d没有引用任何对象。
四、对象内存图
在JVM内存里面主要分布以下三个区域:
1、栈(stack):每个线程包含一个栈区。存放基础数据和自定义对象的引用。
2、堆(heap):主要存储创建的对象,即new出来的对象
3、方法区(method):静态区,跟堆一样,被所有的线程共享。加载存放class文件(字节码文件)和包含static变量。
两个对象调用一个方法内存图:
以上程序是这样进行的:
1、将phone.class、phonetest.class 文件加载到方法区 ;
2、main方法压栈;
3、堆创建一个phone对象;
4、栈里的p、p1分别指向phone对象的内存地址0x123、0x456 ;
5、给对象的成员变量进行赋值;
6、方法弹栈,程序执行结束;
参考文献
1、 《Java核心技术卷Ⅰ》
2、 http://www.monkey1024.com/javaseroute
3、 黑马程序员视频教程
4、 https://www.runoob.com/java/java-object-classes.html