类 和 对象(一)

1. 面向对象的初步认知

Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),在面向对象的世界里,一切皆对象,面向对象是解决问题的一种思想,主要依靠对象之间的交互完成一件事情

面向对象与面向过程的区别:
面向对象:注重的是对象(结果)(1.找对象 2.创建对象 3.使用对象),如像洗衣服注重的只有洗衣机,衣服和洗衣粉几个对象是如何交互完成工作的,而不注意是怎么洗的
面向过程:注重的是过程,如洗衣服时洗衣服的过程必须每个环节都在,少一个环节都不行,按照这种方式写代码,将来扩展或维护起来会很麻烦

2. 类定义和使用

对象是一个真正存在的实体,而类是用来描述一个对象的(Java中一切皆对象)
类也叫类型,即自定义类型(相当于C语言中的结构体),类名相当于一个类型,可以用来定义一个变量

class dog{//dog是类名
    public int num;
    public String name;//num和name叫做字段或属性或成员变量

    public void bark(){
        System.out.println(name + "在叫");//bark方法叫做成员方法或行为
    }
}

上述代码中 定义类需要用到class关键字,dog为这个类的类名(类名用大驼峰形式),{ }中为类的主体,字段定义在类内方法外

注意事项:

  1. 类名用大驼峰形式
  2. 一般一个文件中只定义一个类
  3. main方法所在的类一般要使用public修饰(因为Eclipse[ 像idea这样的开发软件 ]默认会在public修饰的类中找main方法)
  4. public修饰的类必须要和文件名相同
  5. 不要轻易去修改public修饰的类的名称,如果要修改,通过开发工具修改(在idea中修改public修饰的类的类名过程如下)
    在这里插入图片描述

3.类的实例化

定义了一个类,就相当于在计算机中定义了一种新的类型,可以用类型来创建对象。==用类型来创建对象的过程,称为类的实例化。==在Java中配合new关键字实例化对象(new关键字可以在堆中为对象分配内存空间)
dog d1 = new dog();//类的实例化

局部变量在方法中,局部变量在使用前要初始化,不初始化会报错
那么类在实例化之后类中的成员变量需要初始化吗?
答案是不用。成员变量是定义在类中的,方法之外的,所以不是局部变量,没有初始化也不会报错
成员变量会有一个默认值,遵循以下规则
1.引用类型默认为null
2.基本数据类型默认为相应的0值

可以通过对象的引用(在栈上的地址)去访问对象的成员变量和成员方法,用 .

class dog{//dog是类名
    public int num;
    public String name;//num和name叫做字段或属性或成员变量

    public void bark(){
        System.out.println(name + "在叫");//bark叫做成员方法或行为
    }
}
public class May_21 {
    public static void main(String[] args) {
        //int a;//报错
        int a = 0;
		
        dog d1 = new dog();
        d1.bark();

    }
}

上述代码中,d1是实例化的对象,d1.bark 和 d1.bark 是通过对象的引用来访问类中的成员变量,如下图当d1.name没有初始化时,默认值为null
在这里插入图片描述

但是如果给d1.name初始化则会变成下图
d1.name = "A";//d1.name初始化
在这里插入图片描述

总结:

  1. new关键字用于创建一个对象的实例
  2. 使用 . 访问对象中的成员变量和成员方法
  3. 同一个类可以创建多个实例(上述代码有d1,则还可以创建d2,d3,d4等别的实例)

4.this引用

为什么要有this引用

让我们先看一个日期类

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

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

    public void printDate(){
        System.out.println(year + "年 " + month + "月 " + day + "日 ");
    }
}
public class May_21 {

    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2024,5,21);
        date.printDate();
    }
 }

当我们用main函数将年月日打印出来,当形参名不小心与成员变量名相同时会发现年月日都是默认值0
在这里插入图片描述
为什么呢?
原因:此 setDate 方法中的 year month day 都是局部变量,当局部变量和成员变量相同时,局部变量优先使用,导致此处的 year month day 自己给自己赋值,并没有修改到形参的值,year month day 都是默认值
解决方法:this.

当我们加上this. 时会发现year month day 可以打印出来了

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

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

    public void printDate(){
        System.out.println(year + "年 " + month + "月 " + day + "日 ");
    }
}
public class May_21 {

    public static void main(String[] args) {
        Date date = new Date();
        date.setDate(2024,5,21);
        date.printDate();
    }
 }

在这里插入图片描述

什么是this引用

this引用指当前对象的引用(this引用的是调用成员方法的引用),在成员方法中所有成员变量的操作,都是通过该引用去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成

this引用的特性

  1. this引用的是调用成员方法的引用,像在上面有this的Date类代码中,this指的是date这个引用
  2. this只能在"成员方法"中使用,注意:this不能在静态方法中使用
  3. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收
  4. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

this的三种用法

  1. 访问当前对象的成员变量
  2. 访问当前对象的成员方法
  3. 访问当前对象的其他构造方法(用this(参数)来访问)
  • 73
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 40
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值