Java 对象和类

一、对象

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类型。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值