Java之类和对象

文章目录

  • 1.面向对象
  • [2. 类的定义和使用](#2. 类的定义和使用)
    • [2.1 类](#2.1 类)
    • [2.2 类的定义](#2.2 类的定义)
  • 2.3例题
  • [3. 类的实例化](#3. 类的实例化)
  • 4.this引用
  • [5. 对象的构造和初始化](#5. 对象的构造和初始化)
    • [5.1 构造方法](#5.1 构造方法)
      • [5.1.1 什么是构造方法](#5.1.1 什么是构造方法)
      • [5.1.2 构造方法的特性](#5.1.2 构造方法的特性)
    • [5.2 初始化](#5.2 初始化)
      • [5.2.1 默认初始化](#5.2.1 默认初始化)
      • [5.2.2 就地初始化](#5.2.2 就地初始化)

1.面向对象

1.1 什么是面向对象?

Java面向对象的概念是指在计算机层程序中,模拟现实世界中的概念,借助对象的描述在计算机中用类似的实体模拟现实世界中的实体。在面向对象的世界里,一切皆为对象,面向对象主要依靠对象之间的交互来完成一件事。

1.2面向对象与面向过程

例如,将大象放进冰箱需要几步?

总共有两个对象,分别为大象和冰箱。

需要三步,打开冰箱门,将大象放进冰箱,关上冰箱门,我们并不需要知道是如何将大象放进冰箱的。

面向对象的方法来处理问题,就不需要关注将大象放进冰箱的过程,是通过对象之间的交互来完成的

2. 类的定义和使用

面向对象关注的是对象,是现实生活中的实体,例如一名学生,他有名字,学号,性别,班级,年龄,生日,籍贯等属性,这些属性是对这个学生的描述。

2.1 类

类就是对一个对象进行描述的,例如上面的学生的例子。

2.2 类的定义

在Java中是这样定义类的

要用到class 关键字,class是定义类的关键字。

java 复制代码
class ClassName{
	field;//成员变量
	method;//成员方法
}

例如:

java 复制代码
class Student {
    public int id;//学号
    public String name;//姓名
    public String sex;//性别
    public String birthday;//生日
    public String birthplace;//籍贯

    //学习
    public void study(){
        System.out.println("正在学习");
    }
    
    //吃饭
    public void eat(){
        System.out.println("正在吃饭");
    }
    
    //睡觉
    public void sleep(){
        System.out.println("正在睡觉");
    }
}

注意

  1. 类名建议采用大驼峰方式
  2. 刚学习如何定义类,成员变量前统一使用public关键字
  3. 成员方法前不使用static关键字

2.3例题

定义一个狗类,当然是我最喜欢的仔仔啦!嘻嘻

仔仔的属性有名字,性别,年龄,颜色......,成员方法有睡觉,吃饭,加启动(竖中指)bushi,狗叫......

让我们来一起实现下

java 复制代码
public class Dog {
    public String name;
    public String sex;
    public int age;
    public String color;
    
    public void sleep(){
        System.out.println(name + "在睡觉");
    }
    
    public void eat(){
        System.out.println(name + "在吃红烧肉");
    }
    
    public void bark(){
        System.out.println(name + "在狗叫");
    }
}

注意

  1. 建议一个Java文件只定义一个类
  2. main方法所在的类一般要使用public修饰
  3. public 修饰的类必须和文件名相同
    例如,一个Java文件中定义了许多类,被public修饰的类一定要与文件名相同

不相同时就会出错

  1. 改类名的时候需要通过开发工具改,不要直接在代码中改

3. 类的实例化

用类类型创建对象的过程,就是类的实例化

就像我定义了狗这个类,我想实例化仔仔这个对象。在Java中使用new关键字来实例化对象。用 . 来访问对象的成员变量和成员方法。

java 复制代码
public class Main {
    public static void main(String[] args) {
        Dog dog1 = new Dog();
        dog1.name = "仔仔";
        dog1.color = "屎色";

        dog1.eat();
        dog1.bark();

        Dog dog2 = new Dog();
        dog2.name = "小白";
        dog2.color = "白色";

        dog2.sleep();
        dog2.eat();
    }
}

仔仔在吃红烧肉,嘻嘻

每人限领一个!!!

一个类中可以创建多个实例。

画JVM布局分布图,加深理解

4.this引用

让我们来看下列代码,一起了解为什么要使用this关键字

java 复制代码
public class Date {
    public int year;
    public int month;
    public int day;

    public void setDate(int y,int m,int d){
        year = y;
        month = m;
        day = d;
    }

    public void printDate(){
        System.out.println(year + "-" + month + "-" + day);
    }
}
java 复制代码
public static void main(String[] args) {
        Date date1 = new Date();
        Date date2 = new Date();
        Date date3 = new Date();

        date1.setDate(2014, 5, 4);
        date2.setDate(2024, 6, 2);
        date3.setDate(2021, 3, 4);

        date1.printDate();
        date2.printDate();
        date3.printDate();
    }

当我们在编写setDate方法时,形参与成员变量相同,如下代码所示

java 复制代码
public void setDate(int y,int m,int d){
        year = year;
        month = month;
        day = day;
    }

那到底是谁给谁赋值呢?

我们在main函数中创建了三个对象,当三个对象同时调用setDate和printDate方法时,两个方法是如何知道打印的是哪个数据?

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

所以Date类可以这样写

java 复制代码
public class Date {
    public int year;
    public int month;
    public int day;

    public void setDate(int y,int m,int d){
        this.year = year;
        this.month = month;
        this.day = day;
    }

    public void printDate(){
        System.out.println(this.year + "-" + this.month + "-" + this.day);
    }
}

注意

  1. this只能在成员方法中使用
  2. this在成员方法中只能引用当前对象
  3. 其实在成员方法的参数中,第一个参数就是this,但是被隐藏了

    在成员方法执行的时候,编译器会将调用成员方法对象的引用传递给成员方法,用this来接收。

5. 对象的构造和初始化

5.1 构造方法

5.1.1 什么是构造方法

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

一定要记住啊,这个真的很重要!好多题都会考,一起来看下如何定义构造方法

java 复制代码
class Dog {
    public String name;
    public String sex;
    public int age;
    public String color;

    //无参数的构造方法
    public Dog(){

    }

    //四个参数的构造方法
    public Dog(String name,String sex,int age,String color){
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.color = color;
    }

    public void show(){
        System.out.println("姓名:" + name + "性别:" + sex + "年龄:" + age + "颜色:" + color);
    }

	public static void main(String[] args) {
        Dog dog = new Dog();
        dog.show();
    }
}

5.1.2 构造方法的特性

  1. 没有返回值
  2. 构造方法的名字必须与类名相同
  3. 在创建对象时,编译器会自动调用构造方法,构造方法只执行一次(创建对象时没有传递参数,就是调用无参数的构造方法;如果传递了参数,根据参数来决定调用的到底是哪个构造方法)
  4. 构造方法可以重载,例如上述代码中,无参数的构造方法和带有四个参数的构造方法实现了重载
  5. 当用户没有写构造方法时,编译器会自动提供一个无参数的构造方法(但是,当用户自己定义了构造方法时,编译器就不会提供了)

由于编译器自动提供无参数的构造方法,并没有报错

当用户提供了构造方法,编译器将不会提供

  1. 可以使用快捷键来生成构造方法

Alt + Insert

  1. 在构造方法中,可以用this来调用其他构造方法
  2. this的调用不能成环

5.2 初始化

当我们在main方法中定义一个变量而没有初始化时,会报错

而我们在定义类的时候,没有给成员变量进行初始化,并没有报错,这是因为在一个类的成员变量中,没有初始化前,java会对每个成员变量赋一个默认值。

5.2.1 默认初始化

数据类型 默认值
byte 0
short 0
int 0
long 0
float 0.0f
double 0.0
char '\u0000'
boolean false
reference null

5.2.2 就地初始化

就地初始化就是在声明成员变量时,直接初始化

相关推荐
装不满的克莱因瓶11 分钟前
【Redis经典面试题六】Redis的持久化机制是怎样的?
java·数据库·redis·持久化·aof·rdb
n北斗19 分钟前
常用类晨考day15
java
biomooc20 分钟前
R 语言 | 绘图的文字格式(绘制上标、下标、斜体、文字标注等)
开发语言·r语言
骇客野人22 分钟前
【JAVA】JAVA接口公共返回体ResponseData封装
java·开发语言
black^sugar24 分钟前
纯前端实现更新检测
开发语言·前端·javascript
404NooFound29 分钟前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
用余生去守护1 小时前
python报错系列(16)--pyinstaller ????????
开发语言·python
yuanbenshidiaos1 小时前
c++---------数据类型
java·jvm·c++
数据小爬虫@1 小时前
利用Python爬虫快速获取商品历史价格信息
开发语言·爬虫·python
向宇it1 小时前
【从零开始入门unity游戏开发之——C#篇25】C#面向对象动态多态——virtual、override 和 base 关键字、抽象类和抽象方法
java·开发语言·unity·c#·游戏引擎