Java面向对象(七)包、内部类、垃圾回收机制

一、包

package 包名;  ---- 声明包    注意: 一个java文件中只能有一句package语句 ,  并且必须放在java文件首行 。 

import 包名; --- 导包

import  java.util.*;    *是一个通配符,会匹配当前包下所有的类,但不会包括子包下的类

java.lang --- 核心类库,一个java程序运行之前会先自动把这个包下所有的类加载到方法区。 不需要手动 导入。 (同包类也 不需要手动导入)

java.util --- 工具包

java.io --- 用于传输数据

java.nio --- 用于处理高并发

java.net ---- 用于网络通信

javax ---- java 扩展包

java.sql --- 数据库交互

org.* ---- 由第三方厂商和一些开源社区提供的包 。

注意: 在自定义包名时 , 不能以java 、 javax 、 org开头 , 否则jvm会去java原生类中寻找你自定义的类 , 这样是永远也找不到的 。 

二、内部类

内部类是封装的第三种形式(1. 函数、2. 属性的私有化)

1. 方法内部类

定义在方法内的类。

方法内部类中不能定义静态 变量和方法,但允许定义静态常量。

方法内部类不能使用方法的变量,但能使用方法的常量。

方法内部类可以使用外部类的属性和方法。

方法内部类可以继承其他类

方法内部类调用外部类的方法 : Outer.this.m() ;

除了当前方法外 , 其他地方都不能使用这个方法内部类 。 

内部类会比外部类先加载 。 

2. 成员内部类

定义在类内方法外

利用外部类对象创建内部类对象

Outer.Inner   in = new outer().new Inner();

不能定义静态方法和变量。 但可以定义静态常量 。  

可以是用外部类的方法和属性

具有成员属性的特性: 可以被权限修饰符修饰 。 

3.静态内部类

用static修饰的成员内部类

Outer.Inner in = new Outer.Inner();

可以定义静态属性和方法。

和普通类 基本没有差别

4. 匿名内部类

匿名内部类本质上就是继承了这个类/实现了这个接口

Class c/*匿名内部类创建的对象*/ = new Class(){

code;//匿名内部类的实体 。

};

有构造函数,单数不能手动定义。

定义在方法内时需要注意的与方法内部类一样

定义在方法外时,需要注意的与成员内部类一样。

匿名内类中 必须要重写 接口\类中的抽象方法 。 

只要一个类可以被继承 , 就可以出现匿名内部类的形式。 

构造函数可以私有化 。  只是在类外不能被继承 , 在类内可以被内部类继承 。 

5. 内部接口

定义在类中或接口中的接口默认是静态的。 理解: 在类定义时不能创建对象 ,要求内部接口要能被直接访问 , 所以要求内部接口是静态的 。

接口中可以定义 类,并且默认是静态,因为接口不能创建对象。 理解: 接口不能创建对象,  所以要求内部类能直接被访问 。 

三、垃圾回收机制

1. 对象存储在堆内存中 , 垃圾回收针对堆内存而言。

当调用构造方法的时候,创建对象,存在堆内存中,因为java中对每种数据类型都明确的给定了大小,所以在创建对象的时候会自动计算大小分配内存(具体的数据都是由基本数据类型组成的)。所以在内存的回收和释放的时候也是由java自己管理。

对象在堆内存中存储 , 在使用完成后不会被立即回收 ,而是在 不定时的某个时刻被垃圾回收机制(Grabage collector ---gc)回收   , 回收过程程序员不能手动控制。 

2. 一个对象刚创建时是放在新生代的伊甸园区,如果这个对象在栈内存中没有引用,那么会在扫描的时候被解析,释放内存;如果经过一次扫描依然没有释放内存,会将移入新生代的幸存区,幸存区的扫描平率略低于伊甸园区;如果幸存区经过多次扫描依然没有被释放,会被放入老生代,老生代的扫描的频率远低于新生代。老生代的对象一旦被回收,可能导致程序的卡顿或崩溃。

3. 在原生的java中新生代要大于老生代  , 但是在实际开发中为了提高效率 ,  往往会增大老生代 , 达到降低扫描频率的目的 。 

4. 垃圾回收的线程优先级是相当相当低的 。 

minor GC(Garbage Collage) 发生在新生代的回收 ---初代回收  

full GC 发生在老生带的回收 ---完全回收

5. 在JDK1.6及以前 ,  java只把内存分为四块 : 栈 、 堆 、 本地方法栈 、 寄存器 。 而堆中又可以分为:新生代 、 老生代 、 永久带  ,JDK1.6之后 把堆中的永久带独立出来 形成方法区。  现在的内存分块: 栈 、 堆 、 方法区 、 本地方法栈 、 寄存器  。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值