基本数据类型
1、8种基本数据类型:int,long,short,byte,float,double,char,boolean
2、float :1位符号位、8位阶位,采用移码的形式表示,23位符号位
double:1位符号位、11位阶位、52位符号位
3、造成浮点数精度丢失的原因:尾数和阶位的限制导致有些浮点数无法准确的显示出来
4、正数的原码、反码、补码相同
负数用补码表示,在原码的基础上按位取反再加1
5、离0越近,浮点型精度越高,离0越远,精度越高,在需要精确计算的时候,不能采用浮点数
6、double类型的精度是float的2倍
7、对于byte类型,-128的二进制表示形式:10000000
8、对于两个char类型,相加的结果是int类型
9、对于final修饰的变量为常量,赋值后不允许修改,一般常量名大写
10、判断变量值是否是nan,采用Double.isNan方法
11、基本数据类型在栈中存储
this
- this.属性名:当局部变量和成员变量名称相同时,必须使用this关键字,用来对二者进行区分
- this.方法名:让一个类中的一个方法调用另一个方法或者实例变量,static关键字是对类而言的,this关键字是指当前对象,因此static修饰的方法不能使用this
- this访问构造器函数this():只能在构造器中访问,必须是构造器的第一句,不能与super()同时使用
super
- super调用父类的构造函数,只能写在构造函数里,并且是第一句
- super可以调用父类的函数
static
- 修饰变量,属于类变量,被所有该类所产生的对象共享
- 修饰方法:this不能在static方法中使用
静态方法不能调用非静态方法
非静态方法可以调用静态方法 - static不会改变访问权限
- static 局部变量属于对象,而对象的生命周期有限,那么不能满足static变量的共享性,static只能修饰全局变量
- static修饰块在类加载的时候就会执行(起到优化程序的作用),顺序在main()执行之前
final
- 修饰变量时,对于基本数据类型,赋值后无法更改,对于引用类型,所记录的地址无法修改,fianl修饰全局变量时,必须提前赋值
- 修饰方法时,子类不能进行重写
- 修饰类时,无法被继承
访问限制符
当前类 同包 子类 其他包
public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×
entends 继承
extends关键字用来表明父类和子类的关系
子类和父类的继承关系:一个子类只能继承一个父类,一个父类有多个子类
子类可以调用父类的方法,反之不可以,子类就是对父类功能的拓展
子类和父类方法名相同时,调用该方时,父类对象调用父类函数,子类对象调用子类方法
java不支持多继承,但可以形成继承链
所有类的父类:object
代理
定义
给目标对象提供一个代理对象,并且由代理对象控制目标对象的引用
目的是通过代理的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性
静态代理
- 定义接口
public interface ByClothes {
void clothes(String size);
}
- 定义目标对象类
public class ClothesFactory implements ByClothes {
@Override
public void clothes(String size) {
System.out.println("已经为您制作好了一整套size为"+size+"的衣服。。。。。。。。");
}
}
- 定义代理对象类
public class proxy implements ByClothes {
public ClothesFactory factory;
public proxy(ClothesFactory factory) {
// TODO Auto-generated constructor stub
this.factory = factory;
}
@Override
public void clothes(String size) {
FrontService();
factory.clothes(size);
endService();
}
//前置服务
public void FrontService() {
System.out.println("根据您的需求进行市场调研");
}
//前置服务
public void endService() {
System.out.println("为您提供一条龙的包办服务");
}
}
- 测试类
public class Test {
public static void main(String[] args) {
ClothesFactory clothesFactory = new ClothesFactory();
proxy proxy = new proxy(clothesFactory);
proxy.clothes("XXl");
}
}
动态代理
- 新建接口类
public interface ByShoes {
void byShoes(String size);
}
- 新建目标对象类
public class ShoesFactory implements ByShoes{
@Override
public void byShoes(String size) {
System.out.println("已经为您生产出了尺码为"+size+"的鞋子");
}
}
- 新建代理类
public class LisiFactory implements InvocationHandler {
// 被代理的对象
private Object factory ;
public Object getFactory() {
return factory;
}
public void setFactory(Object factory) {
this.factory = factory;
}
//ssm: Spring SpringMVC mybitys
//Spring:AOP IOC +....
//AOP:代理 (面向切面的编程)
// 通过代理对象对方法进行增强
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
FrontService();
Object retObject = method.invoke(factory, args); //这里用了反射的思想,因为我们不知道调用的是那个工厂的那个方法
endService();
return null;
}
// 前置服务
public void FrontService() {
System.out.println("根据您的需求进行市场调研");
}
// 前置服务
public void endService() {
System.out.println("为您提供一条龙的包办服务");
}
//调度员工
/**
* 1 新建一名员工
* 2.告诉员工工厂地址
* this:绑定
* @return
*/
public Object getProxyInstance() {
// TODO Auto-generated method stub
return Proxy.newProxyInstance(factory.getClass().getClassLoader(), factory.getClass().getInterfaces(), this);
}
}
- 测试类
public class Test {
public static void main(String[] args) {
ShoesFactory shoesFactory = new ShoesFactory();
LisiFactory lisiFactory = new LisiFactory();
lisiFactory.setFactory(shoesFactory);
ByShoes yuangong = (ByShoes) lisiFactory.getProxyInstance();
yuangong.byShoes("42");
}
}