初识Java(三)

目录

一、类和对象

二、this引用

1、this,代表当前对象的引用

2、this引用的特点

 三、构造方法

四、封装

1、什么是封装?

2、用什么完成封装?

3、包

4、static关键字


一、类和对象

Java语言是面向对象语言,通过对象与对象之间的交互,完成一个一个的任务。

例:要盖出一间房子,要有一张图纸。

类就好比是那张图纸,对象就好比是那一间房子。

房子是根据图纸盖出来的,对象是根据类创建出来的。

  • 一个Java文件一般只定义一个类。
  • public修饰的类要与文件名相同。
  • 改变类名,通过设置去改,在文件中手写去改,只能改文件里面的,文件名不会改。

二、this引用

1、this,代表当前对象的引用

        由于this关键字只存在于成员方法当中,所以当前对象指的是调用此成员方法的对象。所有对此方法中成员变量的操作,都是通过this完成的,只不过用户看不见,是编译器自动进行的。下面两个问题有利于对这句话的理解。

  • 写出一个类,类中有成员变量和方法,实例化出了两个对象date和date2,去调用成员方法完成对象的赋值,那么此时,成员方法只有一个阿,但是对象有两个阿,它是怎么知道是对哪个对象赋值的呢?
public class Date {
    private int year;
    private int month;
    private int day;
    public void setDate(int y,int m,int d){
        year = y;
        month = m;
        day = d;
    }
    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2001,5,7);
        Date date1 = new Date();
        date1.setDate(2001,5,13);
    }
}

 因为成员方法有一个隐藏的参数,这个参数是this,它是一个引用变量,存放的是对象的地址,简称this引用,当对象去调用成员方法时,对象的地址会传给this,那么在成员方法内,它就会知道是给哪个对象赋值了。

public class Date {
    private int year;
    private int month;
    private int day;
    public void setDate(Date this,int y,int m,int d){
        this.year = y;
        this.month = m;
        this.day = d;
        //在成员方法中,给成员变量加上this
    }
    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2001,5,7);
        Date date1 = new Date();
        date1.setDate(2001,5,13);
    }
}
  • 当把值传给成员方法,形参接收后,发现形参与成员变量的名字相同时,那成员方法给谁赋值呢?是让形参给对象的变量赋值,还是让形参自己给自己赋值呢?
public class Date {
    private int year;
    private int month;
    private int day;
    public void setDate(int year,int month,int day){
        year = year;
        month = month;
        day = day;
    }
    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2001,5,7);
        Date date1 = new Date();
        date1.setDate(2001,5,13);
    }
}

      根据局部变量优先原则,形参是局部变量,所以是优先给形参赋值。为了不让它识别为形参,在方法中的变量前加上this,代表是对象中的变量,也就是成员变量。

public class Date {
    private int year;
    private int month;
    private int day;
    public void setDate(int year,int month,int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }
    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2001,5,7);
        Date date1 = new Date();
        date1.setDate(2001,5,13);
    }
}

2、this引用的特点

  1. 只存在于成员方法当中。
  2. 只能引用当前对象。
  3. 哪个对象调用,this的类型就是哪个对象的类型。
  4. this在成员方法中是隐藏的参数。

 三、构造方法

此方法是对对象的成员变量赋值的,当使用关键字new一个对象时,会自动调用构造方法。

Date d = new Date(2021,6,9);
  • 1、构造方法的组成是 public + 类名。
  • 2、一个类的构造方法可以有多个,构成了方法的重载。
  • 3、“救急不救穷原则”,若自己不写构造方法,编译器会默认提供一个无参构造,若写出来构造方法,那编译器不再提供。比如自己写了一个有参构造,若创建对象时,并没有传递参数,需要无参构造,编译器不会提供的,需要自己再写出一个无参构造。
  • 4、可以在一个无参构造中用this去调用一个有参构造,传递参数。
public Date(){
    this(1900,1,1); //必须是第一条语句。
}
public Date(int year, int month, int day) {
    this.year = year;
    this.month = month;
    this.day = day;
}

四、封装

面向对象的语言的三大特性:封装、继承、多态。

在类和对象阶段,主要是封装特性。

  • 1、什么是封装?

例:对于一台电脑来说,我们并不关心它内部的细节,比如里面线路怎么分布的,都有什么零件。我们只需要能用这台电脑的功能就可以,可以上网,可以用它的插口等。

对于类来说,也是这样,我们也并不关心它内部的实现细节,将成员变量隐藏起来,通过公共的方法操作成员变量,完成于对象之间的交互,这就是封装。

  • 2、用什么完成封装?

使用访问限定符 :private,protected,public。三者均不加则为默认访问。

  • 3、包

Java中的包是为了将类进行分类,方便进行管理。

使用import语句导入包

例:导入util包下的Arrays类

import java.util.Arrays;

导入util下的所有类

import java.util.*;
  • 4、static关键字

1.修饰成员变量

创建好几个对象之后,发现某一个成员变量的值是相同的,比如有四个对象,这四个对象是同一个班级的,且对象中有一个成员变量是班级,那么可以把班级这个成员变量用static修饰,变为静态成员变量。

  • 此时的成员变量变为静态成员变量,属于类的变量。
  • 随着类的创建而创建,随着类的销毁而销毁。
  • 通过类名.静态成员变量访问。

2.修饰成员方法

  • 在静态成员方法中没有this这个隐藏的参数,所以不能在方法中使用this,因为this依赖对象,而静态成员方法不属于对象,属于类。
  • 所以不能在方法中调用非静态成员方法。
  • 不能在方法中调用非静态成员变量。

3.静态成员变量的初始化

不会在构造方法中初始化,因为构造方法依赖对象,而静态成员变量不属于对象。

分为就地初始化和静态代码块初始化。

  • 就地初始化

在定义时直接给出初始值。

  • 静态代码块初始化
static {
classRoom = "bit306";
}

静态代码块不管生成多少个对象,只执行一次 。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值