类与对象基础学习总结

面向对象编辑——类与对象基础学习总结

面向对象介绍

类与对象的定义与使用

面向对象介绍

1.面试对象三大特征:(重要)

(1)封装性:所谓封装,是指类将自己的数据和方法只给信任的类或者对象操作,对不可信的信息隐藏。简而言之,就是内部操作对外部而言不可见,体现了保护性。(就好比你有一张信用卡,去银行取款只有知道你银行卡密码才能取走钱,其余人均不可以)

(2)继承性:继承是指可以直接使用现有项,并能对其功能进行扩展,体现了可重用性。

(3)多态性:多态是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。

2.面向对象缩写及名词扩展
OO(面向对象)
OOA(面向对象分析)
OOD(面向对象设计)
OOP(面向对象编程)

3.面向对象特点

面向对象最大的特点就是可以进行现实生活的抽象。

类与对象的定义与使用

1.类、对象的基本概念

类:是指共性的概念。(比如人类)

对象:指类中一个具体的、可以使用的事物。(比如你的同学张三,他是人类中的一个具体的人)

类与对象的关系:

首先产生类,然后生成对象。对象的所有行为,一定是在类中做了完整的定义。(例如你在路边见到一只狗狗对你汪汪叫,而一只猫只会对你喵喵叫,这是因为狗类中定义了汪汪叫,猫类中没有定义)

对象与对象的区别:

对象与对象的区别在类中定义的具体的属性值不同。(例如狗分为好多种类型)

类中的组成:

(1)方法(操作的行为)

(2)属性(变量,描述每个对象的具体特点)

2.定义与使用

类的定义:

class Person{
    //属性
    public String name;
    public int age;

    //方法
    public Person(){//构造方法,下文会详细讲解
        System.out.println("************************");
    }

    public String getName(){//getter方法,下文详细讲解
        return name;
    }

    public int getAge(){
        return age;
    }
}
public class Test{
    public static void main(String[] args){
        Person per=new Person();//根据Person类生成一个Person对象,此对象名称为per
        per.name="张三";//对象实例化
        per.age=18;//对象实例化
        System.out.println(per.name);
        System.out.println(per.age);
    }
}

注意:这就是一个类完整的定义(粗略的可以划分为属性和方法两大类),此时的类必须由对象调用,不再通过主类直接调用。

对象的定义

(1)类名称 (2)对象名称=(3)new (4)类名称();
//Person per=new Person();1)类名称指的是任何对象都有其对应的类,类是对象的蓝图;
(2)对象名称是此对象唯一的一个标记,引用一块堆内存;
(3new表示在堆内存中开辟了新的空间;
(4)类名称()表示构造方法。

内存分配

那么类、对象定义后内存是怎么分配的呢?

我们来看一个简单的例子:

class Person{
    public String name;
    public int age;
}
public class Test{
    public static void main(String[] args){
        Person per=new Person();
        per.name="张三";
        per.age=18;
        System.out.println(per.name);
        System.out.println(per.age);
    }
}

注意:对象(引用数据类型)必须在实例化之后调用,否则会NullpointerException(运行时错误),编译时不会出现。

引用内存分配

那么如果类与类之间发生了引用传递内存又会如何分配呢?

先来看一个一般的代码:

class Person{
    private String name;//私有属性,开发中几乎属性均用private修饰,下文会详细介绍
    private int age;

    public Person(String name,int age){
        this.name=name;//this关键字此时调用本类属性
        this.age=age;
    }
    
    public void getPersonInfo(){//输出
        System.out.println(this.name+"今年"+this.age);
    }
}
public class Test{
    public static void main(String[] args){
        Person per1=new Person("张三",18);//名称为per1的对象
        Person per2=new Person("小花",22);//名称为per2的对象
        per1.getPersonInfo();//调用普通方法
        per2.getPersonInfo();
    }
}

内存分配:

注意:类属性开辟空间和调用构造方法几乎同时完成,故构造方法在生成对象时调用,构造方法用于本类私有属性的初始化(相等于setter方法,好处是能减少使用setter方法使用方法)

输出结果:

进行引用传递后的代码:

class Person{
    private String name;
    private int age;

    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String getName(){
        return name;
    }

    public int getAge(){
        return age;
    }
    
    public void getPersonInfo(){
        System.out.println(this.name+"今年"+this.age);
    }
}
public class Test{
    public static void main(String[] args){
        Person per1=new Person("张三",18);
        Person per2=new Person("小花",22);
        per1=per2;//引用传递
        per1.getPersonInfo();
        per2.getPersonInfo();
    }
}

内存分析:

输出结果:

由上面程序输出结果可以看出,引用传递使per1指向per2所指空间,故per1原所指空间便没有**任何栈空间指向,这种堆空间称为垃圾空间。**但JAVA中垃圾空间会不定期自动回收,但为了避免程序性能下降,建议不要产生无用空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值