面向对象

面向对象的编程:

声明定义类 抽象的过程
class 类名{
//成员变量 对象的特征
//成员方法
//构造方法 方法名 没有返回值类型
//如果没有显示声明构造方法 会默认生成无参构造
//如果显示声明则不会再有默认生成的
//方法可以重载 在同一人类中方法名相同,参数列表不同 参数类型或者个数不一样
}

拷贝构造 深拷贝与浅拷贝
实例化对象: new 类名(实参列表);//其实是调用了构造方法
必须通过引用变量才能访问对象
引用变量栈区 对象是在堆区 不能直接访问堆区的内容
只能通过引用变量操作对象

数据类型 引用变量 = new 对象;
new :(1)分配内存 (2)调用构造方法初始化

JVM对java程序的内存进行逻辑划分:栈区 堆区 方法区
栈区: 局部变量 方法调用时的开销
堆区: new的对象
方法区: 方法 类的信息 静态属性

局部变量 和 成员变量的区别:
1.声明位置 局部变量在方法区中
成员变量在类中方法外
2.初始化 局部变量不会自动初始化
成员变量会自动初始化 0 0.0 \u0000 false null
3.生命周期 局部变量方法调用到方法调用结束
成员变量从对象实例化开始到对象消亡

JVM的内存回收机制 Garbage Collection:
堆内存 JVM 有一个线程来回收java的内存
当一个对象没有引用变量再引用这个对象时,该对象已经无法再使用了,说明该对象的内存可以被回收,JVM有一个单独的线程会扫描堆中的对象,如果没有引用变量引用该对象时会自动回收该对象的内存

java程序也有内存泄漏的问题:
一个对象已经没有用了,但一直有引用变量引用该对象,这个时候就造成了内存泄漏,所以要及时对不再使用的对象的引用变量置null

System.gc()  强制让内存回收线程及时回收内存

static 修饰成员变量 表示该变量为 类属性 静态属性
静态属性 属于该类 该类所有的对象共享 存储在方法区
静态属性 可以直接通过 类名.静态属性名 的方式进行访问
也可以用 对象.静态属性名 的方式进行访问
static 修饰方法 表示该方法为 类方法 静态方法
静态方法属于类 没有 this引用变量
静态方法里 不能直接访问 成员属性 和 直接调用成员方法
只能访问静态属性 和 调用静态方法

static修饰语句块: 在类加载时被执行 而且只会执行一次
普通语句块: 在实例化对象时被执行 每实例化一个对象就执行一次
先于构造方法先执行

final:
1.修饰局部变量 必须初始化 初始化之后值不能再被修改
2.修饰成员变量 必须直接、语句块、构造方法中初始化 而且只能在其中之一
3.final和static一同修饰的变量称为常量
只能在静态语句块 或者 直接初始化
4.修饰方法 表示该方法不能被重写
5.修饰类 表示该类不能被继承

this
package
import
public
protected
default
private


继承:
为了提高代码的复用率
为了提高代码的开发效率
属于的关系 子类是父类中的一个子集 子类本应该拥有父类所有的属性和方法

JAVA中一个类可以继承另外一个类,那么该类就称为子类(son class) 或者 派生类
	被继承的类称为父类(father class) 或者 基类
	子类拥有父类的属性和方法
	泛化的过程

写了一个类:方法  属性

extends 关键字
//A是子类 B是父类  A类拥有B类的属性和方法
class A extends B{

}
java语法规定:一个类只有继承一个类(一个儿子只能有一个新爹)
		一个类可以被很多个类同时继承(一个爹可以有很多个儿子)
	一个父类也是继承另外一个类

子类除了拥有父类的属性和方法以外  还可以自己定义声明属性和方法

子类的构造方法:
子类的构造方法中会隐式调用父类的无参构造方法 即 super()
第一行代码: super();
所以父类中如果没有无参构造方法,那么子类的构造方法将报错
这个时候就必须在子类中显示地调用父类中的构造方法
super(实参列表);

构造一个子类对象时 执行顺序
必须构造父类对象 然后再构造子类
构造父类对象时 先执行语句块 然后再执行构造方法

在子类的构造方法中:
this(参数) 来调用类中的其它构造方法
super(参数) 来调用父类中的构造方法
	只能放在构造方法中的第一行
	this() 和  super()  只能二选一

子类的对象 可以 用 父类的引用变量 来引用

父类类型 引用变量 = new 子类类型对象;
子类类型对象就隐式转换成了父类类型的对象
通过这个引用变量 只能 访问 父类中有的属性和方法

如果某个对象确实是子类对象 而被 父类引用变量 引用时 可以强制转换成子类类型

Father f = new Son();//隐式转换  通过f只能访问父类中的属性和方法
Son s = (Son)f; //强制类型转换
如果f引用的对象类型和强制转换的类型不一致就会造成 ClassCastException

重载(Overload)
重写(Override) OverWrite
子类重写父类中的方法 要求方法签名相同
方法签名: 方法名 参数列表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值