栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

4.2 Java类和对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

4.2 Java类和对象

  • 最简单的类 class A{ } 前面没有属性,大括号中没有行为,这可以看做是最简单的类
  • 创建一个对象,也就是我们通常说得new一个对象 A obj = new A();
  • 类是定义,是规范,是“死”的东西,就像菜谱一样
  • 对象obj是实例,是类的一个实现,是一个具体的东西,比如一盘菜,对象是根据类制作出来的

不同的对象的内存地址是不一样的,但是他们的类型是一样的。就好比两个人,他们的性别是一样的,但是外貌是不一样的。

  • A obj = new A();
  • obj可以看作是内存中一个对象(包括若干个数据)的句柄
  • 在C/C++中,obj称为指针,在java中称为Reference
  • 对象赋值是Reference赋值,而基本类型是直接值拷贝
一、基本类型赋值和普通对象赋值的不同
public class ReferenceTest {
    public static void main(String[] args){
        int num1 = 5;
        int num2 = num1;//这个赋值相当于值的拷贝过程 基本值拷贝
        System.out.println("num1: "+ num1 + ", num2: " + num2);
        num2 = 10;
        System.out.println("num1: "+ num1 + ", num2: " + num2);

        MyNumber obj1 = new MyNumber();
        MyNumber obj2 = new MyNumber();
        System.out.println(obj1.num);
        System.out.println(obj2.num);
        System.out.println("==========接下来输出新值=======");

        obj2 = obj1;
        obj2.num = 10;

        System.out.println(obj1.num);
        System.out.println(obj2.num);

    }
}
public class MyNumber{
    int num = 5;
}

创建对象我们可以这样理解,该语句包含了四个动作:

  • 右边的new MyNumber,是以MyNumber类为模板,在堆空间里创建一个MyNumber类对象
  • 末尾的()意味着在对象创建之后立即调用MyNumber类的构造函数,对刚生成的对象初始化。如果MyNumber中没有构造函数,java会自动补上一个默认的构造函数。
    -比如
编译器自动生成构造函数
  • 左边的MyNumber obj1 创建了一个MyNumber类引用变量。所谓MyNumber类引用,就是以后可以用来指向MyNumber对象的对象引用
  • 操作符“=” 使对象引用指向刚创建的那个MyNumber类对象

和以前学C语言一样,那么这句创建对象的语句也可以拆成两部分:
MyNumber obj1
obj1 = new MyNumber();
从上面可以看到有两个实体,一个是对象引用变量,一个是对象本身。

基本类型的变量值少,可以直接拷贝;对象包含多个值,不容易复制,所以赋值采用共享同一块内存区域
一个类可以创建出无数个对象,但是这些对象不可能都叫一个名字。但是如果对象没有名字,我们就无法访问他们。所以我们只能通过对象引用来间接访问对象。

运行结果

num1: 5, num2: 5
num1: 5, num2: 10
5
5
==========接下来输出新值=======
10
10

对象引用可以详细看此链接的文章

总结:

  • 类是规范,对象是根据规范产生出的实例
  • 基本型别赋值是拷贝赋值,对象赋值是reference赋值
  • 类成员变量有初值,函数临时变量必须初始化
public class ArgumentPassingTest {
    public static void main(String[] args){
        int a = 1,b = 2;
        swap(a, b);
        System.out.println("a is "+ a + ", b is " + b);//a = 1, b = 2

        MyNumber obj1 = new MyNumber();
        MyNumber obj2 = new MyNumber();
        obj2.num = 10;
        swap(obj1, obj2);
        System.out.println("obj1 is " + obj1.num + ", obj2 is "+ obj2.num);
    }

    public static void swap(int m, int n){
        int s = m;
        m = n;
        n = s;
    }

    public static void swap(MyNumber obj3, MyNumber obj4){
        int s = obj3.num;
        obj3.num = obj4.num;
        obj4.num = s;
    }
}

运行结果

a is 1, b is 2
obj1 is 10, obj2 is 5
二、函数临时变量初始化
public class Initialization {
    boolean v1;
    byte v2;
    char v3;
    double v4;
    float v5;
    int v6;
    long v7;
    short v8;
    public static void main(String[] args){
        Initialization obj = new Initialization();
        System.out.println("The initial value of boolean variable is " + obj.v1);
        System.out.println("The initial value of byte variable is " + obj.v2);
        System.out.println("The initial value of char variable is " + obj.v3);
        System.out.println("The initial value of double variable is " + obj.v4);
        System.out.println("The initial value of float variable is " + obj.v5);
        System.out.println("The initial value of int variable is " + obj.v6);
        System.out.println("The initial value of long variable is " + obj.v7);
        System.out.println("The initial value of short variable is " + obj.v8);

        int a;
        //System.out.println(a); //error, a 没有初始化
    }
}

运行结果

The initial value of boolean variable is false
The initial value of byte variable is 0
The initial value of char variable is  
The initial value of double variable is 0.0
The initial value of float variable is 0.0
The initial value of int variable is 0
The initial value of long variable is 0
The initial value of short variable is 0
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/357845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号