面向对象

面向对象

oop

面向对象的本质就是,以类的方式组织代码,以对象的组织(封装)数据。

抽象

三大特征:封装,继承,多态

值传递与引用传递

package oop;
//值传递
public class Demo1 {
    public static void main(String[] args) {
        int add = add(1, 2);
        System.out.println(add);
        int a = 1;
        System.out.println(a);
        change(a);
        System.out.println(a);//值传递,传过去的参数是形参,
        // 作用域为该方法,而main中的a作用域为main方法中,所以局部改变不影响,地址上来说就是main方法中有int a
        //而调用change()方法传入的a只是将值传递过去,并没有传入地址,而再change()方法里有int a进行接收,故
        //再change()方法里的参数再如何改变不影响main中的参数

    }
    public static int add(int a,int b){
        b = a+b;
        return a+b;
    }
    public static void change(int a){
        a = 10;
        int b = 10;
        System.out.println(b + "========");
        add(a,b);
        System.out.println(b + "bubian");
        System.out.println(a + "hhhhhh");
    }
}

package oop;

public class Student {
    String name;
    int age;

    public void say(){
        System.out.println(name + "说话了! 年龄:\t" + age);
    }
}

package oop;
//引用传递
public class Demo2 {
    public static void main(String[] args) {
        Demo2 demo2 = new Demo2();
        Student student = new Student();
        demo2.change(student.name,student.age);//值传递,student中的name和age并没有改变
        System.out.println(student.name + student.age);
        demo2.change1(student);//引用传递,传入的是student对象,对其属性更改,原实例对象也会更改
        System.out.println(student.name + student.age);//就像c中的地址传参类似,改变的是student地址中的值,传过去的是地址
    }
    public void change(String name,int age){
        System.out.println(name + "====" + age);
        name = "zhang";
        age = 10;
    }
    public void change1(Student student){
        System.out.println(student.name + "====" + student.age);
        student.age = 10;
        student.name = "sang";

    }
}
//另,若传入数组也会改变,因为数组传过去的也是地址,更改的是地址内的值

创建与初始化对象

构造器

和类名相同

没有返回值

new本质是再调用构造方法

初始化对象的值

定义有参构造之后显示定义一个无参构造

Alt + Insert idea快捷键

this.【类属性】 = 传过来的参数

package oop;

public class Demo3 {
    public static void main(String[] args) {
        Pet cat = new Pet();
        cat.name = "猫";
        cat.shout();
        Pet dog = new Pet();
        dog.name = "狗";
        dog.shout();
    }
}

类是一个模板,对象是一个具体的实例

属性:默认初始化,数字:0 0 0.0 char u0000 boolean false 引用 null

posted @   小国哥哥  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示