java基础中:什么是类、什么是对象

一、类与对象的概念

1.类

  • 是对具有共性事物抽象描述,是在概念上的一个定义,是人类实际抽象出来的结果,实际上是不存在的。比如(成绩管理系统:学生类、班级类、课程类、成绩类,这是人类通过智慧定义的名字,是抽象的名字

2.对象

//某一个类的对象
学生---jack
班级---32班
课程---J2SE
成绩---jack成绩
  • 以上“jack”、“3年2班”、“J2SE”和“jack成绩”他们是具体存在的,称为对象,也叫实例。也就是说一个类的具体化或者说成实例化(学生类对应jack对象,班级类对应3年2班对象,课程类对应J2SE对象,成绩类对应jack成绩对象),就是对象或者说是实例
  • 对象与对象之间具有共同特征,每个特征对应的具体值不一样(比如,姚明和身高正常的人,有高度这个共同特征,高度所对应的具体值不一样,所以要想访问高度这个属性,不能通过人这个类直接去访问,而是通过先有对象才能访问高度这个属性)

3.总结

  • 一般来说,从类到对象是实例的过程,从对象到类的过程是抽象的过程
  • 因为一波对象的存在,这一波对象的共同特征进行抽象这种概念叫做
  • 类经过实例化、经过具体化就形成了对象,对象是实际存在个体

二、类的定义

1.语法

public class 类名{
    //属性
    // 方法
}
  • 一个就是一个数据类型,定义一个类就是创建了一种类型,该类型为引用类型
  • 一个文件(xxx.java)可以定义多个类,但是只能有一个public修饰的类,并且此类名与文件名相同

2.属性

  • 属性来源于类的特征(比如学生类属性可以是名字,性别,地址,这些属性都是静态的)
  • 定义方法:数据类型 属性名;
  • 命名要规范,可以使用驼峰命名法

3.方法

  • 方法来源于行为(比如学生类可以唱,跳,打篮球)
  • 定义方式:
public 返回类型 方法名(参数 ){

具体代码

}

4.总结

  • 类 = 属性 + 方法

三、对象的创建和使用

1.创建对象

  • 创建对象语法:类型 对象名 = new 类型();

2.程序案例

  • 主程序
package 类与对象;

public class Test {
    //一个类可以创建N个对象,成员变量只属于当前的对象(只属于对象,不属于类),
    // 只有通过对象才可以访问成员变量,通过类不能直接访问成员变量
    public static void main(String[] args) {
        //1.创建Student类型的对象
        //new Student()创建对象,stu1是一个局部变量,这个局部变量的类型是Student类型,也就是一个引用类型
        //stu1该局部变量称作引用,引用中保存了对象在堆中的内存地址
        //通过”引用.“去间接访问堆中的对象
        Student stu1 = new Student();

        //一个类可以创建多个对象
        Student stu2 = new Student();

        //2.使用对象
        //访问成员变量,必须使用“引用.”

        //name是成员变量,对象相关,必须先有对象才能访问,必须使用“引用.”
        //包装类的默认值都为null
        //读取过程
        System.out.println("id=" + stu1.getId());
        System.out.println("name=" + stu1.getName());
        System.out.println("sex=" + stu1.getSex());
        System.out.println("age=" + stu1.getAge());
        System.out.println("address=" + stu1.getAddress());

        //赋值
        stu1.setId(1001);
        stu1.setName("tom");
        stu1.setSex(true);
        stu1.setAge(20);
        stu1.setAddress("江苏-xxx");

        System.out.println("----------------------");

        System.out.println("id=" + stu1.getId());
        System.out.println("name=" + stu1.getName());
        System.out.println("sex=" + (stu1.getSex()?"男":"女"));
        System.out.println("age=" + stu1.getAge());
        System.out.println("address=" + stu1.getAddress());
    }
}

  • Student类
package 类与对象;

import java.util.Date;

//定义现实世界中的学生类型
//Student是一个类,一种引用类型
//概念上的一个定义,现实世界中不存在,是人类自己定义的类的名字
public class Student {

    //属性

    //成员变量(实例变量),非静态变量
    //id是对象的级别的,必须先有对象才能访问,不能使用类直接访问
    //private修饰的数据只能在本类中访问
    private Integer id;
    private String name;
    private Boolean sex;
    private Integer age;
    private String address;

    public Student() {
    }

    public Student(Integer id, String name, Boolean sex, Integer age, String address) {
        //id是属性中的私有id,this.id是该构造方法中Integer id的值,两个值不一样
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.address = address;
    }

    public Integer getId() {    //成员方法,实例方法,非静态方法
                                //成员方法必须使用”引用.“的方法进行访问
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Boolean getSex() {
        return sex;
    }

    public void setSex(Boolean sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}


  • 输出结果
id=null
name=null
sex=null
age=null
address=null
----------------------
id=1001
name=tom
sex=男
age=20
address=江苏-xxx

3.执行流程原理及图示

对象的创建和使用

  • new出来的东西统一在堆内存开辟空间存储,开辟的这个空间属于Student类型的空间,Student对象就有了
  • Student这个对象在堆内存中有它自己的内存地址,这个内存地址赋给了局部变量stu1,所以stu1有可能存储的是0x1234这样的内存地址
  • 这个stu1局部变量保存的内存地址0x1234指向堆中的这个对象,将来我们想访问这个对象中的数据,是通过内存地址去访问它,所以通常情况下我们是通过地址去访问对象里面的属性和方法(比如你去故宫,肯定是顺着地址去找故宫)

4.额外补充知识点

  • stu1这个局部变量专业术语被称为引用,引用中保存的是内存地址
  • java中new出来的数据都被放到堆中,在堆中开辟空间,程序员无法对堆中的数据直接操作,只能通过内存地址间接操作它,stu1保存的内存地址指向堆中的这个对象
  • 学生对象创建出来以后,里面有成员变量,是对象相关的。成员变量中的对象存储局部变量中如Student stu1 = 0x1234;
  • 成员变量如果没有手动为它们赋值,系统则会默认赋值(包装类的默认值都为null)
  • 局部变量是在方法里面定义的

5.总结

  • 必须先有对象才能访问成员变量,必须使用“引用 .”的形式
  • 程序员无法对堆内存中的数据直接操作,只能通过内存地址间接操作

四、面向对象的封装性

1.什么是对象的封装

  • 将类中的属性封装在类中,不允许在类的外部直接访问,保证数据安全性
  • 只能通过特定的方法才能对数据进行访问
  • 类的基本原则就是封装

2.实现方式

  • 将属性私有化,使用private修饰属性
  • 对外提供公开setget方法,用来对对象属性进行赋值取值
  • 一般使用快捷键自动生成 set和get方法
  • 贴其中的一个属性的set和get方法
    public Integer getId() {    //成员方法,实例方法,非静态方法
                                //成员方法必须使用”引用.“的方法进行访问
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

3.总结

  • 通过上面Student类的代码,可以看出
    • 属性中的(id,name,sex.age.address)是对象的级别的,必须先有对象才能访问,不能使用类(Student)直接访问
    • private修饰的数据只能在本类中访问
    • 在Student类的有参构造方法中,id是属性中的私有id,this.id是该构造方法中Integer id的值,两个值不一样

以上是在学习过程中总结的,若有不正之处,请多多谅解并欢迎批评指正,不甚感激

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章