黑马程序员——Java要点笔记——面向对象(一)

本文介绍了面向对象编程的基本概念,包括类与对象的关系、成员变量与局部变量的区别、封装原则等内容,并通过具体示例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

day06 01-面向对象-概述

1、特点:

       (1)面向对象就是一种常见的思考习惯,符合人们的思考习惯。

       (2)面向对象的出现,将复杂问题简单化。

       (3)面向对象的出现,让曾经在过程中的执行者,变成了对象中的指挥者。

day06 03-面向对象-举例2

1、如果面试时,能因时因地因场景的说出来,证明你理解一个问题已经比较深化了。举例时,最好举生活中常见的。

day06 04-面向对象-类与对象之间的关系

1、类:用java语言对现实生活中的事物的描述。通过类的形式来体现。

2、怎么描述呢?

       对于事物描述通常只关注两方面:①属性②行为(动作,功能)

1、生活中的汽车在大马路上跑,用计算机语言产生的汽车在内存上跑。

2、对象是该类实实在在存在的个体。对象是java中实实在在开辟的内存。

3、类与对象之间的关系:类是事物的描述;对象是该类事物的实例。

6、注意以下示例:

<pre name="code" class="java">class A{
    String name="A";
    void talk(){
       System.out.println(name);
    }
}
class B{
    A a=new A();
    a.talk();//你这么写,编译会报错。
}

 

编译报错:

Exception in thread"main" java.lang.Error: Unresolved compilation problem:

    atJavaTest.TestDemo03.main(TestDemo03.java:8)

这么写不会:

class A{
    String name="A";
    void talk(){
       System.out.println(name);
    }
}
class B{
    A a=new A();
    void mathod(){
       a.talk();
    }
}

day06 06-面向对象-类与对象的体现-细节

1、定义类,其实就是定义类中的成员。类中的成员就两种:

       一、成员变量(属性)

       二、成员方法(行为)

day06 07-面向对象-对象的内存体现

1、Car c=new Car();


2、局部变量

3、以下代码在内存中会产生垃圾吗?

       Car c1=new Car();
       Car c2=c1;
       c1.num=8;
       c2.color="red";
       c1.run();
       c1=null;

    答:不会有,因为即使c1无堆内存指向,但c2还在指向该内存。

4、只有当一块堆内存真真正正无任何栈内存指向时,他才能称为垃圾。

day06 08-面向对象-成员变量和局部变量的区别

1、成员变量和局部变量的区别

(1)定义的位置不同

       成员变量直接定义在类中,整个类中都可以访问。

       局部变量定义在函数、语句、局部代码块中,只在所属的区域有效。

(2)存放的位置不同

       成员变量存在于堆内存的对象中。

       局部变量存在于栈内存的方法中。

(3)存活的时间不同

       成员变量随着对象的创建而存在,随着对象的消失而消失。

       局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。

(4)

       成员变量有默认初始化值。

       局部变量无默认初始化值,不手动初始化,不能用。

day06 09-面向对象-成员变量和局部变量的同名&显示初始化

1、以下代码运行结果是什么?

public class TestDemo04 {
    public static void main(String[] args) {
       Car c=new Car();
       c.num=4;
       c.run();
    }
}
class Car{
    int num;
    String clor;
    void run(){
       int num=10;
       System.out.println(num);
    }
}

运行结果:10

2、以下代码运行结果是什么?

public class TestDemo04 {
    public static void main(String[] args) {
       int num=666;
       System.out.println(num);
       Car c=new Car();
       System.out.println(c.num);
       c.num=4;
       c.run();
       System.out.println(c.num);
    }
}
class Car{
    int num;
    String clor;
    void run(){
       num=10;
       System.out.println(num);
    }
}

运行结果:666  0   10   10

3、在自己的栈里面找没找着,去堆里找去。自己所属的内存区域有东西,还用去其他地方找吗?

day06 10-面向对象-类类型参数

1、汽车改装厂代码示例:

       public static void show(Car c){
       c.num=4;
       c.color="red";
       System.out.println(c.num+"……"+c.color);
    }

       这里参数列表中的Car c就是接受Car类型参数。这是一种类类型参数。

2、引用数据类型:数组、类、接口。

       注意:类与接口是一种数据类型!

day06 11-面向对象-匿名对象

1、匿名对象:没有名字的对象,无栈内存来指向的对象。是对象定义的一种简写格式。

       new Car();

2、①当对象对方法仅进行一次调用的时候,就可以简化为匿名对象。

       看new,只要出现new,证明要开辟新的对内存空间,就是新对象。

3、为何此处要说对方法,而不是说对成员变量?


运行结果:0...null

       在调用下一个匿名对象语句前,上一个匿名对象就已经变成垃圾了。你用匿名对象改了一个成员变量内容。还没等用,他就已经是垃圾了。这毫无意义。

4、②匿名对象可以作为实际参数进行传递。

       此时这个匿名对象变垃圾吗?

       不变,因为c在栈内存中接收了它。相当于Car c=newCar();

       show方法弹栈后他才变垃圾。

day06 12-面向对象-基本数据类型参数传递图解

1、以下代码的结果是什么:

public static void main(String[] args) {
       int x=3;
       show(x);
       System.out.println("x="+x);
    }
    public static void show(int x){
       x=4;
    }


此x非彼x。show方法中的x,始终是他参数列表的x,这个参数x是show方法中的局部变量。

show方法中隐藏了一个return,一遇到return,函数结束,弹栈,彻底离开栈内存。


运行结果x=3。打印完之后main方法弹栈。

1、始终记得,函数的参数列表中的参数,是本方法所在栈内存区域中的局部变量。

day06 13-面向对象-引用数据类型参数传递图解

1、以下代码的运行结果是什么?

public class Demo {
    int x=3;
    public static void main(String[] args) {
       Demo d=new Demo();
       d.x=9;
       show(d);
       System.out.println(d.x);
    }
    public static void show(Demo d){
       d.x=4;
    }
}

2、

       show(d);这一句其实相当于Demo d=d;是把主方法中new的d这个对象的堆内存指向,给了show方法栈内存的参数(局部变量)Demod。

       运行结果:4

2、局部变量,有自己的栈所属,与堆内存无关。成员变量有自己的堆所属,任何一个指向他的栈内存都可以修改里面的数。多个栈内存指向操作的是同一个堆内存成员变量。

day06 14-面向对象-封装-代码示例

1、封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。

2、private(私有)关键字。私有的东西,仅可以在本类中有效,只可以在本类中被调用。

3、封装原则:

(1)将不需要对外提供的内容都隐藏起来。

(2)把属性都隐藏起来,提供公共方法对其访问。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值