【Java SE】Java中类和对象(6000字超详细)

 欢迎来到南方有乔木的博客!!!


博主主页:点击点击!戳一戳!!

博主名:南方有乔木呀

博主简介:

一名在校大学生,正在努力学习Java语言编程。穷且意坚,不坠青云之志,希望能在编程的世界里找到属于自己的光。

跪谢帅气or美丽的朋友们能够帮我点赞! 请对文中内容请多多指教!!!

目录

前言

一.面向对象

1.面向对象概念

2.面向对象与面向过程

二.类的总结

三.类的语法格式

四.类的使用

六.类的实例化

七.对象初始化

八.this引用

九.构造方法(构造器)

十.封装


前言

本次博客内容为类和对象,博主在学习过程中对类与对象进行了总结,跟随博主来看看类和对象吧!!

众所周知,语言有面向对象面向过程之分,Java属于一门面向对象的语言,那么什么是面向对象呢?本文将详细阐述对于Java中的类和面向对象作详细的描述与编程用法。

一.面向对象

1.面向对象概念

面向对象是是解决问题的一种思想,利用事物对象之间的交互来解决问题,更符合人们对于事物的认知,对于程序的扩展和维护也非常友好。

2.面向对象与面向过程

面向对象注重的是对象之间的交互,而面向过程注重的是完成一件事情的过程,比如,就洗衣服这件事而言,用面向对象的思想来解决,用洗衣机这件事主要有四个对象,人,洗衣机,洗衣服粉,衣服。面向对象通过这四个对象之间的交互来完成洗衣服这件事情,但不关心衣服到底具体是怎么洗的,只需要人把衣服洗衣粉放进洗衣机完成事物之间的交互即可。

而用面向过程的思想来解决洗衣服这件事,它主要注重的是洗衣服的过程,比如人怎么拿衣服,怎么放进洗衣机,洗衣机怎么洗,怎么甩干,人怎么用洗衣粉搅拌等等这些过程。

这些就是面向对象与面向过程的区别。

二.类的总结

  什么是类?要完成面向对象之间的交互,Java中把同一类事物划分为一个类。

类的概念类是具有相同属性或者行为的对象的统称,可以用来描述每一个具体的对象

比如,人类,鸟类,狗类等。

在一个Java类中有:

class 类名 {

     字段/属性/成员变量

    行为/功能/成员方法

}   

示例

洗衣机

属性(字段/成员变量)

品牌   型号  尺寸   外观颜色

功能(行为/成员方法)

洗衣功能 甩干功能 定时功能 干洗功能

类的成员:类的成员分为普通成员变量和静态成员变量

  • 静态成员变量不属于任何一个对象,由所有的对象共享,不依赖对象,属于类
  • 静态成员变量可以通过类名访问,也可以通过对象访问,但我们一般是通过类名访问
  • 静态成员变量不在堆区,而是在方法区,普通成员变量在堆区
  • 普通的方法里面,不能定义静态的变量
  • 静态的方法里面,也不能定义静态的变量

静态成员变量

访问示例:

public class Student {
    public String name;
    public String gender;
    private int age;
    private double score;
    public static String classRoom="三栋305";//教室属于每个学生对象共享 

    //但又不属于任何一个对象 用static修饰为静态成员变量

    public Student(String name, String  gender, int age, double score) {
        this.name = name;
        this.gender = gender;
        this.age = age;
        this.score = score;
    }
    public static void main(String[] args) {
        System.out.println(Student.classRoom);//静态成员变量通过类名访问
        Student stu1=new Student("张三","男",18,4.5);
        Student stu2=new Student("李四","男",19,3.9);
        Student stu3=new Student("王五","女",20,4.8);
        System.out.println(stu1.classRoom);//静态成员变量可通过每个对象访问
        System.out.println(stu2.classRoom);//静态成员变量由三个对象共享
        System.out.println(stu3.classRoom);
    }
}

成员方法也一样,分为静态成员方法和普通成员方法。

静态成员方法也称类方法,也可通过类名访问

静态方法内部不能调用普通方法

普通方法里可以调用静态方法

三.类的语法格式

在Java中类的定义要使用到class关键字。

示例

class className{

filed  //字段/属性/成员方法

method  //行为/功能/成员变量

}

class是定义类的关键字,className是类的名字。一个具体的对象,具有属性和功能,像洗衣机有品牌,颜色等属性,还有洗衣,甩干,定时等功能,字段/属性/成员变量  加上行为/功能/成员方法,就可以用来描述一个具体的对象

四.类的使用

1.使用示例一

定义一个狗类:

//定义一个狗类
class PetDog {
    public String name;//名字     这里属于字段/属性/成员变量
    public String color;//颜色
    public String gender;//性别

    public static void barks()    //这里是行为/功能/成员方法
    {
        System.out.println("汪汪汪!");
    }
    public static void wag()
    {
        System.out.println("摇尾巴!");
    }


}

2.使用示例二

定义一个学生类:

public class Student { //public表示公共类
    public String name; //字段/属性/成员变量
    public short age;
    public String gender;
    public double score;

    public void doClass()  //行为/功能/成员方法
    {
        System.out.println("按时上课!");
    }
    public void doHomework()
    {
        System.out.println("按时做家庭作业!");
    }
    public void eaxm()
    {
        System.out.println("按时考试!");
    }

}

类使用的总结

1.类的命名使用大驼峰命名法

2.类的成员方法使用小驼峰命名法

3.public修饰的类必须要和文件名相同(即类名必须要和文件名相同)

4.一般我们在一个.java源文件中只定义一个类,如果一定要在一个文件中定义多个类,那么,只能有一个public类型的类,其他的可以是default类型。

5.类就是一种自定义类型,同时也是引用数据类型

六.类的实例化

概念:类是一种自定义类型,用来描述对象有哪些属性,可以用来实例化对象,就像是一个模具一样。

用类创建对象的过程,叫做类的实例化。类的实例化相当于按照房子图纸造出相应的房子,或者按照模具造出相应的物品。

public class PetDog {
    public String name;
    public String color;

    public void barks() {
        System.out.println(name+"汪汪汪!");
    }
    public void wag() {
        System.out.println(name+"摇尾巴!");
    }
    public static void main(String[] args) {
        PetDog petdog=new PetDog();
        //实例化出了一个petdog对象
    }
}

类属于引用数据类型,如果用类实例化了一个对象,比如:

Person person =new Person();

person是一个变量,里面保存的是一个地址。

类的实例化需要使用关键字new,一个类可以实例化出多个对象

Person person1 =new Person();

Person person2=new Person();

  1. 每实例化一个对象都要用到关键字new。
  2. 使用new关键字以后会在堆上给对象开辟空间
  3. 类本身不占据空间,实例化出的对象占据空间

表示这个引用不指向任何对象:

Person person=null;

 此外:

Person person=null ;

Person person =new Person();

Person person2=person;

person2这个引用指向person引用指向的对象,最终person 和person2都是指向同一个对象

一个引用不可以同时指向多个对象。

七.对象初始化

在创建对象以后可以对对象进行初始化

对象初始化示例

public class PetDog {
    public String name;
    public String color;

    public void barks() {
        System.out.println(name+"汪汪汪!");
    }
    public void wag() {
        System.out.println(name+"摇尾巴!");
    }
    public static void main(String[] args) {
        PetDog petdog=new PetDog();
        petdog.name="旺财";//初始化名字为旺财
        petdog.color="棕色";//初始化颜色为棕色
        petdog.barks();
        petdog.wag();
    }
}

八.this引用

概念:

this引用的是当前调用成员方法的对象

作用:当构造方法里成员变量与形参同名,可以使用this引用,并且可以指向当前对象,知道是哪个对象调用了成员方法

this的三种用法:

  1. this.成员属性     调用当前对象属性
  2. this.成员方法     调用当前对象方法
  3. this(x)                 调用当前对象的其他构造方法

代码示例:

//this引用
public class Date {
    public int year;
    public int month;
    public int day;

    public void setDay(Date this,int year,int month,int day)//默认有一个参数this(Date this,int year,int month,int day)
    {
        this.year=year;
        this.month=month;
        this.day=day;
    }
    public void printDate()
    {
        System.out.println(this.year+"/"+this.month+"/"+this.day);
    }

    public static void main(String[] args) {
        Date d=new Date();
        d.setDay(2023,2,20);
        d.printDate();
    }

}

总结:

  1. 在静态方法中不能使用this引用
  2. 因为,静态方法没有第一个隐藏的this引用参数。
  3. 如果使用this()调用当前对象的构造方法,
  4. 那么在该方法里this()前不能有其他的代码,如果有其他的代码,就会报错。this()必须放到第一行。
  5. this()只能放在构造函数中
  6. this引用是每一个成员方法隐藏的第一个参数,在编译之后编译器会自动还原,我们平时在编写代码时一般不会写,因为代码编译后编译器会自动生成
  7. this只能引用当前对象,不能引用其他对象。

九.构造方法(构造器)

概念:构造方法是一种特殊的成员方法,可以用来初始化成员变量,名字必须和类名相同,没有返回值类型,就算返回值类型甚至不能是void。

作用:构造方法是用来初始化对象的

public class Date {
    public int year;
    public int month;
    public int day;

    public Date(int year,int month,int day)
    {
        this.year=year;
        this.month=month;
        this.day=day;
        System.out.println("Date方法被调用了!");
    }
    public void setDate()
    {
        System.out.println(year+"/"+month+"/"+day);
    }

    public static void main(String[] args) {
        Date d=new Date(2022,7,21);
        d.setDate();
    }
}

 构造方法总结:

  1.  构造方法是在创建对象的时候由编译器自动调用
  2. 构造方法可以重载,重载时可以根据编程的需求设置不同的参数
  3. 如果编程时一旦手动编写构造方法,那么,编译器将不会再自动生成构造方法。
  4. 构造方法在创建对象时由编译器自动调用,且在对象的整个生命周期中只调用一次。
  5. 如果编程时没有显示定义构造方法,那编译器将会自动生成构造方法,但是,生成的构造方法一定是无参的。
  6. 在构造方法中,可以使用this调用其他构造方法来简化代码,但是,this引用必须是构造方法的第一条语句,但是,在构造方法中,this引用之前,不能有其他代码,否则就会编译报错。 

就地初始化

概念:在声明成员变量之后,直接就给成员变量赋值

代码编译完成之后,编译器会自动的将这些成员变量赋值的语句添加到构造方法中。

使用示例:

public class Date {
    public int year=2022;//就地初始化
    public int month=7;
    public int day=30;

    public Date() {

    }
    public Date(int year,int month,int day)
    {

    }
    public static void main(String[] args) {
        Date date1=new Date();
        Date date2=new Date(2000,1,30);


    }
}

默认初始化

概念在使用new创建对象之后,对象里的成员已经由编译器自动赋给了默认值。

使用代码示例:

public class Date {
    public int year;
    public int month;
    public int day;

    public Date(int year, int month, int day) {
        this.year = year;//成员变量会默认初始化,所以不会像下面的a一样
        this.month = month;
        this.day = day;
    }
    
    public static void main(String[] args) {
       Date date=new Date(2022,7,30);
       // int a;如果这里是int a则不能编译通过 ,因为没有初始化
       
    }
}

编程时没有给成员变量赋值,不会报错,因为创建对象之后编译器会自动赋给成员变量默认值,但是在main方法里的局部变量在声明之后如果没有给它赋值,就会报错,显示未对变量初始化,因为main里的局部变量声明时不会被自动被赋给默认值。

各个数据类型赋给的默认值如下:

十.封装

概念:

封装属于Java的三大特性(封装,继承,多态)之一,将数据和操作数据和方法有机结合,隐藏对象的属性和细节,仅对外公开接口来和对象来实现交互。

访问限定符

Java中主要依靠访问限定符来实现封装。

类的作用将数据和操作数据的方法结合在一起,更符合人类对事物的认知。

访问限定符用来控制成员变量或者成员方法能否直接在类外使用

Java中的提供了四种访问限定符:

  1. public :  全局范围内都可访问
  2. protected :不同包中的子类内都可以访问
  3. default :同一包中的不同类内都可访问    
  4. private:同一包中的同一类内可以访问

133f577f099842fa89fe483e72b5fe6c.jpg

  •  使用default时我们在编程时可以不写default,它属于默认权限。
  • 使用封装可以让类内的成员信息更加安全,但需提供对外的接口。
  • 如果使用private实现对成员变量的封装,那么可以提供public修饰的接口,用来在其他类里访问封装的成员变量


 

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值