Java 之 类与对象

类和对象

众所周知,java是面向对象的语言。
面对对象的三个过程:找对象、创建对象、使用对象
面向对象语言(OOP)的三大特征:继承、封装、多态
类:一类对象的统称,是一个模板
对象:类具体化的一个实例

类相对于建造房子的图纸,对象相对于我们用图纸建造出的房子

类及其实例化

总之:类相当于一个模板,对象是由模板产生的一个具体化的实例,一个类可以产生无数个对象。
声明一个类就是创建一个新的数据类型,类在Java中属于引用类型。
类的创建:

class  类名 {
   类体;
}
类名   对象名 = new  类名; //实例化对象

类体中包括属性及方法,即成员属性及成员方法。

例如有一个Person类,属性包括年龄、姓名等;方法/行为包括吃饭、睡觉等。

类的实例化:用类创建对象的过程

一个类可以实例化多个对象,使用new关键字来实例化一个对象。
通过对象的引用来调用成员方法,但前提是必须实例化一个对象;
例如 Person person = new Person;person就是一个引用
实例成员变量:若是引用类型,未进行初始化,则初值为null;若为简单类型,则初值为简单类型对应的0值。

  • 访问类的成员变量: 引用.成员变量
  • 访问类的成员方法: 引用.成员方法
class Person {
    public String name;//成员变量name
    public int age;//成员变量age
    
    //成员方法eat
    public void eat() {
        System.out.println(name +" "+"吃饭" );
    }
    //成员方法sleep
    public void sleep() {
        System.out.println("睡觉");
    }

    public static void main(String[] args) {
        Person person = new Person();
        person.name="yang";
        person.age=15;
        person.eat();//通过对象的引用调用成员方法
    }
}*/

成员变量

定义在类的内部,不定义在方法内部的变量

成员变量分为静态成员变量和实例成员变量

静态成员变量:被static所修饰,存储在方法区,需要通过类名.静态成员变量来调用,属于类,不属于对象。
实例成员变量:通过对象的引用调用,存储在堆上。
成员方法与成员变量类似

class Person {
    public int age;
    public String name;
    public static int count = 10;
    public final int SIZE = 11;
    public static final int SIZE2 = 12;
}

上述类中成员变量的存储:
在这里插入图片描述
被static 所修饰的放在方法区,其余放在堆上。


1.main函数为什么是静态的?
main函数是程序入口,若main函数不是static,则依赖于对象,而没进入主函数,程序无入口,对象无法建立。
2.静态成员方法为什么不可以调用实例成员变量?
所有静态的方法或成员变量不依赖于对象
实例成员变量的调用依赖于对象,必须产生一个对象的引用,才可调用实例成员。


  • 实例方法内可以调用静态方法或变量;静态方法内不可以调用实例方法或变量。

一般在设计类时,将属性写为私有的private,但这时由当前类私有,只能在类的内部访问
要想在类的内部访问,需要进行封装,提供一系列的set、get公有方法。
一键生成get、set方法:alt + insert

构造函数

作用:生成对象
实例化对象时,若自己未实现构造函数,它都会自己生成一个默认不带有参数的构造函数
在调用构造函数期间,未生成对象;调用完成之后,生成对象。
构造函数可以发生重载

this关键字

this:代表当前对象的引用
原因:实例化对象分为两步,一是为对象分配内存;二是调用合适的构造函数,构造函数完成后才生成对象。

this:

  1. 用this 调用构造函数,只能放在方法的第一行
  2. this.成员属性
  3. this.成员方法
  • this 不能在static方法中使用。
public Person() {
        this("软件",18);//通过this调用带有两个参数的构造函数
        System.out.println("Person()");
    }
   //带有一个参数的构造函数
    public Person(String name) {
        System.out.println("Person(String)");
        this.name = name;
    }
    //带有两个参数的构造函数
    public Person(String name,int age) {
        System.out.println("Person(String,int)");
        this.name = name;
        this.age = age;
    }

代码块

普通代码块:定义在方法中的代码块
构造代码块/示例代码块:定义在类中的代码块,用于初始化实例成员变量
{

}
静态代码块:由static修饰,用于初始化静态成员变量
static {

}

优先级:静态代码块先于实例代码块,实例代码块先于构造函数

  • 静态代码块只执行一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值