java关键字、继承和代理

基本数据类型

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

  1. this.属性名:当局部变量和成员变量名称相同时,必须使用this关键字,用来对二者进行区分
  2. this.方法名:让一个类中的一个方法调用另一个方法或者实例变量,static关键字是对类而言的,this关键字是指当前对象,因此static修饰的方法不能使用this
  3. this访问构造器函数this():只能在构造器中访问,必须是构造器的第一句,不能与super()同时使用

super

  1. super调用父类的构造函数,只能写在构造函数里,并且是第一句
  2. super可以调用父类的函数

static

  1. 修饰变量,属于类变量,被所有该类所产生的对象共享
  2. 修饰方法:this不能在static方法中使用
    静态方法不能调用非静态方法
    非静态方法可以调用静态方法
  3. static不会改变访问权限
  4. static 局部变量属于对象,而对象的生命周期有限,那么不能满足static变量的共享性,static只能修饰全局变量
  5. static修饰块在类加载的时候就会执行(起到优化程序的作用),顺序在main()执行之前

final

  1. 修饰变量时,对于基本数据类型,赋值后无法更改,对于引用类型,所记录的地址无法修改,fianl修饰全局变量时,必须提前赋值
  2. 修饰方法时,子类不能进行重写
  3. 修饰类时,无法被继承

访问限制符

                     当前类     同包     子类     其他包

public √ √ √ √
protected √ √ √ ×
default √ √ × ×
private √ × × ×

entends 继承

extends关键字用来表明父类和子类的关系
子类和父类的继承关系:一个子类只能继承一个父类,一个父类有多个子类
子类可以调用父类的方法,反之不可以,子类就是对父类功能的拓展
子类和父类方法名相同时,调用该方时,父类对象调用父类函数,子类对象调用子类方法
java不支持多继承,但可以形成继承链
所有类的父类:object

代理

定义

给目标对象提供一个代理对象,并且由代理对象控制目标对象的引用
目的是通过代理的方式间接的访问目标对象,防止直接访问目标对象给系统带来不必要的复杂性

静态代理

  1. 定义接口
public interface ByClothes {
	void clothes(String size);
}
  1. 定义目标对象类
public class ClothesFactory implements ByClothes {
	@Override
	public void clothes(String size) {
		System.out.println("已经为您制作好了一整套size为"+size+"的衣服。。。。。。。。");
	}
}

  1. 定义代理对象类
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("为您提供一条龙的包办服务");
	}
}
  1. 测试类
public class Test {
	public static void main(String[] args) {
		ClothesFactory clothesFactory = new ClothesFactory();
		proxy proxy = new proxy(clothesFactory);
		proxy.clothes("XXl");
	}
}

动态代理

  1. 新建接口类
public interface ByShoes {
	void byShoes(String size);
}
  1. 新建目标对象类
public class ShoesFactory implements ByShoes{

	@Override
	public void byShoes(String size) {
		System.out.println("已经为您生产出了尺码为"+size+"的鞋子");
	}

}
  1. 新建代理类
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);
	}
	
	
}

  1. 测试类
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");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值