Java入门(二十)

Java入门(二十)

类与对象的关系

  • 类是一种抽象的数据类型,他可以将一类事物共性抽象出来。他不能代表某一个具体的事物
  1. 动物、植物、手机、电脑
  2. Person类、Pet类、Car类
  • 对象使用抽象概念的具体事例
  1. 张三是人的一个具体实例,张三家里的旺财就是狗的一个具体事例。狗也是一个具体的实例。
  2. 具体的对象能体现具体的特性,展示出功能的是具体的实例,而不是一个抽象的概念。类是对象的模板。
  • 如何创建对象?用new关键字,new创建时会分配内存的空间和默认的对象。
  • 从现在起养成一个习惯,不要在每个类里面都创建一个main方法,这样子是不好的。一个程序应该只有一个主启动类。
    在这里插入图片描述
  • 我们在这可以定义一个大的启动类或者测试类。定义一个Application类,作为入口
package base.oop.demo02;
//一个项目应该只存在一个main方法
public class Application {
    public static void main(String[] args) {
        
    }
}
  • 类里面有属性(一个一个的字段)
public class Student {
    //属性: 字段
    String name;
    int age;
    
    //方法
    public void study(){
        System.out.println(this.name+"学生在学习");   // this代表当前这个类
    }
}
  • 那么我们现在要把这个类实例化出来,类是抽象的,需要实例化。类实例化后会返回自己的对象。student对象就是Student类具体的实例。比如我产生了两个Student的类,一个是小明,一个是小红
package base.oop.demo02;
//一个项目应该只存在一个main方法
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        Student xiaoming = new Student();
        Student xiaohong = new Student();
    }
}
  • 同一个类可以产生不同的对象,但是他们都有共同的特性,他们肯定都有name、age。比如我们现在输出xiaoming.name,看看能不能输出东西
    在这里插入图片描述
  • 现在name没有赋任何值,所以是null。使用new创建对象的时候,除了分配空间,还会创建的对象给初始化以及对类中的构造进行调用。比如String name在没有初始化之前就是null的。int age默认是0. 而你不能再Student类里面直接把name写死为xiaoming,那么所有的学生名字都会被叫做xiaoming。比如我们现在赋值
    在这里插入图片描述
  • 可以看到赋值成功了,和正常的赋值时一模一样的。小明有名字了。那么小明有名字,小红有吗?
    在这里插入图片描述
  • 类是一个抽象的模板,而我们可以通过new关键词创建不一样的实例,虽然都是new Student,但是new完之后就变成具体的实例了。相当于把世界想象成程序,那么所有人他都是一个模板。比如一个Person类,他都会有身高、体重、年龄。
  • 面向对象编程本质是:以类的方式组织代码,以对象的方式组织(封装)数据。

构造器

  • 我们造一个最简单的构造器,比如Person。我们要new这个Person的时候他会调一个方法即时Person里面什么都没写,但他依旧能new出一个方法,就说明他存在一个空的Person的方法。
    在这里插入图片描述
  • 然后就有public Person(){}这样一个东西,就是一个空的构造,虽然我们没写但是他也能调用出来。所以他里面肯定有什么默认的东西
    在这里插入图片描述
  • 我们就这样运行这个项目看看,他在java运行之后会生成一个class文件,我们去class文件里面看看。先打开项目结构
    在这里插入图片描述
    在这里插入图片描述
  • 可以看到他默认帮我们加了一个方法,而且这个方法没有返回值。他这个方法跟类名相同,这就是一个构造器。
    在这里插入图片描述
  • 一个类即使什么都不写,他也会存在一个构造器。这个public的方法就是一个构造方法。构造方法的特点是,必须和类的名字相同。第二必须没有返回值类型,也不能写void。
  • 我们可以显式地定义构造方法,这就是一个无参构造。
public class Person {
    public Person(){
        
    }
}
  • 无参构造可以给我们初始化一些信息。现在这个name应该是一个null
    在这里插入图片描述
  • 构造器第一个作用就是可以初始化一些值,就是他在new的时候他会进入这个方法。比如 this.name=“qinjiang”,这个时候他就不是null而是qinjiang了
    在这里插入图片描述
  • 那么我们再来断点调试一下
    在这里插入图片描述
  • 到了下一步变成了null
    在这里插入图片描述
  • 走完qinjiang之后,this.name变成了秦疆了
    在这里插入图片描述
  • 然后构造器走完了,这句话才生成对象
    在这里插入图片描述
  • 构造器核心的作用
  1. 使用new关键字的时候,必须要有构造器,否则会报错。new 对象的时候本质还是调用构造器。
  • 我们来写个有参构造。this.name = name 代表 String name传递下来的name。this.name代表对象本身的name。一旦定义了有参构造,无参构造就必须显示定义。否则无效。
    public Person(String name){
        this.name = name;
    }
  • 假如把右边无参定义删掉,左边就报错了
  • 跑一下程序看报错,看到是没有参数。
    在这里插入图片描述
  • 我们尝试传一个值,传了之后肯定会走某个方法,因为他也是调方法的。通过new关键词来调用方法。
 Person person = new Person("kuangshen");
  • 打个断点来跑一下
    在这里插入图片描述
  • 这个地方直接跑到了有参构造,自动根据参数来判断,因为方法是可以重载的。
    在这里插入图片描述
  1. 构造器一般是用来初始化值
  • alt + insert 会生成构造器 (windows) ,ctrl + enter(mac)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 上面生成的是有参的,那么怎么生成无参的呢?用 select none
    在这里插入图片描述
    在这里插入图片描述
  • 总结:
    1 构造器和类名相同
    2 没有返回值
  • 作用:
    1 new 本质在调用构造方法
    2 初始化对象的值
  • 注意点:
    1 定义了有参构造,如果使用无参构造,必须显式定义无参构造
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值