1.泛型
泛型类
泛型方法
public class Demo {
public static void main(String[] args) {
print("String:啊哈哈哈");
print(1223135);
}
public static <A> void print(A a){
System.out.println(a);
}
}
泛型限制类型
public class Demo {
public static void main(String[] args) {
Plate<String> p = new Plate<>();
p.data = "String";
System.out.println(p.data);
}
}
interface Fruit{
}
class Apple implements Fruit{}
class Plate<T>{
T data ;
}
泛型中的通配符
public class Demo {
public static void main(String[] args) {
Plate<? extends Fruit> p = new Plate<Apple>();
Plate<? super Apple> p1 = new Plate<Fruit>();
}
}
interface Fruit{
}
class Apple implements Fruit{}
class Plate<T>{
T data ;
}
类型通配符是使用 ? 代替方法的具体的类型实参。
1. <? extends Parent>指定了泛型类型的上届
2. <? super Child> 指定了泛型类型的下届
3. <?>指定了没有限制的泛型类型
作用
1.提高代码复用率
2.泛型中的类型在使用是指定,不需要强制类型转换
object
Array
import java.util.Arrays;
public class Demo {
public static void main(String[] args) {
int [] nums = {1,2,3,5,4,6,7,8,9};
System.out.println(nums);
System.out.println(Arrays.toString(nums));
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));
System.out.println(Arrays.binarySearch(nums,6));
System.out.println(nums.length);
nums = Arrays.copyOf(nums,15);
System.out.println(nums.length);
}
}
输出:
[I@7c30a502
[1, 2, 3, 5, 4, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
5
9
15
import java.math.BigDecimal;
public class Demo {
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("0.1");
BigDecimal b2 = new BigDecimal("0.2");
BigDecimal b3 = b1.add(b2);
System.out.println(b3);
System.out.println( b1.add(b2));
}
}
Date
import java.util.Date;
public class Demo {
public static void main(String[] args) {
Date date = new Date();
long time =date.getTime()-(1*60*60*1000);
Date date2 = new Date(time);
System.out.println(date.toString());
System.out.println(date2.toString());
}
}
SimpleDateFormat Calendar
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws ParseException {
/**
* y : 年
* M : 月
* d : 日
* H : 时
* m : 分
* s : 秒
*
* eg: 2020年12月12日 12:12: 50
*/
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm ss");
//将date对象转换为字符串(yyyy-MM-dd HH:mm:ss)
String text = format.format(new Date());
System.out.println(text);
Date date = format.parse("2021-12-12 12:12 12");
System.out.println(date.getTime());
System.out.println((new Date().getTime()-date.getTime())/1000/60/60/24);
}
}
import java.text.ParseException;
import java.util.Calendar;
public class Demo {
public static void main(String[] args) throws ParseException {
Calendar c1 = Calendar.getInstance();
int year = c1.get(Calendar.YEAR);
int day = c1.get(Calendar.DAY_OF_YEAR);
System.out.println(year);
System.out.println(day);
Calendar c2 = Calendar.getInstance();
//加月份 (减,输入负数)
c2.add(Calendar.MONTH,3);
System.out.println(c2.get(Calendar.MONTH));
//获取莫字段的最大值
c1.set(Calendar.MONTH,2);
int m = c1.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println(m);
}
}
system
1.获取当前时间戳
currentTimeMillis()
arraycopy()
字符串常量值
新生代: 位于堆空间
刚创建的对象 ,如果一个对象经过15次gc都没被回收,放入老年代
老年代 : 位于堆空间 垃圾回收超过15次依然存活的对象
永久代 : 常驻内存区域
通过加法拼接字符串尽量避免
StringBuilder
String中的常用方法
/**
* 演示java中常用的类
* @author LiXinRong
*
*/
public class UsualyClass {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = new String("Hello");
char[] cs = {'H','e','l','l','o'};
String s3 = new String(cs);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
//根据索引获取字符串中对应的char值
System.out.println(s1.charAt(1));
//endsWith判断字符串是否以给定的字符串结尾,是返回true,否返回false
String s4 = "www.baidu.com";
boolean flag = s4.endsWith(".com");
System.out.println(flag);
//startsWith判断字符串是否以给定字符串开头,是返回true,否返回false
boolean flag3 = s4.startsWith("www");
System.out.println(flag3);
//比较两个字符串是否相等,针对两个字符串是否相等,才有equals方法
boolean flag1 = s1 == s2;
//s1与s2的引用地址是不相同的
System.out.println(flag1);
//equals方法比较的是两个对象的内容是否相等
boolean flag2 = s1.equals(s2);
//针对于字符串的比较操作,一般的场景都是比较字符串的内容是否一致
System.out.println(flag2);
//返回指定的子字符串第一次出现位置的索引,如果没有则返回-1
int index1 = s1.indexOf("w");
System.out.println(index1);
//返回指定的子字符串第一次出现位置的索引,从指定的索引开始
System.out.println(s1.indexOf("l", 3));
//将一个字符串转变为char数组
char[] csz = s1.toCharArray();
System.out.println(csz);
//问:如何写一个方法,使传入一个字符串,输出某个字符在传入字符串中的所有位置
List<Integer> list = getIndexOfStr("aaaabtesdnedssdaas", 'a');
System.out.println(list);
//如何打印文件的后缀
String s5 = "D:/ja.va/demo.java";
//返回一个指定的子字符串在此字符串中最右边出现的索引
int index2 = s5.lastIndexOf(".");
System.out.println(index2);
//返回一个新的字符串,它是此字符串的一个子字符串
String s6 = s5.substring(index2 + 1);
System.out.println(s6);
String s7 = "sandfnaijasdfnio";
//替换字符串中相对应的内容
String s8 = s7.replace("a", "A");
System.out.println(s8);
//替换字符串中首个对应内容
String s9 = s7.replaceFirst("a", "A");
System.out.println(s9);
//通过特定字符来分割字符串,返回一个字符串数组
String s10 = "a-b-c-d-e-f";
String[] szs = s10.split("-");
for(String s : szs) {
System.out.println(s);
}
//用于拼接字符串
String s11 = s1.concat(",world");
System.out.println(s11);
//返回一个大写的字符串
String s14 = s11.toUpperCase();
System.out.println(s14);
//去除字符串两端的空格
String s15 = " hello,world ";
String s16 = s15.trim();
System.out.println("#"+s15+"#");
System.out.println("#"+s16+"#");
}
public static List<Integer> getIndexOfStr(String str, char c) {
List<Integer> list = new ArrayList<Integer>();
if(str != null) {
char[] csi = str.toCharArray();
for(int i = 0; i < csi.length; i++) {
if(csi[i] == c) {
list.add(i);
}
}
}
return list;
}
}
StringBuffer
在进行大数据量的字符串拼接时,使用stringBuffer
public class UsualyClass {
public static void main(String[] args) {
Date now = new Date();
String s = "";
for(int i = 0; i < 10000; i++) {
s += i;
}
Date nextnow = new Date();
System.out.println(nextnow.getTime() - now.getTime());
//230
Date stringBufferTime = new Date();
StringBuffer sb = new StringBuffer("");
for(int i = 0; i < 10000; i++) {
sb.append(i);
}
Date stringBufferTime2 = new Date();
System.out.println(stringBufferTime2.getTime() - stringBufferTime.getTime());
//2
}
}
Calendar
- Calendar和Date转换
- 使用Calendar进行复杂的日期运算
- Calendar只是一个工具,具体的日期还是要使用Date对象
public class UsualyClass {
public static void main(String[] args) throws ParseException {
String dateStr = "2017/02/21";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date = sdf.parse(dateStr);
//使用默认时区和语言环境获得一个日历(常用于日期相关的计算)
Calendar rightNow = Calendar.getInstance();
//使用给定的Date设置此calendar的时间
rightNow.setTime(date);
//添加30天
rightNow.add(Calendar.DAY_OF_MONTH, 30);
System.out.println(sdf.format(rightNow.getTime()));
//增加一个月的时间
rightNow.add(Calendar.MONTH, 1);
System.out.println(sdf.format(rightNow.getTime()));
//获取当前日期的几号
System.out.println(rightNow.get(Calendar.DAY_OF_MONTH));
//获取当前日期的月份,实际结果是当前月份-1
System.out.println(rightNow.get(Calendar.MONTH));
//更改年份
rightNow.set(Calendar.YEAR, 2019);
System.out.println(sdf.format(rightNow.getTime()));
//日期往前推一天
rightNow.add(Calendar.DAY_OF_MONTH, -1);
System.out.println(sdf.format(rightNow.getTime()));
}
}
java.lang.Math
Math
类中包含用于执行基本数学运算的方法,如初等指数,对数,平方根和三角函数
public class UsualyClass {
public static void main(String[] args) throws ParseException {
//圆周率常量
System.out.println(Math.PI);
//获取当前参数的绝对值,参数什么类型,返回值就是什么类型(double,float,int,long)
int num1 = 256;
num1 = Math.abs(num1);
System.out.println(num1);
//返回两个数中较大/较小的值
int num2 = Math.max(23, 31);
System.out.println(num2);
int num3 = Math.min(23, 31);
System.out.println(num3);
//返回一个[0,1)的伪随机数
double num4 = Math.random();
System.out.println(num4);
}
}