JAVA 高新技术

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------GUI编程

JAVA 高新技术



Java ee :Java Platform,Enterprise Edition  Java平台企业版
ide :Integrated Development Environment 集成开发环境
 
JMS: Java Message Service Java消息服务


JMX: Java Management Extensions Java管理扩展


JNDI:Java Naming and Directory Interface Java命名和目录接口


静态导入:


导入一个类下面的特定方法:
eg: import java.Math.min;


导入一个类下面的所有方法
eg: import java.Math.*;


JDK 1.5新特性


1、可变参数:
一个方法接受的参数个数不固定,例如:
System.out.println(add(1,3,11));
System.out.println(add(3,1));


public static int add(int x,int ...args){
int sum =x;
for(int i = 0;i<args.length;i++){
sum += args[i];
}
}


2、增强for循环


语法:
for(type 变量名:集合变量名){...}


public static int add(int x,int ...args){
int sum =x;
//原有写法
/*
for(int i = 0;i<args.length;i++){
sum += args[i];
}
*/


//增强写法

for(int arg :args){
sum+=args[i];
}
}


3、基本数据类型的自动装箱与拆箱


享元模式(flyweight)


自动装箱:
将一个int类型的数据封装成一个Integer对象
Integer num1=12;


自动拆箱:
将一个Integer对象自动转换为一个一个int类型的数据
System.out.println(num1+13);


自动装箱和拆箱只能针对-128~+127之间的整型数据


Integer num1 =10;


Integer num2 =10;
System.out.println(num1==num2);  ------->true


Integer num3=133;


Integer num4=133;
System.out.println(num3==num4);  ------->false




享元模式:把具有相同属性的一类对象的同一属性封装成一个对象,其他的特有属性则封装为方法,这样可以大大减小内存的占用。




4、枚举类的实现


枚举的定义:


简单定义方法demo:


public enum WeekDay{

SUN,MON,TUE,WED,THU,FRI,SAT
}


public static void main(String[] args){
WeekDay mon =WeekDay.MON;
System.out.println(mon);
}


较为复杂的定义方法demo:


public enum TrafficLamp{
RED(30){


@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}},
GREEN(45){


@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}},
YELLOW(5){


@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time= time;
}

private TrafficLamp(){

}

}


5、Class类——反射的基石


Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class


Class类的实类对象即为各个类在内存中的字节码,例如,Person类的字节码,ArrayList类的字节码


获得类的字节码方法:
(1)类名.class 如:System.class
(2)对象.getClass 如:new Date().getClass();
(3)Class.forName(),如:Class.forName("java.util.Date");


6、反射——实现框架功能


反射就是把Java类中的各种成分映射成相应的java类。


Constructor类------->构造方法


Field类----------->成员变量


ReflectPoint pt = new ReflectPoint(23,23);


Field fieldY = pt.getClass().getField("y");


int temp = fieldY.get(pt);


Field fieldX = pt.getClass().getDeclaredField("x");


filedX.setAccessible(true);


int tempx = fieldX.get(pt);




成员变量反射demo:


private static void changStringValue(Object obj)throws Exception{
Field[] fields = obj.getClass().getFields();

for(Field field:fields){
if(field.getType()==String.class){
String oldValue = (String)field.get(obj);
String newValue = oldValue.replace('b','a');
field.setValue(obj,newValue);
}
}
}




Method类---------->类中的方法


String str = new String("abcdefg");

Method methodCharAt = String.class.getMethod("charAt", int.class);

System.out.println(methodCharAt.invoke(str, 3));


框架与框架要解决的核心问题


我做房子卖给用户住,由用户自己安装门窗和空调,我做的房子就是框架,用户需要使用我的框架,把门窗插入我提供的框架中,框架与工具类有区别,工具类被用户的类调用,而框架则是


调用用户提供的类。




7、类加载器:


将配置文件放在classpath目录下,利用类加载器来加载配置文件


Test.class.getClassLoader().getResourceAsStream("config.properties");


Test.class.getResourceAsStream("config.properties");




8、内省——JavaBean


int getAge()
void setAge(int age)


符合上述规则的类就可以称为JavaBean类


JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省,用内省这套APPI操作JavaBean比用普通类的方式更方便


int x = 10;


String propertyName = "x";


PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt.getClass());


Method methodGetX = pd.getReadMethod();


Object retVal = methodGetX.invoke(pt);


Method methodSetX = pd.getWriteMethod();


methodSetX.invoke(pt,5);


利用工具包进行操作


BeanUtils.setProperty(pd,"x","100");


BeanUtils.getProperty(pd,"x");


PropertyUtils.setProperty(pd,"x","100");




9、注解的应用


注解类


@interface A{


}


应用了“注解类”的类


@A
Class B{


}


对“应用了注解类的类”进行反射操作的类


Class C{
B.class.isAnnotionPresent(A.class);


A a =B.class.getAnnotion(A.class);
}




10、泛型


泛型是提供给Java编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序的非法输入,编译器编译带类型说明的集合时会去掉“类型”信息,是程序运行效率不受影响,对于参数


化的泛型定义,getClass()方法的返回值和原始类型完全一样,由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其他类型的数据,例如,用


反射得到集合,再调用其add方法即可。




?:表示任意类型,使用?通配符可以引用其他各种参数化的类型,?通配符定压抑的变量主要用作引用,可以调用与参数化无关的方法,但是不能调用与参数化有关的方法。


限定通配符的上边界


Vector<? extends Number> x =new Vector<Integer>();


限定通配符的下边界


Vector<? super Number> y = new Vector<Object>();


泛型的简单应用:


public class Test {

public static void main(String[] args){
String str[] = new String[]{"abc","def","ghi"};
swap(str,1,2);
for(int i=0;i<str.length;i++){
System.out.println(str[i]);
}
}
//泛型方法:

private static <T> void swap(T[] a,int i,int j){
T temp = a[i];
a[i] = a[j];
a[j] = temp;
}

private static <T> T add(T x, T y){
return null;
}
}


CRUD:数据库的增删改查


//泛型类:




public class Test {

public static void main(String[] args){

}

public class GenericDao<E>{
public void add(E x){

}

}
}


通过反射找回泛型的具体类型:


Method m = Test.class.getMethod("applyVector", Vector.class);
Type[] t = m.getGenericParameterTypes();
ParameterizedType pType = (ParameterizedType) t[0];
Type[] temp = pType.getActualTypeArguments();
System.out.println(temp[0]);




11、Java类加载器


Java虚拟机中可以安装多个类加载器,系统默认有三个主要的类加载器,每个类负责加载特定位置的类:
BootStrap,ExtClassLoader,AppClassLoader



























































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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值