------- android培训、java培训、期待与您交流! ----------
一、静态导入
语法:impoort static包名.类名.*
注意:针对一个给定的包,不可能用一行语句静态地导入包中所有类的所有类方法和类变量。
如果一个本地方法和一个静态导入方法有着相同的名字,则本地方法被调用,如果静态导入两个中同名的类变量或类方法以,则必须通过对象或类名使用类变量、类方法。
可变参数函数
语法:函数修饰符返回类型函数名(参数类型...参数名){}
例如:public int add(int x,int y,int…z){}
注意:可变参数只能位于参数列表的最后。
加强for循环
格式:for(type变量名:集合变量名){}
基本数据的拆、装箱操作
在面向对象的语法中,处理的对象一般都是对象。但是基本数据类型却不是对象,既用int、double和boolean等定义的变量都不是对象,在以前的版本中,为了解决基本数据类型转换为对象的问题,出现了打包类型。为了方便基本数据类型与对对象间的转换,在最新的版本中出了基本数据的自动拆,装箱操作。
Integerdatal1=new Integer(10);//实现int类型转换对对象方式
Integer datal2=Integer.valueOf(10);//实现int类型转换对对象方式
Integer datal3=20;//通过自动装箱方式实现int类型转换对对象方式
注意:当通过自动装箱方式返回同一数值的对象时如果该数值在-128~127之间,返回的对象会引用同一个对象。否则相反。
枚举
以前都是使用public static final修饰常量。为了让程序员能够抛弃这种常量,于是就出现了Enum语法。
Public enum WeekDay{ //定义了星期的枚举
SUN,MON,TUE,WED,THU,FN,SAT
}
带有构造函数的枚举
publicenum WeekDay{
SUN,MON,TUE,WED,THU,FN("星期五"),SAT();
private WeekDay(){
System.out.println("没有参数构造函数");
}
private WeekDay(String s){
System.out.println(s+"有参数构造函数");
}
}
对于枚举构造函数,必须放在枚举常量的后面,同时构造函数的修饰符必须是private。枚举类型的自定义构造函数不能覆盖默认执行的构造函数,只会在其后运行。
反射-Class类
Class实例代表内存中的一份字节码,所谓字节码就是当Java虚拟机加载某个类的对象时,首先需要把硬盘上该类的二进制源码编译成Class文件的二进制代码(字节码),然后把文件的字节码加载到内存中,之后现创建该类的对象。
获取Class对象,既相应类的字节码。
获取类的方法:
类.getClass();
Class.forName(“类”);
类.Class
二、反射的基本应用
反射一般会涉及如下类:Class(表示一个类的类)、Field(表示属性的类)、Method(表示方法的类和Constrctor(表示类的构造方法的类)。
Class类位于java.lang包中,而后面3个类都位于java.lang.reflect包中。
构造方法的反射
//先通过String.class获取String类的字节码,然后再通过String.class.getConstructor()方法
//获取String类的构造函数。
Constructor cs=String.class.getConstructor(StringBuffer.class);
//在Constructor类中存在一个newInstance()方法,用来利用构造函数创建一个实例
//对象。该方法的参数类型必须与获取构造函数的参数类型相同。
String str=(String)cs.newInstance(new StringBuffer("gouzhao"));
//成员字段的反射
import java.lang.reflect.Field;
publicclass FieldRef {
publicstaticvoid main(String[] args)throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
Student st=new Student("lisi",20);
//获取类中的类字段
Field fieldString=st.getClass().getField("name");
//获取对象中的值只能获取公有字段
System.out.println("输出public属性字段"+fieldString.get(st));
//获取私有字段的值,称暴力反射
Field fieldAge=st.getClass().getDeclaredField("age");
//改变类字段的属性
fieldAge.setAccessible(true);
System.out.println("输出private属性字段"+fieldAge.get(st));
}
}
class Student{
public Stringname;
privateintage;
public Student(String name,int age)
{
super();
this.name=name;
this.age=age;
}
}
成员方法的反射
String str="abcdref";
//获取String类中参数为int的charAt()方法
Method methodChatAt=String.class.getMethod("charAt",int.class);
//对象str调用charAt()方法
System.out.println("str的第二个字母是:"+methodChatAt.invoke(str, 1));
System.out.println("str的第二个字母是:"+methodChatAt.invoke(str,new Object[]{1}));
三、泛型
提供一个安全机制
好处:1、将运行时期出现的问题转移到了编译时期。
2、避免了强制转换的麻烦。
格式:通过<>的形式接收指定的类型。
泛型类。泛型定义在类上,在new对象的时候传入具体类型,该类型作用于整个类。
泛型方法。泛型定义在方法上,该泛型只在方法上有效。
泛型既定义在类上又定义在方法上。
注意:当方法被静态修饰时,静态不可以访问类上定义的泛型,而且在静态方法上定义泛型时,泛型只能定义在static关键字之后。
泛型的限定
通配符:?可以对类型进行限定范围。
?estends E:接收E类型或者E的子类型。
? super E:接收E类型或者E的父类型。
------- android培训、java培训、期待与您交流! ----------