黑马程序员--09--java加强

黑马程序员--09--java加强
                                                         -------  android培训 java培训 、期待与您交流! ----------
JDK1.5新特性:

静态导入是用于导入一个包含多个静态的方法的类,方便调用静态的方法。例如为了方便调用Math类中的静态方法,
可以利用静态导入的方法"import static java.lang.math.*;",这样可以把Math.max()简写为max();

可变参数"..."
可变参数是用于不固定的方法的参数,例如method(int a,int b,...n)其中n是一个数组。

增强for语句foreach:for(数组类型 名称: 数组名)。

自动装箱:Integer i = 3;以前需要用new关键字创建。

自动拆箱:System.out.println(i+3); 以前需要把i转换成基本数据类型。

自动装箱用到了“享元模式”,就是把-128~127的值放到一个池里面,当两个或两个以上的自动装箱的值都是在这个区间时会调用同一个值进行==的对比,
当超过之后就会重新包装新值,所以两个Integer对象进行对比的时候只要是-128~127的值相等的integer的对比也会是相等的。
例如
Integer a = 12; Integer b = 12; 这时a = b;
如果
Integer a = 128; Integer b = 128; 这时a != b

枚举(enumeration):
使用该功能取代以往定义常量的方式,同时枚举类型还赋予程序在编译时检查的功能。


利用反射实现框架。
一步一步实现的开发。
例如在第一步已经将程序的框架写好,之后只需要把写好的文件再放到该框架的根目录下即可。


面向方面编程(AOP):面向方面编程解决的方法是使用代理。

动态代理技术:
如果需要成百上千的代理类则需要编译成百上千个类,这样做会非常累,因此JVM提供了可以在运行时期动态的生成出类的字节码,
这些生成的字节码常常用于代理类,这就是动态代理类。
JVM生成的动态类必须实现一个或多个接口,所以JVM生成的动态类只能用于相同接口的目标类的代理。
CGLIB库可以动态生成一个类的子类,一个类的子类也可以用作该类的代理,所以,如果要为一个没有实现接口的类生成动态代理类,那么可以使用CGLIB库。
代理类通常除了要调用自己代理的那个类的方法外和返回代理的那个类的方法返回的结果外,还可以在代理的一下四个位置加上自己的系统功能代码:
1、在调用代理的类的方法之前。
2、在调用代理的类的方法之后。
3、在调用代理的类的方法之前和之后。
4、在处理异常的catch块中。
如果对象为空,则不能调用有返回值的方法,否则会抛出空指针异常。

/*
内省---
特殊类:JavaBean
javaBean是专门操作对象中的set和get方法的类,并且set和get的权限必须是公有(public)的。
int getValue();
void setValue(int num);
在获取javabean对象的属性时会把属性名set和get去掉,并且如果第二个名字是大写则将属性名改为大写,
如果是小写个则将属性名改为小写。例如上面的setValue的javaBean属性名是:value。
如果一个类符合javaBean的特点,我们可以使用javaBean的方法处理,也可以使用普通方法处理。
如果两个模块需要传递多个信息,我们可以把这些信息封装到javaBean对象中,这种实例对象通常称为值对象(Value Object简称VO)。
使用内省Instrospector操作javaBean.
beanInfo类:描述bean的信息。
*/

import java.beans.*;
import java.lang.reflect.*;
class Test
{
private int x = 3;
private int y = 4;
public void setX(int x){ this.x = x; }
public int getX(){return x;}
void setY(int y){ this.y = y; }
int getY(){return y;}
}

class JavaBeanDemo
{
public static void main(String args[])throws Exception
{
Test t = new Test();
String PropertyName = "X";
//获得test类的描述
PropertyDescriptor pd = new PropertyDescriptor(PropertyName,t.getClass());
//获取读X的方法
Method readMethod = pd.getReadMethod();
System.out.println(readMethod.invoke(t));
Method writeMethod = pd.getWriteMethod();
writeMethod.invoke(t,8);
System.out.println(t.getX());
}
}

/*
枚举(enumeration):
使用该功能取代以往定义常量的方式,同时枚举类型还赋予程序在编译时检查的功能。
更多功能查看java.lang.Enum
枚举保存数据的原来是数组角标,以角标记录每个数的位置,角标从0开始。
枚举是以内部类的形式存在的,所以在编译时会生成内部类的class文件。
可以为枚举定义构造函数和方法,构造函数用于初始化枚举的值,方法可以获取枚举的值。
*/
class Enum
{
public enum MyNumber //定义一个枚举类型
{
ONE,TWO,THREE,FOUR,FIVE; //定义枚举的内容
}
public enum MyNumber1
{
ONE(1),TWO(2),THREE(3),FOUR(4),FIVE(5);
private int num ;
private MyNumber1(int num) //定义枚举的构造函数
{
this.num = num;
}
public int getValue() //定义获取枚举值的方法
{
return num;
}
}
public enum TrafficLamp
{
READ
{
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN
{
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW
{
public TrafficLamp nextLamp()
{
return READ;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}

public class EnumDemo
{
public static void demo1(Enum.MyNumber num)
{
System.out.println("demo1--比顺序的大小----"+num.compareTo(Enum.MyNumber.ONE));
System.out.println("demo1--与TWO是否相等----"+num.equals(Enum.MyNumber.TWO));
System.out.println("demo1--name----"+num.name());
System.out.println("demo1--FOUR----"+Enum.MyNumber.FOUR.ordinal());
}
public static void demo2(Enum.MyNumber1 num)
{
System.out.println("demo2--比顺序的大小----"+num.compareTo(Enum.MyNumber1.ONE));
System.out.println("demo2--与TWO是否相等----"+num.equals(Enum.MyNumber1.TWO));
System.out.println("demo2--name----"+num.name());
System.out.println("demo2--FOUR----"+Enum.MyNumber1.FOUR.ordinal());
System.out.println("demo2--FOUR----"+Enum.MyNumber1.FOUR.getValue());
}
public static void main(String args[])
{
Enum.MyNumber num = Enum.MyNumber.ONE;
demo1(num);
System.out.println();
Enum.MyNumber1 num1 = Enum.MyNumber1.ONE;
demo2(num1);
System.out.println();
Enum.TrafficLamp num2 = Enum.TrafficLamp.read;
}
}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值