java高新技术视频主要讲解了:eclipse的使用方法,增强for循环,枚举,javaBean反省,泛型,反射,注解等等的一些java特性。
Eclipse:是一个开发java的图形化软件,编译工具还是用的java的jdk工具包,只是提供图形的操作界面,让开发效率变高。eclipse的使用方法在此就不赘述了。
增强for循环:
public static void forLoop(){
int a[] ={1,2,3,40};
for(int i:a){
System.out.println(i);
}
}
枚举
J2SE 1.5 新增了一个enum 关键字用以定义枚举类。枚举类是一种特殊的类,它一样可以有自己的方法和属性,可以实现一个或 多个接口,也可以定义自己的构造器。一个java 枚举类 源文件中最多只能定义一个public访问权限的枚举类(就是只有一个枚 举类)且该java源文件也必须和该枚举类的类名相同。如:public enum Dogs {
A,B,C,D;}。
//创建一个枚举类
public enum SeasonEnum
{
SPRING,SUMMER,FALL,WINTER;
}
//测试类
public class TestEnum
{
public void judge(SeasonEnum s)
{
//switch语句里的表达式可以是枚举值
switch (s)
{
case SPRING:
System.out.println("春暖花开,正好踏青");
break;
case SUMMER:
System.out.println("夏日炎炎,适合游泳");
break;
case FALL:
System.out.println("秋高气爽,进补及时");
break;
case WINTER:
System.out.println("冬日雪飘,围炉赏雪");
break;
}
}
public static void main(String[] args)
{
//所有枚举类都有一个values方法,返回该枚举类的所有实例
for (SeasonEnum s : SeasonEnum.values())
{
System.out.println(s);
new TestEnum().judge(s);
}
new TestEnum().judge(SeasonEnum.SPRING);
}
}
内省:
JDK中提供的用于操作JavaBean的API称为内省。JavaBean是java中的特殊的类,它主要用于传递数据信息,类中的方法主要用于访问私有的字段。
且方法命名符合特定的规则,以set、get开头。
注意:
JavaBean中的私有属性是有set、get方法得知
去掉set、get剩下的部分就是属性的名称
操作JavaBean的工具包:BeanUtils
它其中有setProperty 和getProperty方法,方法的参数的值为字符串
如BeanUtils.setProperty(对象,"x","6")
BeanUtils.getProperty(对象,"x")
而PropertyUtils类中也有这两个方法,但参数类型的值不是字符串
PropertyUtils.setProperty(对象,"x",4)
PropertyUtils.getProperty(对象,"x")
JDK7.0中的新特性:
Map map={name :"zxx",age:34}//可以这样定义Map集合
BeanUtils.setProperty(map,"name","lhm");
BeanUtils不仅可以操作JavaBean还可以操作Map,而且还能将JavaBean和Map相互转换
泛型
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。
规则和限制
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String");
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String");
public class GenDemo {
public static void main(String[] args) {
// 定义泛型类Gen的一个Integer版本
Gen<Integer> intOb = new Gen<Integer>(88);
intOb.showType();
int i = intOb.getOb();
System.out.println("value= " + i);
System.out.println("----------------------------------");
// 定义泛型类Gen的一个String版本
Gen<String> strOb = new Gen<String>("Hello Gen!");
strOb.showType();
String s = strOb.getOb();
System.out.println("value= " + s);
}
}
public class Gen<T>{
//定义泛型成员变量
private T t;
public Gen(T t){
this.t = t;
}
public T getOb(){
return t;
}
public void setOb(T t){
this.t = t;
}
public void showType(){
System.out.println("T的实际类型是:"+t.getClass().getName());
}
}
反射
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
public static Object getProperty(Object owner, String fieldName) throws Exception {
//得到该对象的Class。
Class ownerClass = owner.getClass();
//通过Class得到类声明的属性。
Field field = ownerClass.getField(fieldName);
//通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
Object property = field.get(owner);
return property;
}
注解
Annotation(注解)是JDK5.0及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的,根据注解参数的个数,我们可以将注解分为:标记注解、单值注解、完整注解三类。它们都不会直接影响到程序的语义,只是作为注解(标识)存在,我们可以通过反射机制编程实现对这些元数据的访问。另外,你可以在编译时选择代码里的注解是否只存在于源代码级,或者它也能在class文件中出现。
了解一下java1.5起默认的三个annotation类型:
一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。
一个是@Override:只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
一个是@Deprecated:建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,可以设定在程序里的所有的元素上.
一个是@SuppressWarnings:这一个类型可以来暂时把一些警告信息消息关闭.
如果不清楚上面三个类型的具体用法,各位可以baidu或google一下的,很简单的。
package lighter.javaeye.com;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Description {
String value();
}