Java笔记(六)——类和对象(上) 类的定义 / 初始化 / toString

1 类和对象的初步认识

Java是一门纯面相对象的语言(Object Oriented Program)

1.1 主观理解

  对象、类:表示具体问题中针对一些事物的抽象,所谓抽象就是用代码来表示现实中的东西。
  可以将类和对象想象成模具和点心:
在这里插入图片描述
  类 -->模具
  对象 -->点心
  我们通过这一猫爪模具可以做出很多猫爪小点心,这个猫爪模具就是一个类,这些猫爪小点心就是对象。
有各种各样的模具,通过不同的模具可以做出不同的点心,也就是说由各种类可以创建很多对象。

1.2 代码/语法的角度

类:自定义类型 (高配结构体)
对象:自定义类型创建出来的变量

2 类的定义和使用

2.1类的定义、实例化

  类,相当于把现实事物中的属性和行为结合到一起。

class Cat {  
    public String name;//名字
    public int age;//年龄
    public String color;//颜色
    public double weight;//体重
    public String gender;//性别  
  //猫的行为,即方法
    public void barks() {
        System.out.println("mewing,mewing");
    }
    public void jump() {
        System.out.println("jump,jump");
    }
} 

  有了类后,需要根据类创建出具体的对象。这个操作也称为“实例化”。对象(object)等价于 实例(instance)

Cat cat1= new Cat();
Cat cat2= new Cat();
Cat cat3= new Cat();
//这是三个不同的对象
//同一个类,可以创建出很多个实例

注意:
  创建好对象/实例之后,最核心的操作就是访问成员(通过" . "操作)。所谓成员是指:成员变量(属性)和成员函数(方法)

    Cat cat= new Cat();
    cat.name = "糯米";
    System.out.println(cat.name);
    cat.eat("鱼");

2.2 常见的类定义错误

(1) 同一个包里面,不能有两个相同的类;不同包里可以有同名的类。

    class TestDemo {
    }
    public class TestDemo {
        public static void main(String[] args) {
        System.out.println("hello");
        }
    } 

(2) 修改public 修饰的类时要注意
a .java文件名要和public 类名一致,为什么呢,因为这样虚拟机在相应路径找到相应类对应的字节码文件比较方便。
b 编译器在编译时,针对一个 .java源代码文件,只会接受一个public 类。
因此,修改public 修饰的类名时,最好右击该类通过 Refactor => Rename 的方式修改。就能同时修改文件名和类名,以及在程序中用到此类的地方。(小技巧:shift + F6可以触发refactor 功能,同时修改文件名和类名,以及在程序中用到此类的地方)
在这里插入图片描述

3 类的成员

3.1 成员变量/属性/字段

成员变量:在类中,但是在方法的外面,就叫做成员变量/属性/字段。可以就地初始化,给它赋一个值,也可以先不赋值,有默认初始值。(最好初始化)

    public String name;
    public String gender;
    public int age;
    public String breed;
    public String color;

注意:
1、使用 . 访问对象的成员;
2、“访问” 既包含读, 也包含写;
3、对于一个对象的字段如果没有显式设置初始值, 那么会被设置一个默认的初始值。各种类型的默认初始值不同,在下面的4.1 节中会具体讨论。

3.2 方法

1、方法:用于描述一个对象的行为。
方法中的属性为局部变量。

public void eat(String food){
    System.out.println(name+"正在吃"+food);
}

public void sleep(){
    System.out.println(name+"正在睡觉");
}

2、方法中有一种特殊的方法叫做 构造方法:
  在实例化对象的时候会被自动调用到的方法, 方法名字和类名相同, 用于对象的初始化 。虽然我们前面已经能将属性就地初始化, 但是有些时候可能需要进行一些更复杂的初始化逻辑, 那么就可以使用构造方法。

4 对象的初始化

写代码时,但凡是创建变量,最好初始化。
对象初始化的方式:

4.1 默认值

不同类型默认值不同
我们可以通过运行看到它们的默认值

public int a;
public long b;
public byte c;
public double d;
public boolean e;
public char f;        // 空格 \u000 unicode码
public String g;      //引用类型初始值为null
public int[] h;

在这里插入图片描述
规则:
1、数字默认初始值为0
2、boolean默认初始值是false
3、引用类型默认初始值是null

4.2 就地初始化

即定义时就给定初始化的值

public int a = 100;

4.3 代码块初始化

大括号中的就是代码块,会在new对象时自动执行。代码初始化和就地初始化是同一级别,哪个先出现哪个先执行。

public int a=100;    //先执行
{
	a = 0;       //后执行,为最终结果
}

所以最后结果为 a = 0。

4.4 构造方法初始化

1、构造方法的特殊之处:
(1) 构造方法的方法名固定,必须和类名相同;
(2) 构造方法不需要return 语句,但可以理解成返回了该对象的引用
(3) 构造方法不需要显示调用,而是在new 的时候自动被调用
(4) 构造方法支持重载,重载规则和普通方法一样

2、构造方法的使用:
(程序员直接给出,用户不能修改)
Alt + insert 触发 Generate可以自动创建构造方法
在这里插入图片描述
在这里插入图片描述
3、this的使用:
(1) this 指向当前对象的引用;
(2) this 的类型就是当前这个类的类型;
(3) this 这个引用的指向不能修改;
(4) this 也可以用来调用方法;
(5) this 不能是null。

public class Cat {
    String name;
    String gender;

    public Cat(String name, String gender) {
        this.name = name;
        this.gender = gender;

        this.eat("鱼");
    }

    public void eat(String food){
        System.out.println(name + "正在吃" + food);
    }
}

4、由用户输入对其属性进行定义(与上面的代码可以并存,重载)

System.out.println("请输入一个名字:");
 
public Cat(String name){
    //表示当前对象的引用,相当于“我”
    //this.name 成员变量;name 当前方法的参数
    this.name = name;

5、代码块和构造方法的先后顺序

public Cat(){
    name = "糯米";
    gender = "公猫";
    age = 1;
    breed = "中华田园猫";
    color = "橘色";
}
{
    name = "苹果";
}

运行结果为:糯米(先执行代码块,后执行构造方法)

5 toString

1、当我们创建了一个小猫的对象,然后想看这个对象里面是什么时,不能直接打印。

public static void main(String[] args) {
    Cat cat = new Cat("糯米","公猫");
    System.out.println(cat);
}

在这里插入图片描述
直接打印,会打印出来这样的东西,但是我们想要看到的是里面的内容,比如,小猫的名字、性别。
2、我们在我们创建的Cat 类中可以再加一个toString 方法,这样打印就可以直接打印出里面的内容。

public String toString(){
    return this.name + "," + this.gender;
}

在这里插入图片描述
3、我么还可以借助IDEA来自动生成
类似于上面自动创建构造方法,Alt + insert 触发Generate也可以自动创建toString。打印的也很好看,有一定的格式。

@Override
public String toString() {
    return "Cat{" +
            "name='" + name + '\'' +
            ", gender='" + gender + '\'' +
            '}';
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值