java day07 面向对象(类、对象、构造方法、this)

1、什么是对象

  • 面向对象思想(Object Oriented Programming)
  • 任何对象,一定具有自己的特征和行为。
  • 面向过程:什么事都由自己完成
  • 面向对象:把自己的事交由他人完成, 一切客观存在的事物都是对象
    (万物皆对象)
  • 类:抽象的事物(职业,职称)
  • 对象:具体的的事物(具体的人)

1.2 程序中的对象

  • 如何使用程序模拟现实世界,解决现实问题?
  • 首先,在程序当中,必须具有和现实中相同的对象,用以模拟现实世界。
  • 然后,使用程序中的对象代表现实中的对象,并执行操作,进而解决现实问题

2、什么是类

2.1 类的定义

  • 属性:通过变量表示,又称实例变量。
  • 位置:类的内部,方法的外部。
  • 方法:通过方法表示,又称实例方法。
  • 语法:
    数据类型 属性名;
    public 返回值类型 方法名(形参){
    //方法的主体
    }
  • 注意:不再书写static,后续详解。

示例:

//采购员
public class Buyer {
    //类属性
    String name;

    //类方法
    public void buy(){
        System.out.println("采购员进行采购");
    }
}

2.2 对象的创建

  • 创建对象(实例化对象)
  • 类名 对象名 = new 类名();
  • 对象名.属性 – 调用对象中的属性进行赋值或者取值
  • 对象名.方法() – 调用对象中的方法

示例:

public class Demo01 {
    public static void main(String[] args) {
        /*面向过程
        String name = "老板";
        System.out.print("老板");
        buy();*/


        //面向对象
        //1.请一个采购员回来
        //类名 对象名 = new 类名();
        Buyer buyer = new Buyer();
        //通过对象名调用对象属性
        buyer.name = "码云";
        //通过对象名调用对象的方法
        buyer.buy();
        //打印采购员的名字
        System.out.println(buyer.name);
    }

    public static void buy(){
        System.out.println("采购");
    }
}

3、类的组成

3.1 实例变量

  • 全局变量:直接定义在类中,生命周期为整个类

  • 局部变量:在方法中定义的属性。生命周期为当前方法

  • 当局部变量和全局变量重名的时候,在方法中调用的会是局部变量作用域越小,优先级别越高

  • 全局变量会默认初始化,局部变量没有默认初始化,使用前必须先赋值

  • private – 私有化,只能在类中调用,其他类不允许调用也不能通过对象名直接调用

  • private修饰的属性为私有属性,只能通过set/get方法来调用

  • set – 对私有化属性进行赋值 – 有参数,没有返回值

  • get – 对私有化属性进行取值 – 没有参数,需要返回值

示例:

public class Person {
    //全局变量
    private String name;
    private int age;

    //局部变量
    public void setName(String name){
        //局部变量
        //int age = 0;
        //person1对象调用setName(),this则代表person1对象
        //当person2对象调用setName(),this则代表person2对象
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setAge(int age){
        this.age = age;
    }

    public int getAge(){
        return age;
    }

    public void test1(){
        System.out.println("test1");
        //调用当前对象的test2()
        this.test2();
    }

    public void test2(){
        System.out.println(name+"的test2方法");
    }

    public void test3(){
        //局部变量
        int age =1;
        //打印全局变量    --  默认初始化
        System.out.println(this.age);
        //打印局部变量    --  必须手动初始化才能使用
        System.out.println(age);
    }
}

定义一个Demo01,实例化对象,通过对象调用Person的set方法(赋值)、get(取值):

public class Demo01 {
    public static void main(String[] args) {
        //实例化对象
        Person person1 = new Person();
        person1.setName("张三");
        System.out.println(person1.getName());
        person1.test1();

        Person person2 = new Person();
        person2.setName("李四");
        System.out.println(person2.getName());
        person2.test2();
        person2.test3();
    }
}

定义Person.java类

package com.qf.ran.oop3;

/**
 * @author Ran
 * @since JDK 1.8
 */
public class Person {
    //全局变量
    private String name;
    private int age;

    //局部变量
    public void setName(String name){
        //局部变量
        //int age = 0;
        //person1对象调用setName(),this则代表person1对象
        //当person2对象调用setName(),this则代表person2对象
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setAge(int age){
        this.age = age;
    }

    public int getAge(){
        return age;
    }

    public void test1(){
        System.out.println("test1");
        //调用当前对象的test2()
        this.test2();
    }

    public void test2(){
        System.out.println(name+"的test2方法");
    }

    public void test3(){
        //局部变量
        int age =1;
        //打印全局变量    --  默认初始化
        System.out.println(this.age);
        //打印局部变量    --  必须手动初始化才能使用
        System.out.println(age);
    }
}

4、构造方法

4.1 概念

构造方法:类中的特殊方法,主要用于创建对象。

  • 名称与类名完全相同。
  • 没有返回值类型。
  • 创建对象时,触发构造方法的调用,不可通过句点手动调用。

4.2 创建

  • 无参构造方法(无参构造方法:默认存在)
    语法:
    访问修饰符 类名(){
    }
  • 有参构造方法:
    语法:
    访问修饰符 类名(参数类型1 参数名1,…){
    }
    示例:
package com.qf.ran.oop5;

/**
 * @author Ran
 * @since JDK 1.8
 */
public class User {
    private int id;
    private String name;
    //无参构造方法
    public User(){
        //在无参构造方法中调用有参构造方法
        this(1,"zs");
        //使用this调用构造方法只能在方法中的第一行
        //this(2);
        System.out.println("无参构造方法");
    }
    //有参构造方法
    public User(int id, String name){
        //在有参构造方法中调用无参构造方法
        //this();
        System.out.println("有参构造方法");
        this.id = id;
        this.name = name;
    }
    public User(int id){
        System.out.println("第二个有参构造方法");
    }
    //普通方法
    public void test(){
        //必须在构造方法中的第一行
        //this();
        System.out.println("普通方法");
    }
    public void setId(int id){
        this.id = id;
    }
    public int getId(){
        return id;
    }
    public void setName(String name){
        this.name = name;
    }
    public String getName(){
        return name;
    }
    public String toString(){
        return "User { id = "+id+",name = "+name+"}";
    }
}

注意:

  • 有参构造方法 = 无参构造方法 + 多个set()
    有参构造方法的使用必须在知道属性的前提要求下才可以

4.3 构造方法重载

构造方法也可重载,遵循重载规则。
创建对象时,根据传入参数,匹配对应的构造方法。

public class Demo01 {
    public static void main(String[] args) {
        //实例化对象 --  通过调用无参构造方法
        User user1 = new User();
        user1.setId(1);
        user1.setName("码云");
        System.out.println(user1.getId()+":"+user1.getName());
        
        //实例化对象 --  通过调用有参构造方法
        User user2 = new User(2,"麻花藤");
        System.out.println(user2.getId()+":"+user2.getName());
        //修改user2对象里的属性
        user2.setName("马宝国");
        System.out.println(user2.getId()+":"+user2.getName());
    }
}

4.4 默认构造方法

  • 在类中,如果没有显示定义构造方法,则编译器默认提供无参构造方法。
  • 如已手动添加有参构造方法,则无参构造方法不再默认提供,可根据需求自行添加。

4.5 构造方法为属性赋值

public static void main(String[] args){
    //有参构造方法    --  对2个属性进行赋值
    public  User(int id,String name){
        System.out.println("有参构造方法");
        this.id = id;
        this.name = name;
    }
}

5、this关键字

  • 使用this调用构造方法只能在方法中的第一行
  • this第一种用法:调用实例属性、实例方法。
    如:this.name、this.sayHi()。
  • this第二种用法:调用本类中的其他构造方法。
    如:this()、this(实参)。
  • this(实参):调用有参构造
  • this():调用无参构造

5.1 用法

代码示例:

public class User {
    private int id;
    private String name;

    //无参构造方法
    public User(){
        //在无参构造方法中调用有参构造方法
        this(1,"zs");
        //使用this调用构造方法只能在方法中的第一行
        //this(2);
        System.out.println("无参构造方法");
    }

    //有参构造方法
    public User(int id, String name){
        //在有参构造方法中调用无参构造方法
        //this();
        System.out.println("有参构造方法");
        this.id = id;
        this.name = name;
    }

    public User(int id){
        System.out.println("第二个有参构造方法");
    }

    //普通方法
    public void test(){
        //必须在构造方法中的第一行
        //this();
        System.out.println("普通方法");
    }



    public void setId(int id){
        this.id = id;
    }

    public int getId(){
        return id;
    }

    public void setName(String name){
        this.name = name;
    }

    public String getName(){
        return name;
    }


    public String toString(){
        return "User { id = "+id+",name = "+name+"}";
    }
}

end、今天就到此为止吧,明天依旧光芒万丈!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值