大数据预科班9
复习:
static
- static--变量、方法、代码块、内部类
- 静态变量--放于静态区,被所有对象所共享
- 静态方法--放于方法区中的静态区,在栈内存中执行(代码块+方法)
- 所有的非静态属性和非静态方法必须由对象来调用
- 静态不属于对象,属于整个类;
- 静态代码块,存储在静态区,在本类创建对象或者调用方法的时候被调用,终其一生只执行一次
- 程序启动时,先加载好核心类库到方法区(有静态属性或静态方法存放在静态区),其次是主函数所在的类,类在第一次使用的时候才会加载,类一旦加载到方法区,就不会在移除
final
- 修饰变量--常量,基本类型值不可变;引用数据类型中地址不可变,属性值可变
- 修饰函数--最终方法,可重载,不可重写
- 修饰类--最终类,不可继承
抽象类
- abstract
- 有构造函数,但不能创建对象
- 抽象方法不能用static、final、private修饰
接口
- 接口不是类,没有构造函数
- 所有方法都是抽象方法(JDK1.8以前)--public abstract修饰
- 属性public static final
- 模板作用:规范化
- 接口可以声明对象,但不能创建对象
内部类
- 含义:定义在类内部的类
- 作用:封装的第三种形式
- 方法内部类
1. 定义在方法内的类
2. 举例
class Outer{
public void m(){
class Inner1{
public void m(){
System.out.println("inner");
}
}
System.out.println("outer");
}
}
3. 不能在方法外使用
4. 作用:封装
5. 不能定义静态变量和静态方法,可以定义静态常量
6. 外部类不能调用,但是属于外部类
7. 不能使用当前方法的变量,可以使用常量
8. 内部类可以使用外部类的东西(先后出现顺序)
9. 内部类可以继承其他类,实现接口
1. 定义在类内方法外
2. 举例
class A{
class B{
}
}
3. 创建内部类对象
A a=new A();
A.B b=a.new B();
new A().new B();
4. 不能定义静态变量和静态方法,可以定义静态常量
5. 可以继承其他类,实现接口
1. 用static修饰的成员内部类
2. 与成员内部类差别很大
3. eg
class A{
static class B{
}
}
4. 创建
A.B b=new A.B();
5. 可以定义静态方法和静态方法
6. 静态内部类和普通类基本一致
7. A.B.m();//驼峰命名法和源代码判断是内部类还是对象(System.out.print())
1. 判断是不是内部类看 $.class中是否有$(A$B.class存在内部类)
所以一般不用$符号命名类,容易引起歧义
2. 判断是不是方法内部类看$后面是否有数字(方法中的类按照顺序依次填数字1,2,3,4...)(A$1B)
1. 没有名字,只能调用一次
2. eg
A a=new A(){
};
3. 本质:继承类和实现接口
4. {}匿名内部类;习惯上认为eg中的全部
5. 普通类也可以写匿名内部类(本质:继承和实现)
6. 类:相当于继承类
7. 接口:相当于实现接口
8. 当匿名内部类定义在方法中时,与方法内部类类似,不能手动定义构造函数(匿名类没有名字)
9. 定义在类内方法外与成员内部类类似
10. 匿名内部类自定义的方法没啥用,几乎不会定义,除非在其中的方法调用它
扩展:内部接口
- 定义在类内的接口或定义在接口中的接口
- 类内的接口默认是静态的(必须为静态的,要不获取不到)、
- 接口中允许定义成员内部类,且默认为static
- 类与接口之间可以互相定义
包
- package
- 导包 import(默认不用导包java.lang核心类库--一个java程序执行之前会自动把这个包下的类自动加载进来)
- 导包:同一包下所有类,但是不包括子包下的所有类import java.util.*;
- java.util工具包
- java.io传输数据
- java.net网络通讯
- javax扩展包
- java.nio并发
垃圾回收机制
- 针对堆内存的(因为栈中用完就释放了;)
- 当调用构造函数时,会创建一个对象,因为java中对每种数据类型都明确的给定了大小。
- 创建对象的时候,会自动计算大小分配内存。所以在内存回收和释放的时候也是由java自己管理
- C语言(析构函数)
- String最终成为String数组
- 一个对象创建的时候是放到新生代的伊甸园区,如果栈中没有引用,那么会在扫描的时候被解析,释放内存;如果经过一次依然释放内存,将会移入新生代的幸存区,幸存区的扫描频率略低于伊甸园区;如果幸存区多次扫描依然没有被释放,会被放入老生代,老生代的扫描频率远远低于新生代,老生代的对象一旦被回收,可能造成程序的卡顿或崩溃。
- 初代回收--新生代的回收minor GC
- 完全回收--老生代的回收full GC
类加载器
- 启动类加载器/引导类加载器
- 扩展类加载器
- 系统类加载器(比较活跃)
- 双亲委派机制
API(Application //Programing Interface)
- Object
- String/StringBuilder/StringBuffer
- Pattern正则表达式
- 包装类
- 数学类
- 日期类
- 异常
- 集合/泛型/Comparator/Iterator
- Map
- File
- IO装饰者模式
- 线程
- 套接字
- Juint测试
- JDk5静态导入、可变参数局、枚举、反射
- JDK8
- XML
Object
- 是所有类的顶级父类(超类)
- 唯一没有父类的类
- 重要方法
1. clone克隆并产生一个新对象,地址不一样,属性值一样(protected、需要强转、抛出异常CloneNotSupportedException--所对应的类必须实现Cloneable接口--没有任何的方法和属性,只是标识这个类可被克隆)
2. equals判断两个对象是否一致(相等),判断的是直接值(地址);
手动重写equals
//先判断两个对象的地址(==)
//判断对象是否为null
//判断类型是否一致(对象.getClass)
//判断属性值(注:String比较时比较地址和内容)
注:==判断的是对应的直接值(地址)
3. fanilize通知垃圾回收器回收垃圾对象,但是垃圾回收器不一定执行
System.gc();//底层用fanilize写的
4. getClass获取当前对象的实际类型
5. hashCode(native称之为本地方法:c语言实现)(散列算法得到一个值,每个对象产生的哈希码是唯一的)(每一个对象的唯一特征)
重写hashCode方法时,当equals值为true时,要求hash码一致,反过来不成立。
6. toString方法:当打印一个对象的时候,默认调用的是toString
7. wait
8. notify
进制
进制 | 缩写 | 全称 |
---|
二进制 | Bin | Binary |
八进制 | Oct | Octal |
十进制 | Dec | Decimal |
十六进制 | hex | Hexagondecimal |
eclipse快捷键
名称 | 快捷键 |
---|
单行注释与取消 | ctrl+/ |
多行注释 | ctrl+shift+/ |
多行注释取消 | ctrl+shift+\ |
调整代码格式 | alt+shift+f |
快速导包 | ctrl+shift+o |
错误提示键 | ctrl+1 |
复制 | ctrl+alt+up |
上移 | alt+up |
下移 | alt+down |
删除 | ctrl+d |
... | ... |