【Java】面向对象(上)

目录

1.面向对象

2.类的定义和使用

2.1类的定义

3.类的实例化

3.1什么是类的实例化

3.2类和对象的说明

3.3交换两个数

4.this引用

4.1为什么要有this引用

4.2什么是this引用

4.3this引用的特性

5.对象的构造及初始化

5.1如何初始化一个对象

5.2构造方法

5.3默认初始化

5.4就地初始化


1.面向对象

在程序中使用对象映射现实中的事物,使用对象的关系描述事物之间的联系。

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

特点:封装性、继承性、多态性。

2.类的定义和使用

2.1类的定义

类是对象的抽象,用于描述一组对象的共同特征和行为。

例如:学生是一个类,而具体的一个学生就是类的对象。

//创建类

class 类名{

        成员变量;        

        成员方法;

}

class为定义类的关键字,{ }为类的主体。

成员变量:用来描述对象的属性。(例:学生的姓名年龄……)

成员方法(方法):用来描述对象的方法。(例:学生看书打篮球……)

局部变量和成员变量的不同:

在Java中,定义在类中的变量称为成员变量,定义在方法中的变量称为局部变量。如果局部变量和成员变量同名(是可以的),但是在此时,在方法中通过变量名访问到的是局部变量,而非成员变量。

class Student{
    public int age = 10;//成员变量
    void read(){
        int age = 20; //局部变量
        System.out.println(age);//输出为20
    }
}

2.2类的使用

定义一个学生类

学生

名字 

年龄

读书

玩篮球

class Student{
    //成员变量 学生的属性
    public String name;//名字
    public int age;//年龄
    //成员方法 学生的方法
    public void read(){
        System.out.println(name+"正在读书");
    }
    public void playBasketball(){
        System.out.println(name+"玩篮球");
    }
}

tip:

1.类名要采用大驼峰的形式,方法名要采用小驼峰的形式。

2.此处写的方法不需要带static关键字。

3.一般一个文件中只定义一个类。

4.main方法所在的类一般要使用public修饰。

5.public修饰的类必须要和文件名相同。

6.同一级目录下,类名是不可以重复的

3.类的实例化

3.1什么是类的实例化

定义一个类,就相当于在计算机中定义了一种新的类型。

用类类型创建对象的过程,称为类的实例化。

tip:

1.在Java中,采用new关键字,配合类名来实例化对象。

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

3.同一个类可以创建多个实例。

3.2类和对象的说明

1.引用是不可以指向引用的。引用只能指向对象。

        Student stu1 = new Student();
        Student stu2 = stu1;
        //两个引用指向的都是一个对象,
        // stu2指向的是stu1这个引用所指向的对象。

2.一个引用不能同时指向多个对象。

        Student stu3 = new Student();
        stu3 = new Student();
        stu3 = new Student();
        stu3 = new Student();
        //最终stu3这个引用只能存储一个对象的地址。

3.Student stu4 = null;指的是这个引用指向一个null对象(X)。这个指的是stu4这个引用不指向任何对象。

Student stu4 = null;

3.3交换两个数

基本类型无法交换两个数,所以要用引用类型来交换两个数

class MyValue{
    public int number;
}
public class Change {
    public static void swap(MyValue num1,MyValue num2){
        int tmp = num1.number;
        num1.number = num2.number;
        num2.number = tmp;
    }
    public static void main(String[] args) {
        MyValue num = new MyValue();
        num.number = 10;
        MyValue num1 = new MyValue();
        num1.number = 20;
        System.out.println("交换前:"+num.number+" "+num1.number);
        swap(num,num1);
        System.out.println("交换后:"+num.number+" "+num1.number);
    }
}

图解:

tip:执行完swap()之后,就完成了交换,也就从栈上销毁了。

4.this引用

4.1为什么要有this引用

如果形参名和成员变量名重复了,那函数体中到底是给谁赋值呢,成员变量给成员变量,成员变量给参数,参数给成员变量?会弄不清楚的。

public class Test {
    public int goods;
    public int price;//局部变量会优先使用
    public Test(){

    }

    public void setPrice(int price,int goods) {
        price = price;
        goods = goods;//没有赋值成功,只是给自己(形参)赋值了
    }
    public void printPrice(){
        System.out.println(price+" "+goods);//局部变量会优先使用,所以最后的结果是0 0 
    }

    public static void main(String[] args) {
        Test t1 = new Test();
        t1.setPrice(10,20);
        t1.printPrice();
    }
}//结果是0 0

为了避免这种情况,我们要把指定的price和goods设置为当前对象的price和goods,所以有了this引用。

4.2什么是this引用

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

public class Test {
    public int goods;
    public int price;
    //构造方法,与类名相同
    public Test(){

    }

    public void setPrice(int price,int goods) {
        this.price = price;
        this.goods = goods;//把形参赋值给当前对象的price和goods
    }
    public void printPrice(){
        System.out.println(this.price+" "+this.goods);
    }

    public static void main(String[] args) {
        Test t1 = new Test();
        Test t2 = new Test();
        t1.setPrice(10,20);
        //谁调用当前方法(setPrice),谁就是this
        t1.printPrice();
        t2.setPrice(20,30);
        t2.printPrice();//
    }
}//结果是10 20
     //20 30

4.3this引用的特性

this的三种使用方法:
1.this.成员变量 访问成员变量。

2.this.func() 访问当前类的构造方法。

3.this()调用当前类的构造方法。(5.2中会有讲解)

tip:

1.this的类型:

2.this只能在成员方法中使用

3.在成员方法中,this只能引用当前对象,不能再引用其他对象。

4.this是成员方法中第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。(Test this可以省略)

    public void setPrice(Test this,int price) {
        this.printPrice();//访问当前类的构造方法
        this.price = price;//访问成员变量
    }
    public void printPrice(Test this){
        System.out.println(this.price);
    }

5.对象的构造及初始化

5.1如何初始化一个对象

对象的产生:1.为对象分配内存 2.调用合适的构造方法

Test t1 = new Test();

5.2构造方法

概念:名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的声明周期内只调用一次。

tip:

1.没有返回值类型,设置为void也不行。

2.一般情况下使用public修饰

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

4.构造方法可以重载(名字相同,参数列表不同)

public class VendingMachine {
    public int price;
    //构造方法,与类名相同
    public VendingMachine(){

    }
    //方法重载
    public VendingMachine(int price){
        this.price = price;
    }
    public static void main(String[] args) {
        VendingMachine vm = new VendingMachine();
        //构造方法的调用是发生在实例化对象的时候
        //对象的初始化一定会调用构造方法。
    }
}

tip:如果没有定义构造方法,编译器会生成一份默认的无参构造方法,如果定义了构造方法,编译器就不会再生成默认的无参构造方法。(任一个构造方法,实例化一个对象都会调用合适的方法)

构造方法生成的快捷键:

构造方法中可以通过this调用其他构造方法来简化代码。

public class Test {
    public int price;
    //构造方法,与类名相同
    public Test(){
        //必须是构造方法中的第一条语句
        this(10);
    }
    //方法重载
    public Test(int price){
        this.price = price;
    }
    public void print(){
        System.out.println(this.price);
    }
}

5.3默认初始化

为什么局部变量在使用时必须要初始化,而成员变量可以不用呢?
因为对象空间被申请好之后,对象中包含的成员已经设置好了初始值

数据类型默认值
byte0
char'\0000'
short

0

int0
long0L
booleanfalse
float0.0f
double0.0
referencenull

5.4就地初始化

在声明变量的时候,就直接给出了初始值。

public int price=10;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值