JAVA中类

@类


一、类

类是具有某种特征和行为的“事物”的抽象。 而“事物的特征”用变量来表示。

public class Dog {

    String name;
    double height;
    double weight;
    String color;
}

上述代码中,定义了类Dog,然后通过定义 String 类型的 name ,double 类型的 height ,double 类型的 weight 以及 String 类型的 color 来表示其特征,而在定义的变量之前加关键字 static 修饰的称为类变量 (class variable) 。

例如如下代码定义内一个 Rabbit类 ,其中 age 被设定为 类变量,拥有初始值。

public class Rabbit {
    String name;
    String color;
    static int age = 2;
    double weight;
}

在之后声明一个 Rabbit 类型的引用类型,并在堆内存中分配内存空间(根据 Rabbit类 确定空间大小)。

public class RabbitTest {
    public static void main(String[] args) {


        Rabbit r1 = new Rabbit();

        System.out.println(r1.weight);
        System.out.println(r1.color);
        System.out.println(r1.name);
        System.out.println(Rabbit.age);

        r1.color = "白色";
        r1.name = "小白兔";
        r1.weight = 13.7;
        System.out.println(Rabbit.age);
        System.out.println(r1.color);
        System.out.println(r1.name);
        System.out.println(r1.weight);
    }
}

在之后的通过 “对象名.实例变量名” 形式来访问 实例变量以及通过 “类名.类变量名” 形式来为 类变量赋值 或 获取类变量的值,可以发现,实例变量在没有赋值前都是默认值,String类型 为NULL,double类型 是0 .0 。

0.0
null
null
2
2
白色
小白兔
13.7
Process finished with exit code 0

类变量是通过 “类名.类变量名” 进行访问,在方法中赋过值,之后访问时不被再次赋值时,依旧为初始赋值。

所以即使没有对 实例变量 进行赋值,在Rabbit r1 = new Rabbit();中就已经再声明一个 Rabbit类型 的引用类型,并在堆内存中分配内存空间(根据 Rabbit类型 确定空间大小)后,就为所有实例变量赋予默认值。

二、实例初始化过程

在创建类的时候如果同时使用了 实例初始化块 (instance initializer) 和类名同名且没有返回值的特殊构造方法时,会先优先执行 实例初始化块 (instance initializer) 。


public class Elephant {
    String name;
    String kind;
    {
        System.out.println("[实例初始化块 (instance initializer)]: 如果"+ name +"是非洲象,那么要重点保护");
    }
    Elephant(){
        System.out.println("[构造方法]: 非洲象是濒危物种");
    }
}

而这段代码运行结果为下:

[实例初始化块 (instance initializer)]: 如果null是非洲象,那么 要重点保护
[构造方法]: 非洲象是濒危物种
null
Process finished with exit code 0

由此可见实例初始化一共分为三大步:

​ 1.在堆内存空间中分配内存空间(根据类确定内存空间)

​ 2.为实例变量赋予默认值

​ 3.执行实例初始化操作

​ (1)执行实例初始化块

​ (2)执行构造方法

​ 4.将堆区中的Elephant实例的首地址赋值给等号之前的变量

三、创建实例并调用方法的过程

  1. 在堆内存中开辟空间,并为实例变量赋予默认值。
  2. 执行实例初始化操作
  3. 将堆内存中新创建的实例的首地址

在堆中有 “对象头”,时表明该对象是 哪一个类 的对象。

四、类方法传参类型

类方法不需要传参;方法(实例方法)会自己传一个 this的参数。类是创建实例的模板。

五、返回值return

return的是操作数栈栈顶的数。运算的时候数据会随方法的出栈而出栈,之后(如果要返回)将要返回的值重新 “复制”(赋值) 给栈顶。

所以的方法在执行完之后都有 return,表示方法已经结束。

抛出异常也会使方法终止,从而从虚拟机栈中弹出当前方法对于的栈帧。

其中它和之前的 breakcontinue 不同以及其他退出方法:

break: 是结束循环,用于完全结束所在循环,跳出该循环。

continue:是结束本次循环(不会执行 continue之后的代码),接着进行下一次循环。

return:是结束一个方法,即将该方法出栈。

System.exit(0):正常终止整个程序,终止当前运行的Java虚拟机。这个参数用作状态代码;按照约定,非零状态代码表示异常终止。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值