Java---面向对象

一、面向对象基本概念

1.面向对象与面向过程两种编程思维的区别

        面向过程:以步骤为单位,一步一步完成某个具体事情;

        面向对象:以对象为单位,通过调度组合不同的对象来完成某一个事情。

2.建立面向对象的思维方式

        (1)先整体,再局部

        (2)先抽象,再具体

        (3)能做什么,再做什么

        tips:Java是纯面向对象的语言

二、类与对象

1.基本定义

        类:分类、类别;类是一组具有相同特性(属性)与行为(方法)的事物集合。

        对象:特征,是一种个性的产物,对象包含在类里边。例如,女星属于一个类,Selena Gomez属于一个对象。

2.格式定义

在java中可以使用以下语句定义一个类:

class 类名称{
    属性名称;
    返回值类型 方法名称(){
    }
}

在Java中对象声明有两种含义

声明对象:Horse horse = null;
//表示声明了一个对象,但是此对象无法使用,horse没有具体的内存指向
实例化对象:horse = new Horse();
//表示实例化了对象,可以使用了

/*

new 关键字表示创建一个对象
new 关键字也表示实例化对象
new 关键字还表示申请内存空间

注意:如果使用未申请内存空间的对象,会报空指针异常:java.lang.NullPointerException

*/
//通过对象调用方法:
horse.eat();

horse = null;  //利用 null 把对象释放掉,这样后该对象就不存在了
//匿名对象调用方法:只使用一次,用完后,该对象就会被释放
new Horse().eat();

3.案例

public class Main {
    public static void main(String []args) {
        Horse h = null; /*声明一个类的变量(除了八种基本数据类型以外,都是引用数据类型,包括数组)*/

        //创建一个Horse类型的对象,实例对象
        h = new Horse();

        // 有了对象之后,就可以调用对象的属性和方法
        h.name = "小白马";
        h.age = 5;

        h.run(); //调用对象的方法,且方法会被执行
    }
}

// 自定义一个类(类型)
class Horse{
    // 在类中定义属性(特征)
    String name;
    int age;

    //在类中定义方法
    public void run(){
        System.out.println("我是"+ name +",我"+ age +"岁了,"+"日行千里不在话下");
    }
}

 

三、类与对象的内存分析

1.对象内存分析 

 栈内存存的某个对象所指向的地址,堆内存存的是数据(实际上是数据所指向的内存地址,但这里可以抽象的理解成就是存放的数据)。

 

 horse1与house2指向了同一个对象的话,其中一个修改内容,另一个也会相应的发生改变。例如这里horse1与house2的name最终都变成了“小黑”。

tips:对象之间,必须是相同类型才能赋值。

如果  horse1与house2最开始都分别指向不同的内存空间,之后又让house2指向 horse1的内存空间,那么之前house2所指向的内容就变成了垃圾,没有得到释放。

四、面向对象的封装性

1.封装性的概念

        封装性是面向对象思想的三大特征之一:封装性、继承性、多态性

        封装性就是隐藏实现细节,仅对外提供访问接口。

        封装有:属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装...

2.封装的好处

  • 模块化
  • 信息隐蔽
  • 代码重用
  • 插件化易于调试
  • 具有安全性

tips:缺点是会影响执行效率

3.封装前后对比

封装之前:未封装时,外部可以随意修改对象属性,不安全

class person{
    String name;
    int age;
}

封装之后:对属性而言,加上private权限后,就表示封装了,外部无法直接修改本类的属性。想要访问只能通过public权限的方法去间接获取,如例子的 setName() 和 getName()方法。

class person{

// 属性是成员变量
    private String name;
    private int age;

// 参数及方法内定义的变量是局部变量
    // 对外提供一个为name属性设值的方法
    public void setName(String name){
            this.name;}   // this 指的是当前对象的name
    // 对外提供一个获取name属性的方法
    public String getName(){
            return name;}
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值