一、对象
1、对象的定义
对象:对象是类的一个实例(对象不是找个女朋友),有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
- 一个对象的状态(也称特征或属性)是由具有当前值的数据域来表示的。例如:圆对象具有一个数据域 radius, 它是标识圆的属性。一
个矩形对象具有数据域 width 和 height,它们都是描述矩形的属性。 - — 个对象的行为(behavior, 也称为动作(action))是由方法定义的。调用对象的一
个方法就是要求对象完成一个动作。例如:可以为圆对象定义一个名为 getAreaO 和 getPerimeter() 的 方 法。圆 对 象可 以 调 用 getArea() 返 回 圆 的 面 积,调 用 getPerimeter() 返回它的周长。还可以定义
setRadius(radius) 方法。圆对象可以调 用这个方法来修改它的半径。
2、对象的创建
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:
- 声明:声明一个对象,包括对象名称和对象类型。
- 实例化:使用关键字new来创建一个对象。
- 初始化:使用new创建对象时,会调用构造方法初始化对象。
下面是一个创建对象的例子:
public class Dog{
public static void main(String[] args){
// 下面的语句将创建一个mydog对象
Dog mydog= new Dog( "tommy" );
}
public Dog(String name){
//这个构造器仅有一个参数:name
System.out.println("小狗的名字是 : " + name );
}
}
3、对象的创建流程
(1)javac 编译 Main.java 生成两个字节码文件
Main.class Person.class
(2)java 运行 Main.class
将Main.class和Person.class文件加载进JVM,具体到方法区中
内存:
寄存器 :直接与CPU进行数据交互
本地方法区:主要临时存储OS的可执行代码
方法区:主要临池存储App的可执行代码
栈:函数栈 用于运行函数
堆:对象堆 主要存储对象数据
(3)方法区中分为
静态方法区 : 主要存放 静态变量 静态函数
非静态方法区:主要存放 构造函数 成员
(4)java Main
让虚拟机在静态方法区中的Main所属空间里找主函数
(5)将主函数加载进栈,开始运行
(6)执行主函数中的第一句
在堆内存中开辟空间并分配地址
按照类的描述 创建成员变量并对其进行默认初始化
(7)相应的构造函数,从非静态方法区中的相应的类空间里读取并加载进栈
(8)构造函数刚进栈 则进行显式初始化
(9)开始执行构造函数中的代码,针对性初始化时用 this区分哪个对象调用的这个函数
(10)构造函数执行完毕弹栈,将对象的地址赋予左边
(11)在主函数中创建Person类型的p变量空间,空间里存的是该对象的地址
(12)p对象调用speak()方法,则从非静态方法区中加载speak()的代码进栈
同样 this做区分
成员函数中打印变量 局部-堆-静态方法区 就近原则
(13)在调用静态成员时,可以直接去静态方法区中找
Person.xxx Person是因为该区域中有多个类空间 我们得指定一个
同样 静态函数中 打印变量 局部->静态 与堆无关
4、警告:
- NullPointerException 是一种常见的运行时错误,当调用值为 null 的引用变量上
的方法时会发生此类异常。在通过引用变量调用一个方法之前,确保先将对象引用賦值给 这个变量。 - 在 Java 中,數组被看作是对象。數组是用 new 操作符创建的。一个數组变量实际 上是一个包含数组引用的变量
二、构造方法
1、构造方法
每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
下面是一个构造方法示例:
public class Puppy{
public Puppy(){ //无参构造函数
}
public Puppy(String name){
// 这个构造器仅有一个参数:name
}
}
2、构造函数的体现
- 构造函数没有返回值类型。也不需要写返回值。因为其是为构建对象的,对象创建完, 函数就执行结束。
- 构造函数名称必须和类型保持一致。
- 构造函数没有具体的返回值。
3、构造函数的细节
- 一个类中可以有多个构造函数,多个构造函数是以重载的形式存在的
- 构造函数中也是有return语句的,用于结束初始化动作。
- 构造函数是可以被private修饰的,作用:其他程序无法创建该类的对象
三、类
类:类是一个模板,它描述一类对象的行为和状态,是具有相似特征和行为的事物的统称。
下图中男孩(boy)、女孩(girl)为类(class),而具体的每个人为该类的对象(object).
通过下面一个简单的类来理解下Java中类的定义:
每个人都有 名字、年龄等属性,并且有着说话、吃饭、睡觉等一些行为.
public class person{
String name; //名字
int age; //年龄
void speak(){
}
void eating(){
}
void sleeping(){
}
}
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。