java类和对象

java是一门面向对象的语言。在面向对象的世界里,一切皆对象。

面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。

一:什么是面向过程、什么是面向对象。

①面向过程就跟传统洗衣服一样,如图 :

注重的是其中的过程,并且缺一不可,这就是面向过程

②面向对象就像是我们用洗衣机,是通过人、衣服、洗衣服、洗衣机之间交互来完成:

人只需要将衣服、洗衣服放入洗衣机,然后启动洗衣机的开关,等洗衣机工作完成,我们直接拿出来即可。

面向对象就是通过各各对象之间的交互,最后得出结果,对其中的过程并不需要了解。

二: 类定义和使用

1.什么是类

可以理解为对一个实体对象的描述。例:

点赞的各位长的像彭于晏和刘亦菲;

年龄永远都是18岁;

身高最少都是180;

学习成绩都很好、性格开朗、乐于助人;

那么在java中如何定义类呢?

2. 类的定义格式

在java中我们定义类需要class关键字。

class + 类名(类名建议使用大驼峰){

filed; //成员变量

method; //成员方法

}

注意事项:

  • 类名注意大驼峰定义

  • 成员方法前统一写public

3. 练习定义类

定义一个狗类:

那么狗肯定有名字、年龄,行为有吃饭和摇尾巴,那么我们就可以定义一个狗类。

定义一个学生类

学生也有姓名、年龄,还有成绩,行为有上课、考试、休息。

注意:

  • 一般在一个java文件中只定义一个类

  • mian方法所在的类一般要用public修饰(Eclipse默认会在public修饰的类中寻找main方法)

  • public修饰的类必须要和文件名相同

  • 不要随便修改public修饰的类的名称,如果要修改,通过开发工具修改。例:

三:类的实例化

  1. 什么是实例化

定义了一个类,就相当于在计算机中定义了一种类似于int char这样的一种类型,但是int char是自带的 类却是我们自己定义的。

用类类型创建一个对象,我们称为类的实例化。在java中要实例化就需要用到new关键字了。

就像我们刚刚创建了一个狗类,我们来创建一个对象。

在上图中我们创建一只狗子,名字我们给它叫做小黄,年龄1岁。

那么我们new是怎么创建对象的呢?我们要怎么修改对象中的属性呢?怎么调用对象中的方法呢?

类名 + 变量名 = new 类名();

变量名 + . + 属性 = 需要修改的值 ;

变量名 + . + 方法名() ;

在.了之后我们可以看到其中的属性和方法,并不用我们一个个的输入

接下来我们看看运行结果

对象是创建在堆上的,变量存的是对象的地址,所以也叫做引用变量。同时只有属性在堆上,方法则在方法区上。

注意:

  • new关键字用于创建一个对象的实例化

  • 使用.来访问对象中的属性和方法

  • 同一个类可以创建多个对象

  1. 类和对象说明

①:类只是相当于模板一样的东西。

②:类是一种自定义的类型

③:实例化的对象,占据实际的内存空间,里面存放的是成员变量

④:可以把类看成建筑设计图纸,可以根据一张图纸造出很多房子,这些房子外面基本都差不多,但是 面的风格却各不一样。

四:this引用

  1. 什么是this引用

this引用指向当前对象(成员方法运行式调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过改引用去访问。

我们看下面这段代码就了解了

class Student {
    public String name;

    public int age;

    public void Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void attendClass() {
        System.out.println(name + "在上课");
    }

    public void examination() {
        System.out.println(name + "在考试");
    }
    
}

在上面这段代码中,我们创建了一个学生类,在学生类中创建了一个方法,我们调用这个方法可以将对象中的name和age进行赋值。这就是this的作用,但是不用this好像也行耶?

如:

不使用this我们也能运行,但是在创建赋值方法时要注意参数名与成员变量名不能相同,否则就会变成

自己给自己赋值。所以为了稳妥起见我们一般在这里都会加上this。

  1. 为什么要使用this

上面说了一个是防止成员变量和参数名相同,还有一个是知道调用方法时是哪个对象在调用。

如:

class Student {
    public String name;

    public int age;

    public void Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void attendClass() {
        System.out.println(this.name + "在上课");
    }

    public void examination() {
        System.out.println(this.name + "在考试");
    }

    public static void main(String[] args) {
        Student student = new Student();
        student.Student("zhangsan", 20);
        student.examination();
        Student student1 = new Student();
        student1.Student("lisi", 19);
        student1.examination();
    }
}

在第22行和第23行,我们创建的两个student和student1对象,调用了examination方法

编译器是怎么知道是谁在调用呢?

通过this来判断,谁调用方法,this就会去调用那个对象的成员属性。

我们通过调试可以看到,student的地址是xxxxx@498,this表示的也是@498,这里就可以得出上面的结论。

  1. this引用的特性

  • this的类型:对应类类型引用,即哪个对象调用this就是哪个对象的引用类型

  • this只能在成员方法中使用

  • 在成员方法中,this只能引用当前对象,不能引用其他对象

五:对象的构造及初始化

  1. 怎么初始化对象

在java中,变量不初始化便无法使用,但是之前的成员方法也没初始化,为什么编译器没报错呢?

每次创建完对象之后,都要调用方法来给对象的属性赋值,很麻烦,有没有简洁一点的呢??

下面就来介绍构造方法的概念。

  1. 构造方法

什么是构造方法:名字与类必须相同,在创建对象时,编译器自动调用,并且在这个对象的生命周期只调用一次。

class Student {
    public String name;

    public int age;


    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void attendClass() {
        System.out.println(this.name + "在上课");
    }

    public void examination() {
        System.out.println(this.name + "在考试");
    }

    public static void main(String[] args) {
        Student student = new Student("zhangsan",18);


    }
}

里面的7 -> 10行就是构造方法。

那么之前我们没创建构造方法啊,为什么编译器也没报错呢?

这是因为如果我们没创建构造方法的话,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的。

我们创建了一个带两个构造参数的构造方法,所以在创建对象时,调用构造方法要传入两个值来给成员变量初始化。

因为名字相同,传入参数不同,所以构造方法时可以重载的。

我们将代码改一下来看看运行结果。

class Student {
    public String name;

    public int age;


    public Student(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("调用两个参数的构造方法");
    }

    public void attendClass() {
        System.out.println(this.name + "在上课");
    }

    public void examination() {
        System.out.println(this.name + "在考试");
    }

    public static void main(String[] args) {
        Student student = new Student("zhangsan",18);
        student.attendClass();
    }
}

可以看到结果打印了调用两个参数的构造方法和zhangsan在上课,表示对象在创建过程中调用了构造方法。

注意:

  • 构造方法的作用是给对象中的成员属性进行初始化,不负责给对象开辟空间。

  • 构造方法名字必须与类相同

  • 没有返回值,void也不行

  • 构造方法在对象创建时由编译器自动调用,并且在对象的生命周期只调用一次(初始化之后要改变成员变量的值就需要通过变量名+. 来调用更改)

  • 构造方法可以重载

  • 没有定义构造方法时,编译器会生成一份默认的无参构造方法

  • 大多数情况下构造方法都会使用public来进行修饰

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值