葵花宝典 七 面向对象

本文详细介绍了面向对象编程的基础概念,包括封装、继承、多态等核心特性。解释了类与对象的关系,成员变量与局部变量的区别,以及静态变量与成员变量的不同之处。此外还探讨了构造代码块的作用和用法。

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

21、写clone()方法时,通常都有一行代码,是什么?

clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员。

面向对象的特征有哪些方面?
封装:
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界的调用,从而提高了系统的可扩展性,可维护性。
封装的要点:
类的属性的处理:
1.一般使用private
2.提供相应的get、set方法来访问相关的属性。这些方法通常是public,从而实现对属性的读写操作。
一些只用于本类的辅助性方法可以用private
希望其他类调用的方法用public

垃圾回收机制

对象空间的分配:使用new关键字创建对象即可。
对象空间的释放:将对象赋值null即可。垃圾回收器负责回收所有“不可达”对象的内存空间

要点:程序员无权调用垃圾回收器。
程序员可以通过system.gc()。通知gc运行,但是java的规范并不能保证立刻运行finalize()方法,是java提供给程序员用来释放对象或资源的方法,但尽量少用。

//构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。
public class CodeBlock02
{
{
System.out.println(“第一代码块”);

}

public CodeBlock02(){
System.out.println(“构造方法”);
}

    {
      System.out.println("第二构造块");
    }

面向对象的思想概述:

概念:面向对象是基于对象的编程思想,强调的是对象(实体),
面向对象思想的特点:
是一种更加符合我们思想习惯的的思想
可以把复杂的事情简单化
使我们从执行者变成了指挥者,角色发生了转变。

我们在面向对象的开发中,就是不断的创建对象,使用对象,指挥对象做事情,面向对象的设计过程,其实就是管理和维护对象之间的关系。
面向对象的思维方法。
首先确定谁来做,其次确定怎么做。
首先考虑的是整体,其次考虑局部。
首先考虑是抽象,其次考虑是具体。

面向对象的三大特征:
封装继承多态

类与对象

1.什么是类,什么是对象
类是一组相关的属性和行为的集合,是构造对象的模板和蓝图,是一个抽象的概念,
对象是类的具体实例化,是该类事物的具体表现形式。是一个具体存在的个体。

类和对象的关系
对事物的描述包括两个方面:一个是属性,一个是行为。只要明确该事物的属性和并定义在类中即可。
对象其实就是该类事物实实在在的个体。
类和对象的关系可以理解成:类——对一类事物的描述
对象:—–该类事物的具体实例化
成员变量和局部变量的区别:
成员变量定义在类中,整个类可以访问,局部变量定义在函数中,语句局部代码块中
成员变量存在于堆内存的对象中,局部变量存在于栈内存的方法中。
成员变量随着对象的创建而存在,随着对象的消失而消失,局部变量随着所属区域的执行而存在,随着所属区域的结束而释放。
成员变量都有默认的初始化值;局部变量没有初始化值,必须先定义 赋值才能使用。
事物:
属性 事物的信息描述
行为 事物的功能

类:
    成员变量    事物的属性
    成员方法    事物的行为

匿名对象

概念:一个定义在另一个类内部的类
当一个对象方法仅仅进行一次调用的时候,就可以简化匿名对象
匿名对象可以做为实际参数进行传递

封装:

封装是指隐藏对象的属性和细节,但对外提供公共的访问方式。

封装的好处:
隐藏实现细节,提供公共的访问方式;将变化隔离;便于使用;提高代码的复用性;提高安全性

3.封装的原则
a.将不需要对外提供的内容都隐藏起来。
b.把属性都隐藏,提供公共方法对其调用
private关键字
私有,是一种权限修饰符,用于修饰成员。被private修饰的成员只有在本类中才能访问。
私有仅仅是封装的一种体现而已

private常见的应用:将成员变量私有化,对外提供set和get方法对其进行访问,提高数据访问的安全性

构造代码块

作用:给对象进行初始化,对象一旦建立就运行,而且优于构造函数运行
和构造函数的区别
构造代码块是给对象进行初始化,构造函数是给指定的对象进行初始化。构造代码块中定义的是不同对象的共性内容。

类的初始化过程

1.加载class文件进内存
2.为栈内存变量开辟空间
3.为堆内存开辟空间
4.对对象的成员成员变量进行默认初始化
5.对对象的成员变量进行显示初始化
6.通过构造方法对对象成员变量进行赋值
7.对象地址赋值给栈变量

static 的特点:
1.static是一个修饰符,用于修饰成员
2.static修饰的成员被所有的对象所共享
3.static优于对象而存在,因为static的成员随着类的加载就已经存在了
4.static修饰的成员多了一种调用方式,就是可以直接被类名所调用
5.static修饰的数据是共享数据,对象中存在的是特有数据

static关键字注意事项:
在静态方法中不能使用this或者super关键字
静态方法只能访问静态的成员变量和成员方法
非静态的既可以访问静态的也可以访问非静态的

成员变量和静态变量的区别
1.两个变量的声明周期不同
成员变量随着对象的创建而存在,随着对象的回收而释放
静态变量随着类的加载而存在,随着类的消失而消失。

2.两种变量的调用方式不同
成员变量只能被对象所调用
静态变量可以被对象调用,也可以被类名调用

3.成员变量也称为实例变量,静态变量也称为类变量
4.成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据,静态变量数据存储在方法区,所以也叫对象的共享数据

主函数解析
1.主函数的特殊之处:格式是固定,被jvm所识别和调用。
public static void main(String[] args)

静态何时使用?
①静态变量
a.当分析对象中所具备的成员变量的值固定的,这时这个成员就可以使用静态修饰。
b.只要数据在对象中都是不同的,就是对象的特有数据,必须存储在对象中,是非静态的
c.如果是相同的数据,对象不需要做修改,只需要使用即可,不需要存储在对象中,定义成静态的。
②静态方法
a.函数是否用静态修饰,就参考一点,就是该函数的功能是否访问到对象中的特有数据
b.简单的说,从源代码看,该功能是否需要访问到非静态的成员变量,如果需要,该功能就是非静态的,如果不需要可以定义成静态的
c.但是,非静态需要被对象所调用,

java面向对象
1.java内存空间
1.栈
特点:有序的内存空间(先进后出的原则)
创建的方式:由程序平台自行创建
个数问题:java程序执行过程中有很多个栈,往往为一个代码段(各种大括号)创建一个栈空间
周期问题:若对应的代码段被执行完毕,则栈空间将马上回收

2.堆
特点:一种无序的内存空间
创建方式:可以有程序员自己创建或申请
用途:用于存放一些较为复杂的数据信息
个数问题:java程序的执行过程中只有一个堆内存
周期问题:从java虚拟机开始,一直到java虚拟机结束

jvm内存结构全景图
堆:全局共享的无序存储空间(从jvm启动开始创建到jvm结束销毁)

栈:有序的存储空间(方法加载执行被创建分配,直到方法执行完毕栈被释放)

方法去:将所有的类中的方法都存储起来,为执行提供代码信息

抽象类和接口

1.什么是接口:一个允许有抽象定义存在的类,可以像普通类一样有属性.成员方法、构造函数
2.怎样定义抽象类:访问修饰符 abstract class 类名{}
抽象方法:只有方法的声明,没有方法体。
访问修饰符 abstract 返回类型 方法名(参数列表);
3.抽象类构造对象:抽象类不能通过new关键字直接实例化对象,抽象类可以作为父类被子类继承,子类必须实现父类中的抽象方法

抽象类的构造方法能否定义为私有?
不能,若定义为私有,则子类无法访问父类的构造方法

抽象类能否被实例化?
不能直接使用new实例化,但是可以通过子类间接实例化

抽象类的构造方法能够定义为abstract?
不能,因为构造方法不能被子类重写

接口:
1.什么是接口:比抽象更加的抽象,更加的纯粹
2.定义接口的方法:public interface 接口名{}
声明接口方法:不需要使用abstract关键字,只能定义抽象方法的声明,默认是public
3.实现接口:类 implements 接口名 子类必须实现接口中定义的所有抽象方法
4.接口的意义:规范子类的行为,可以为定义标准提供编程支持。

final关键字
修饰类:表示这个类不能被继承
修饰方法:表示这个方法不能被子类所重写
修饰参数:表示在方法体的执行过程中,参数值不能发生变化
注:接口中定义的属性必须是静态常量(static final修饰)定义可以省略static. final关键字

接口中是否有构造方法?
没有构造方法

接口与抽象类的关系
1.可以使用接口来定义一组API的功能
2.可以使用抽象类将多个接口的要求整合在一起

(2) final意思是最终,指不可再发生变化.

可修饰的成员:

 修饰类:访问修饰符 finalclass 类名{…} 表示该类不能被继承,但final 不能修饰抽象类和接口.

 修饰属性:访问修饰符 final 类型 属性名=… 表示该属性值不能被修改,在定义时必须给定其初始值.

 修饰方法:访问修饰符final返回类型 方法名(参数列表) 表示该方法在继承过程中不能被重写,不能修饰抽象方法。

 修饰方法参数:访问修饰符 final 返回类型 方法名(final 数据类型 arg,final 数据类型 arg).

 修饰方法变量:在定义变量时加final,则该变量在方法执行的过程中,不可修改值(相当于常量).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值