目录
内部类
成员内部类: 类中方法外
方法内部类: 方法中
静态内部类: static修饰的成员内部类
匿名内部类: 创建内部类,不起名,
成员内部类
位置: 类中方法外
//定义外部类
class Outer{
//成员内部类
class Inner{}
}
注意:
1、成员内部类可以被所有权限修饰符修饰
2、成员内部类可以被final\abstract修饰
3、成员内部类中可以定义成员属性、成员方法、构造代码块 构造方法,但是注意不能包含静态相关的内容
4、成员内部类可以被外部类使用,例如作为属性的数据类型 在外部类的普通方法中创建内部类的对象
5、内部类可以调用外部类的属性和方法
6、如果需要在其他类中创建内部类的对象,格式如下:
外部类.内部类 变量名 = new 外部类().new 内部类();
例如:
Outer.Inner inner = new Outer().new Inner();
inner.innerMethod();
7、通常如果在其他类中不允许访问内部类,则可以将内部类通过private进行修饰
方法内部类
位置: 方法中
例如:
public void Method(){
class Inner{
}
}
注意:
注意:
1、方法内部类只能被默认权限修饰符修饰
2、方法内部类可以被final\abstract修饰
3、方法内部类中可以定义成员属性、成员方法、构造代码块 构造方法,但是注意不能包含静态相关的内容
4、方法内部类的使用必须在内部类定义之后,且只能方法内部使用
5、方法内部类可以使用当前方法的局部变量,可以调用其他方法
静态内部类
位置:
类中方法外
例如:
class Outer1{
//定义静态内部类
static class Inner{
}
}
注意:
1、静态内部类可以被所有权限修饰符修饰
2、静态内部类可以被final\abstract修饰
3、静态内部类中可以定义成员属性、成员方法、构造代码块 构造方法,包含静态相关的内容
4、静态内部类可以被外部类使用,例如作为属性的数据类型 在外部类的普通方法中创建静态内部类的对象
5、静态内部类可以调用外部类的静态属性和静态方法
6、如果需要在其他类中创建静态内部类的对象,格式如下:
外部类.内部类 变量名 = new 外部类.内部类();
例如:
Outer1.Inner inner = new Outer1.Inner();
inner.innerMethod();
7、通常如果在其他类中不允许访问内部类,则可以将内部类通过private进行修饰
匿名内部类
创建内部类没有名字
格式一:
new 抽象类类名(){
抽象方法的实现
}
创建抽象类的子类的对象
格式二:
new 接口名(){
接口中抽象方法的实现
}
创建接口的实现类的对象
格式三:
new 类名(){
重写类中的方法
}
创建类的子类的对象
改造类中的方法实现
注意:
只能使用一次
场景:
如果某个类只是为了传参而使用一次,建议使用匿名内部类
API
API:
手册
JDK1.6中文
JDK8-官网 英文
百度版
谷歌版
使用:
索引位置进行类名的搜索
类的介绍页面:
类所属包的介绍
类定义的代码
类的介绍
属性的介绍
构造方法
普通方法
包
概念:
本质上就是目录 管理java文件
包的命名:
单级包:
包名小写
cn
多级包
每一级之间通过.分隔
用所在公司的域名倒写形式
www.tedu.cn cn.tedu
www.badiu.com com.baidu
包的划分:
角色划分
user
cn.tedu.user
product
order
操作划分:
增删改查
cn.tedu.add
cn.tedu.delete
架构:
cn.tedu.web
cn.tedu.service
cn.tedu.dao
注意:
1、类通常要放在指定的包中,但是也可以直接放在src目录,不属于任何一个包
2、package关键字 表示包
格式:
package 包名;
位置:
java文件的首行
作用:
声明当前类所属的包
要求所在目录和声明的包名必须一致
3、在同一个包中 类不能重名
在不同的包中,类可以同名
4、默认情况下,优先引用同包中的类;
但是不能直接使用不同包的类;
5、import导包语句
import关键字 来指定具体的包名
import 包名.类名;
位置:
packge下边 class上边
import 包名.*;--导入该包下所有的类,不包含该包的子孙包下的类。
6、java.lang包 默认已经被所有的类都导入了
7、程序中可以在使用类时加类所属的包名 这样可以无需导包
例如:
java.util.Scanner sc = new java.util.Scanner(System.in);
常用的包:
java.io 通过数据流、序列化和文件系统提供系统的输入和输出。
java.lang | 提供对java编程语言的设计基础内容。 |
java.lang.reflect | 反射 |
java.lang.annotation | 注解相关的包 |
java.math | 用于执行任意精度的整数运算提供的类( BigInteger)和任意精度的小数运算( BigDecimal)。 |
java.net | 为实现网络应用程序提供类。 |
java.util | 包含集合框架、遗留的集合类、事件模型、日期和时间的设施、国际化和各种实用工具类(一个字符串标记,一个随机数发生器,和一位阵列)。 |
Object
所属包:java.lang
Class Object
类定义:public class Object{}
类介绍:
Object类是类层次结构的根类(顶级父类)。
每个类都以 Object作为超类(父类)。
所有对象,包括数组,实现这个类的方法。
构造方法:
无参构造
方法:
1、protected Object clone()--创建并返回此对象的副本
注意:
1、protected --受保护的 可以在本类 子类 同包类
在子类中且要通过当前子类对象才能调用protected修饰的方法
2、CloneNotSupportedException-执行clone方法抛出异常
要克隆对象对应的类必须实现Cloneable接口
3、Cloneable接口--标记接口 如果实现了该接口 则表示该类的对象时允许拷贝 如果没有实现接口 表示不允许clone方法拷贝的方法
接口中没有抽象方法
面试题
2、protected void finalize()
当垃圾回收确定没有对对象的引用时,由对象上的垃圾回收器调用。
程序控制垃圾回收器来指定回收某个对象?
垃圾回收器自己执行 程序员无法干预
finalize方法可以提醒垃圾回收器可以回收对象 无法让对象立马被回收掉
3、public final Class<?> getClass()
返回当前对象的运行时类型
Animal a = new Dog();
a instanceof Dog-true
a.getClass()--Dog
Dog dog = (Dog)a;
应用场景:
1、将任意类的对象赋值给Object类型的引用