Java的常用工具和高级技能

来源:互联网 发布:webrtc python 编辑:程序博客网 时间:2024/06/03 19:55
#### 获取系统当前时间
可以使用System.currentTimeMillis()方法获取系统当前时间,从1970年1月1日午夜开始,得到的是毫秒数


#### Calendar日历类
可以帮我们进行时间和年、月、日、时、分、秒、星期之类的字段进行转换的类


获取对象

//得到日历对象(默认时间的是当前系统时间)
Calendar c = Calendar.getInstance();


获取毫秒数


c.getTimeInMillis()


获取各个字段


//获取年份
int year = c.get(Calendar.YEAR);
//月份得到的是0-11
int month = c.get(Calendar.MONTH);
month+=1;
//获取日期
int date = c.get(Calendar.DATE);
System.out.println(year+" "+month+" "+date);
//获取小时(HOUR_OF_DAY表示24小时制,HOUR表示12小时制)
int hour = c.get(Calendar.HOUR_OF_DAY);
//分钟
int minute = c.get(Calendar.MINUTE);
int second = c.get(Calendar.SECOND);
System.out.println(hour+":"+minute+":"+second);
//获取星期
int week = c.get(Calendar.DAY_OF_WEEK);
System.out.println(week);


设置时间

设置毫秒数
c.setTimeInMillis(毫秒数)
如:
c.setTimeInMillis(System.currentTimeMillis());


按字段设置
c.set(Calendar.YEAR, 2012);


#### 单例模式
可以实现同一个进程,下只有实例(只有一个对象),需要的条件:


1、私有的构造方法
//当有公开构造之后,我们不能保证会在哪里被new,也不能保证被new的次数
private MyUtil(){}


2、私有静态的当前类对象的引用
private static MyUtil instance;  //默认为null


3、公开的静态获取对象的方法
//获取对象只能通过该方法获取
public static MyUtil getInstance(){
//如果第一次来获取insance的值为null
if(null == instance){
instance = new MyUtil(); 
}
return instance;
}


#### Date类
可以表示一个瞬间(有格式)


Date t = new Date(time);
#### 时间格式化对象
SimpleDateFormat是一个以与语言环境有关的方式来格式化和解析日期的具体类


SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");
//format方法接收一个Date对象
String str = sf.format(t);


#### Java泛型
泛型的标记符号:


E -Element 元素
T -Type 类型
K -Key
V -Value 值
N -Number 数值类型
? -不确定类型(通配符)
注意基本数据类型要作为泛化参数时需要用包装类型

int -Integer
char -Character
double - Double
float -Float
boolean - Boolean
short -Short
long -Long
byte -Byte


#### ?通配符


<? extends T>表示类型上界,表示可以接收该类型T或者T的子类
<? super T>表示类型下界,表示参数化类型是T类或者是T的父类
<? extends T>不确定类型,虚拟机无法分配空间,一般是只能读取,不能设置内容(null除外)


//接收的就是Man以及它的子类(不能设置只能读取)
MyArrayList<? extends Man> list2  = new MyArrayList<Man>();


//该类型或者其父类
MyArrayList<? super Man> list3 = new MyArrayList<Man>();
#### 泛型方法


泛型方法在定义时,需要在返回值之前加上一个<T>,如
public static <T> void test(T t){


}

public <T> T test(T t){


}
#### Java反射
Java反射是可以让我们在运行时来操作类的方法、属性、父类、接口等,所有的Java文件都会被编译为.class文件,class文件最终会被ClassLoader加载到虚拟机中去执行,加载过程中每个class文件会自动生成对应的Class对象


#### Class对象的获取

//基于类名.class获取Class实例
Class<?> cls = Person.class;

//使用对象的getClass方法获取
Person p1 = new Person();
Class<?> cls2 = p1.getClass();

try {
Class<?> cls3 = Class.forName("com.types.Person");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
#### 方法调用


//获取所有构造方法
Constructor<?>[] constr = cls.getConstructors();


//获取一个精确的构造
Constructor<?> constructor = cls.getConstructor(String.class,int.class);
在反射的使用时如果要操作方法建议去掉Java语言环境的检测,通过以下方式去掉即可(对所有方法有效)

constructor.setAccessible(true);
使用构造方法创建对象

Person p = (Person) constructor.newInstance("张三",18);


使用无参构造创建
Person p2 = (Person) cls.newInstance();


#### 获取方法(普通方法)


获取本类中所有定义的方法包括private、public、protected、default
Method[] ms = cls.getDeclaredMethods();


//获取所有公开方法(包括父类中的公开方法直到Object)
Method[] ms = cls.getMethods();


//获取精确的方法 
Method m = cls.getDeclaredMethod("wearClothes", String.class);
m.setAccessible(true);
//执行方法
boolean r = (Boolean)m.invoke(p, "运动服");


#### 属性操作


//获取某一个精确的属性
Field f = cls.getDeclaredField("name");
//设置属性值
f.setAccessible(true);
f.set(p, "李四");

//获取某一个精确的属性
Field fa = cls.getDeclaredField("a");
//设置属性值
fa.setAccessible(true);
fa.set(p, 100);
#### 获取父类


//获取父类(Object的父类是null)
Class<?> superCls = cls.getSuperclass();
0 0
原创粉丝点击