#### 获取系统当前时间
可以使用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();
Java的常用工具和高级技能
最新推荐文章于 2022-11-08 13:39:07 发布