【Java初阶(五)】类和对象

这篇具有很好参考价值的文章主要介绍了【Java初阶(五)】类和对象。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

❣博主主页: 33的博客❣
▶文章专栏分类: Java从入门到精通◀
🚚我的代码仓库: 33的代码仓库🚚

1. 前言

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),用面向对象的思想来涉及程序,更符合人们对事物的认知,对于大型程序的设计、扩展以及维护都非常友好,那么何为对象?何为类呢?这篇文章博主将会详细进行讲解。

本章重点:

掌握类的定义方式以及对象的实例化,类的构造方法,类中的成员变量和成员方法的使用,对象的整个初始化过程。


2.面向对象的认识

在面向对象的世界里,一切皆为对象。面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情。我们可以借助人洗衣服的例子来进行思考。
传统的方式:注重洗衣服的过程,少了一个环节都不行,如下:
【Java初阶(五)】类和对象,Java从入门到精通,java,python,开发语言,类和方法
现代洗衣服方式,如下:
【Java初阶(五)】类和对象,Java从入门到精通,java,python,开发语言,类和方法

总共有4个对象:人,衣服,洗衣液,洗衣机
整个过程:人,衣服,洗衣液,洗衣机之间交互完成,只需要将衣服放进洗衣机,倒入洗衣粉,启动开关即可,不需要关心洗衣机如何洗的衣服。


3.类的认识

类是用来对一个实体(对象)来进行描述的。主要描述对象的属性,哪些功能是干啥的。
类的定义格式如下:

class ClassName{  
	field;  // 字段(属性) 或者 成员变量
	method; // 行为 或者 成员方法     
}

属性:是用来描述类的,称之为类的成员属性或者类成员变量。
方法:主要说明类具有哪些功能,称为类的成员方法。
以洗衣机为例:

class WashMachine{
    public String brand;   // 品牌
    public String type;    // 型号
    public double weight;  // 重量
    public double length;  // 长
    public double width;  // 宽
    public double height;  // 高
    public String color;   // 颜色  
    public void washClothes(){   // 洗衣服
    	int a;//局部变量,进入方法时创建,出方法时销毁
        System.out.println("洗衣功能");
    }  
    public void dryClothes(){    // 脱水
        System.out.println("脱水功能");
    }  
    public void setTime(){       // 定时
        System.out.println("定时功能");
    }
 }

4. 类的实例化

4.1什么是实例化

定义了一个类,就相当于在计算机中定义了一种新的类型与int,double类似,只不过int和double是java语言自带的内置类型,而类是用户自定义了一个新的类型,比如上述的:WashMachine它是类(一种新定义的类型)有了这些自定义的类型之后,就可以使用这些类来定义实例(或者称为对象)。
用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。

//小狗的类
class PetDog {
 public String name;//名字
public String color;//颜色
// 狗的属性
public void barks() {
 System.out.println(name + ": 旺旺旺~");
 }
 // 狗的行为
public void wag() {
 System.out.println(name + ": 摇尾巴~");
 }
 }
 //实例化
public class Main{
    public static void main(String[] args) {
        PetDog dog = new PetDog();     //通过new实例化对象
        dogh.name = "阿黄";
        dogh.color = "黑黄";
        dogh.barks();
        dogh.wag();
    }
 }

输出结果:
阿黄:旺旺旺~
阿黄:摇尾巴~
【Java初阶(五)】类和对象,Java从入门到精通,java,python,开发语言,类和方法


4.2类和对象的说明

  1. 类只是一个模型一样的东西,用来对一个实体进行描述,限定了类有哪些成员.
  2. 类是一种自定义的类型,可以用来定义变量.
  3. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

5.this引用

先看一个日期的例子:
//日期类

public class Date {
    public int year;
    public int month;
    public int day;
    public void setDay(int y, int m, int d){
        year = y;
        month = m;
        day = d;
    }
 
    public void printDate(){
        System.out.println(year + "/" + month + "/" + day);
    }
 
    public static void main(String[] args) {
        // 构造三个日期类型的对象 d1 d2 d3
        Date d1 = new Date();
        Date d2 = new Date();
        Date d3 = new Date();
        // 对d1,d2,d3的日期设置
        d1.setDay(2020,9,15);
        d2.setDay(2020,9,16);
        d3.setDay(2020,9,17);
 		// 打印日期中的内容
		d1.printDate();
		d2.printDate();
 		d3.printDate();
 }
 }

问题1
我传了3个日期到setDay里面,那么seDay如何知道设置哪一个对象呢?printDate又是如何知道要打印哪一个呢?
其实,this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收。例如

ublic void setDay(Date this,int y, int m, int d){
        year = y;
        month = m;
        day = d;
    }
    public void printDate(Date this){
        System.out.println(year + "/" + month + "/" + day);
    }

【Java初阶(五)】类和对象,Java从入门到精通,java,python,开发语言,类和方法
问题2.
如果 形参名与成员变量名相同,那函数体中到底是谁给谁赋值?成员变量给成员变量?参数给参数?参数给成员变量?成员变量参数?

 public void setDay(int year, int month, int day){
        year = year;
        month = month;
        day = day;
    }

实际上是局部变量赋给自己,并没赋值给成员变量,最后的输出结果就为0。如果要把形参的值赋给成员变量,该如何修改呢?这个时候就可以用this引用:this引用的是调用成员方法的对象。

public void setDay(int year, int month, int day){
        this.year = year;
        this.month = month;
        this.day = day;
    }

this引用的特性:
>1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型

  1. this只能在"成员方法"中使用
  2. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

6.对象初始化

通过前面知识点的学习知道,在Java方法内部定义一个局部变量时,必须要初始化,否则会编译失败,但是在定义成员变量中,我们并没有初始化也没报错,为什么呢?那是因为对于一个成员变量来说,在没有初始化之前都有一个默认值,引用类型默认是null,其余简单类型默认为0,boolean类型是false。


6.1 构造方法

构造方法是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。
构造方法特点:

1.名字与类名相同,没有返回值类型,设置为void也不行。
2.一般情况下使用public修饰。
3. 在创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次。
4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)。
5. 当我们没有写任何构造方法时,会默认存在一个无参构造方法,只要存在任何一种构造方法,编译器都不会再提供。

:为日期类实例化一个对象

Date  date=new  Date ();//实际上,没有写构造默认默认调用了无参构造方法
public Date ((int year, int month, int day){
 	this.year = year;
    this.month = month;
    this.day = day;
}//带有参数的构造方法
Date  date=new  Date (2024,3,3);//调用有参的构造方法

可以通过this来调用其他构造方法

public Date (){
	this(2024,3,3)//必须写在第一条语句中!!
}
public Date ((int year, int month, int day){
 	this.year = year;
    this.month = month;
    this.day = day;
}

7.static关键字

在学生类实例化三个对象s1、s2、s3,每个对象都有自己特有的名字、性别,年龄,学分绩点,班级等成员信息,这些信息就是对不同学生来进行描述的,如下所示:

class Student {
    public String name;
    public String sex;
    public int age;
    public double score;
    public   String classRoom;
    public Student(String name, String sex, int age, double score,String classRoom) {
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.score = score;
        this.classRoom=classRoom;

    }
}
class Main{
        public static void main(String[] args) {
            Student s1 = new Student("Li leilei", "男", 18, 3.8,"112");
            Student s2 = new Student("Han MeiMei", "女", 19, 4.0,"112");
            Student s3 = new Student("Jim", "男", 18, 2.6,"112");
        }

}

【Java初阶(五)】类和对象,Java从入门到精通,java,python,开发语言,类和方法
此时,3名同学都在一个班,只要有一份就行了,不需要在每个对象中都去表示那么该如何修改呢?其实只需要把classRoom变成以static修饰,那么这时这个成员变量就不属于这个对象了。

public   String classRoom;

这时候如果我们要调用classRoom这个变量,就不再需要new一个对象了,只需要用类名来进行访问。

 System.out.println(Student.classRoom);//合理
 System.out.println(Student.classRoom);//不合理

如果一个方法被static修饰,那么这个方法也不依赖任何对象。


8.代码块

使用{}定义的一段代码称为代码块。根据代码块定义的位置以及关键字,又可分为以下四种:

  • 普通代码块
  • 构造块
  • 静态块
  • 同步代码块

8.1 普通代码块

普通代码块:定义在方法中的代码块。

 public class Main{
    public static void main(String[] args) {
        { //直接使用{}定义,普通方法块
            int x = 10 ;
            System.out.println("x1 = " +x);
        }
        int x = 100 ;
        System.out.println("x2 = " +x);
    }
 }

8.2构造代码块

**构造块:**定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。

public class Student{
    //实例成员变量
    private String name;
    private String gender;
    private  int age;
    private double score;
    
    public Student() {
        System.out.println("I am Student init()!");
    }    
    //实例代码块
    {
        this.name = "33";
        this.age = 12;
        this.sex = "girl";
    }    

8.3 静态代码块

使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。

 public class Student{
    private String name;
    private String gender;
    private int  age;
    private double score;
    private static String classRoom;
    //实例代码块
    {
        this.name = "33";
        this.age = 12;
        this.sex = "girl";
 }
 // 静态代码块
static {
 classRoom = "111";
 System.out.println("I am static init()!");
 }

注意

  • 静态代码块不管生成多少个对象,其只会执行一次
  • 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的
  • 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)
  • 实例代码块只有在创建对象时才会执行

8.4 代码块执行顺序

如果几种代码块同时出现在一个类中,执行顺序是怎样的呢?

public class Student {

        private String name;
        private String sex;
        private int  age;
        private static String classRoom;
        //实例代码块
        {
            this.sex = "girl";
            System.out.println("我是实例代码块");
        }
        // 静态代码块
        static {
            classRoom = "111";
            System.out.println("我是静态代码块");
        }

    public Student(String name,  int age) {
        this.name = name;
        this.age = age;
        System.out.println("我是构造方法");
    }  
}
public class Main {
    public static void main(String[] args) {
            Student student1=new Student("zhangsan",12);
             System.out.println("============");
            Student student2=new Student("lisi",14);       
    }
}

输出结果:
【Java初阶(五)】类和对象,Java从入门到精通,java,python,开发语言,类和方法
静态代码块最先执行,且执行一次,然后是实例代码块,最后是构造方法。


9.总结

本篇文章主要讲了对象和类的概率,类的定义方式以及对象的实例化,类的构造方法,类中的成员变量和成员方法的使用,对象的整个初始化过程,static关键字应用,代码块的讲解和各种代码块执行顺序,在接下来的文章中我会进一步深入。

下期预告:封装 继承 多态文章来源地址https://www.toymoban.com/news/detail-845618.html

到了这里,关于【Java初阶(五)】类和对象的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA JDBC数据库开发详解:从入门到精通

    简介: Java是一种面向对象,安全灵活的编程语言,已经成为了世界上最流行的编程语言之一。Java语言的一个重要应用领域就是数据库开发。通过Java JDBC(Java Database Connectivity) API,开发人员可以使用Java语言来访问并操作各种数据库。 本篇资料将会详细介绍Java JDBC数据库

    2024年02月02日
    浏览(42)
  • C++初阶——类和对象

    呀哈喽,我是结衣 C++入门之后,我们就进入了C++的初阶的学习了,在了解类和对象之前,我们还是先了解,面向过程和面向对象的初步认识。 在本篇博客中,我们要讲的内容有 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类

    2024年02月03日
    浏览(32)
  • C++初阶 类和对象(下)

    目录 一、拷贝构造函数 1.1 什么是拷贝构造函数? 1.2 为什么得是引用? 1.3 使用拷贝构造函数 1.4 拷贝构造函数有什么用? 二、运算符重载 2.1 什么是运算符重载? 2.2  尝试前须知 2.3 常见运算符重载 2.3.1+=运算符重载 2.3.2+运算符重载 2.3.3前置++和后置++运算符重载 三、下期

    2024年02月05日
    浏览(36)
  • 【C++初阶】类和对象(上)

    📖 面向过程 C语言是 面向过程的 ,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。以洗衣服这件事为例,下图是C语言完成洗衣服这件事的过程。 📖 面向对象 C++是 基于面向对象的 ,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完

    2024年02月16日
    浏览(38)
  • 【C++初阶】类和对象(一)

    ​ ​📝个人主页:@Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C++学习 🎯 长路漫漫浩浩,万事皆有期待 上一篇博客:【C++】C++入门(一):命名空间C++的输入输出缺省参数函数重载 C语言是面向过程的,关注的是过程,分析求解问题的步骤,通过

    2024年02月01日
    浏览(35)
  • 【C++初阶】类和对象(下)

      构造函数其实分为:     1.函数体赋值     2.初始化列表 之前所讲到的构造函数其实都是函数体赋值,那么本篇文章将会具体讲述初始化列表。 语法 以 一个冒号开始 ,接着是 一个以逗号分隔 的数据成员列表,每个\\\"成员变量\\\"后面跟 一个放在括号中的初始值或表达式。

    2024年02月05日
    浏览(40)
  • C++初阶(八)类和对象

    📘北尘_ :个人主页 🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 声明为static的类成员称为类的 静态成员 ,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数,称之为静态成员函数。静态

    2024年02月05日
    浏览(43)
  • C++初阶 类和对象(上)

    前言:C++初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C++初阶系列会持续更新,上学期间将不定时更新,但总会更的 目录 一、什么是面向对象编程 二、什么是类和如何定义类 1.类的概念 2.类的特点 3.访问限定符 4.如何

    2024年02月05日
    浏览(43)
  • C++初阶 - 3.类和对象(中)

    目录 1.类的6个默认成员函数 2.构造函数 2.2特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1运算符重载  5.2 赋值运算符重载 5.3 前置++和后置++重载 6.日期类的实现 7.const成员 8.取地址及const取地址操作符重载 如果一个类中什么成员都有,

    2024年02月16日
    浏览(39)
  • Python零基础入门(九)——函数,类和对象

    个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊 欢迎来到 Python 零基础入门系列的第九篇!前面的文

    2024年02月15日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包