1.泛型的概念:就是将类型由原来的具体的类型参数化,这样可以提高代码的复用性和灵活性。
2.泛型可以用在那里:(1)类 (2)接口 (3)方法
3.格式:<T>(里面的字母任意)
4.示例:
1)用在类中
1 public class className<T>{ 2 private T data; 3 public className(){}; 4 public className(T data){ 5 this.data = data; 6 } 7 }
2) 用在接口中
public interface interfaceName<T>{ T show(); T show2(); } 实现泛型的时候可以考虑是否指定泛型: 1)指定泛型: public class className implements interfaceName<String>{ private String name; } 2)不指定泛型 public class className<T> implements interfaceName<T>{ private T data; }
3) 用在方法中
public static <T> void show(){ System.out.print("方法中的泛型跟在权限修饰符之后"); }
5.泛型限定和通配符
1)在使用泛型时, 可以指定泛型的限定区域
例如:必须是某某类的子类或 某某接口的实现类
<T extends 类或者接口> (采用extends关键字)
2)通配符:
类型通配符是使用?代替方法具体的类型实参。 <? extends Parent> 指定了泛型类型的上届 <? super Child> 指定了泛型类型的下届 <?> 指定了没有限制的泛型类型
1.object类是所有类的超类,所有的类都继承自Object类。
2.Object中有很多方法:
1)checkFromIndexSize(int fromIndex, int size, int length);判断范围是否越界(fromindex子范围的下线,size范围,length范围的上线)
2)checkIndex(int index,length);检查下表index是否在0-length范围内
3)equals(Object a,Object b);比较a和b,通常要重写
4)CompareTo(T a,T b)通常要重写
5)hashCode(Object a);返回哈希值
6)isNull();判断是否为空
7)toString();打印,通常要重写
1.math类有很多关于算术运算的方法,当我们遇见一些算术问题,首先想到的因该是查找API文档
2.常见的运算方法:
1)Math.abs(参数);返回绝对值
2)Math.ceil(参数);返回大于或等于参数且等于数学整数的最小值
3) Math.max(a,b);
4) Math.min(a,n);
5) Math.round(a);四舍五入
6) Math.floor(a);返回小于或等于参数且等于数学整数的最小值
1.arrays类提供了很多操作数组的方法。
2.常用方法:
1)Arrays.toString(a[]);打印出数组的值
2)Arrays.sort(a[]);对数组排序
3) Arrays.binarySearch(a[],key);打印特定下标的数据
4)arr = Arrays.copyOf(arr,arr.length*2);数组扩容
1.作用:由于小数的运算精度会出现误差,采用该类来解决
2.使用方式:
//创建对象 BigDecimal b1 = new BigDecimal("0.2"); BigDecimal b2 = new BigDecimal("0.1"); //加法运算 BigDecimal b3 = b1.add(b2); System.out.print(b3); /* 1.add();加法 2.subtruct();减法 3.multiply();乘法 4.devide();除法 */
1.该类很多方法都被弃用。
2.构造方法:
1.无参构造: //创建一个当前时间对象 Data data = new Data(); System.out.print(data.toString());//打印出当前的时间 System.out.print(data.getTime());//获取当前的毫秒值
1.dateFormat类是抽象类,在使用是要使用他的实现类simpleDateFormat
2.dateFormat是日期格式类
3.如何使用,以及常用的方法
//创建日期格式化对象 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm ss"); //1.format()方法,将日期转化为我们定义的格式 String date = sdf.format(new date()); System.out.print(date); //2.parse()方法,将yyyy-MM-dd HH:mm ss转换为日期对象 Date date = sdf.parse("2021-02-03 12:12 12"); //转换为日期类可以进行相应的计算,例如: System.out.print(((new Date()).getTime - date.getTime())/1000/60/60/24);
1.calendar是一个抽象类,它里面提供了getInstance()方法来创建按对象
2.通过设置和获取来操作时间
//创建Calendar对象 Calendar cl = Calendar.getInstance(); //设置时间 cl.set(Calendar.YEAR,2021); //获取时间 int year = cl.get(Calendar.YEAR); System.out.print(year);//结果为2021年,如果不设置,则为系统默认时间 //还可以用于计算这是一年的第几天这类问题 int day = cl.get(Calendar.WEEK_OF_YEAR); System.out.print(day);//一年的第几天
3.Calendar类的计算:
1 //创建当前日期对象 2 Calendar cl = Calendar.getInstance(); 3 //对当前日期对象的年加一 4 //1.add()加法 5 int year = cl.add(Calendar.YEAR,1); 6 System.out.print(year); //2.getTime()方法,获取日历时间表示的Date对象 8 Date date = cl.getTime(); //3.getActuralMaxmum();获取最大值 10 int day = cl.getActuralMaxmum(Calendar.DAT_OF_MONTH); 11 System.out.print(dat);//获取月份中最大的天数
1.该类提供了标准的输入流(in)输出流(out)以及标准错误流(err).
2.该类中一些常见的方法:
1)
arraycopy(Object src, int srcPos, Object dest, int destPos, int length) |
将指定源数组中的数组从指定位置开始复制到目标数组的指定位置。 |
---|
(src
- 源数组,srcPos
- 源数组中的起始位置,dest
- 目标数组,destPos
- 目标数据中的起始位置,length
- 要复制的数组元素的数量)
2)gc();运行垃圾回收器
3)exit();中止当前Java虚拟机 0表示正常中止,非0表示非正常中止
1.String 表示字符串,字符串是不可以更改的,当两个对象的字符串数组一样时,他们共享一个内存空间
例如:String text1 = "123";
String text2 = "123";
System.out.print(text1==text2); // ==号比较的是内存的地址,结果为true
如果是String text2 = new String("123");这时开创了新的内存空间,结果为false
2.字符串常量池:
1)堆在结构上分为三种:
新生代:经常被GC垃圾回收器访问
老年代:被垃圾回收器GC访问的次数少于15次
永久代:从不被垃圾回收器GC访问
3.字符串拼接:
字符串拼接很浪费空间,一般都不采用+的方式来拼接字符串。采用StringBuffer(线程安全)或者StringBuilder(线程不安全)来实现
例如:StringBuilder sb = new StringBuilder();
sb.append("1");
sb.append("2");
sb.append("3");
String text = sb.toString(); //该方法可以将StringBuilder类型转换为String类型。
System.out.print(text); //123