JavaSE(5) -- 类和对象上

先看看整体结构,接下来会逐层讲...

目录

                        ==================      第一部分    ===================

一、定义类            二、创建对象

                        ==================      第二部分    ===================

一、类 - 属性 - 成员变量初始化

① 就地初始化       ② 类外初始化        ③利用构造方法初始化

二、类 - 方法 - 普通方法与构造方法

① 普通方法           ②  构造方法

                         ==================      第三部分    =================== 

this的三种用法

1. this调用当前属性 --  this.data  ->  this代表当前对象的引用

2. this调用方法  --  普通方法this.fun( ) 与 构造方法 this( ) 

this.fun( ) -> 调用本类中其他方法

this( ) ->  调用本类中的其他合适的构造方法


         ===========      第一部分    ============

一、定义类

类=属性+方法

假设定义一个学生类

属性:抽象出来的学生个体特征。比如学生姓名,性别,年龄...

方法:学生个体的行为。比如学生写作业,学生考试...

二、创建对象

先声明类(类中包含成员属性和方法) ,才能创建对象 

 注意:

   先有类,才能有对象

   student -> 对象的引用,new Student( ) -> 对象 

  创建对象即实例化对象,当我们实例化一个对象的时候,一定会存在两步(或者更多):

   1. 为对象分配内存

   2. 调用合适的构造方法

          ===========      第二部分    ============

一、类 - 属性 - 成员变量初始化

① 就地初始化

② 类外初始化

      操作对象,需要用到引用。即通过对象的引用操作对象

      使用对象:引用.变量  or   引用.方法(对象的使用包括引用对象成员变量和方法 

③利用构造方法初始化

(接下来就讲,可以先去看,再返回来看这个) 使用构造方法进行初始化,十分方便,也利于简化代码

二、类 - 方法 - 普通方法与构造方法

方法包括:普通方法(简称方法)和构造方法

普通方法

定义:返回类型+方法名 ,类似于c语言中的函数

构造方法

定义:方法名和类名相同,且没有返回类型(两者缺一不可)    

 思考:回忆创建对象的过程,类名后加( ),这个( )是什么意思?

 创建对象时的new Student ( ),可以简单看成由new Student 和Student( )两部分组成。

① new Student是在创建对象并给对象分配空间

② Student( )调用系统默认的不带参数的构造方法

题外话:要求方法名跟类名相同,就是为了Student( )实现构造方法的调用...

 当程序中我们没有写构造方法时,编译器会为我们提供一个不带参数的构造方法;

 如果我们写上了构造方法,编译器就不会再为我们默认生成一个不带参数的构造方法

注意:

   构造方法可以有多个,多个构造方法形成重载  

   new对象时,括号内应与调用的构造方法的参数匹配

 这里只简单提到构造方法,它还有更妙的使用情况,接下来我们在初始化还会见到它...

           ===========      第三部分    ============

this的三种用法

1. this调用当前属性 --  this.data  ->  this代表当前对象的引用

看下图:Student类中和方法set中,都存在变量name、age、score。在以下代码中,this就表示当前对象new student( )的引用student

思考1:如果赋值时不加this引用,程序将报错,这是为什么?

原因:成员变量与局部变量同名时,在set方法中进行的操作只是对局部变量name,age,score 进行了赋值,但并没有改变成员变量的值

只有加上this,程序才能确定 -> 左值是成员变量,右值是形参

思考2:在下图中,编译器是怎么确定student1的成员变量和student2的成员变量的呢?

 实际上,平时的代码中编译器省略了this

                                   还原编译器隐藏的成员方法参数如下图

谁引用了对象的方法,谁就是this当前对象的引用:

  当前是student1引用了setdate方法,所以这里的this相当于student1
  this.name <==> student1.name

2. this调用方法  --  普通方法this.fun( ) 与 构造方法 this( ) 

this.fun( ) -> 调用本类中其他方法

this( ) ->  调用本类中的其他合适的构造方法

注意:

  只有在构造方法中才能使用this( )

  使用this( )语句,必须放在第一行

使用场景:

1. 当需要使用构造方法输出同一重复内容时,若不使用this关键字,则只能使用如下代码:

class Student{
    public String name;
    public int age;
    public Student(){
        System.out.println("=====个人信息表=====");
    }
    public Student(String name){
        System.out.println("=====个人信息表=====");
        this.name=name;
    }
    public Student(String name,int age){
        System.out.println("=====个人信息表=====");
        this.name=name;
        this.age=age;
    }
    public void print(){
        System.out.println("名字:"+name+" "+"年龄:"+age);
    }
}
public class Cclass {
    public static void main(String[] args) {
        Student student1=new Student("李明",18);
        student1.print();
    }
}

 显然,这样大大浪费了代码行数,而应该使用this进行构造方法的调用,方法如下:

class Student{
    public String name;
    public int age;
    public Student(){
        System.out.println("=====个人信息表=====");
    }
    public Student(String name){
        this();
        this.name=name;
    }
    public Student(String name,int age){
        this(name);
        this.age=age;
    }
    public void print(){
        System.out.println("名字:"+name+" "+"年龄:"+age);
    }
}
public class Cclass {
    public static void main(String[] args) {
        Student student1=new Student("李明",18);
        student1.print();
    }
}

2. 是一种设计思想,部分源码实现有用到:

以上构造方法,不论用户输入的是几个参数,内部实现都将调用两个参数的构造方法初始化

还会

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值