Java常用类基础

Object类

  1. 对象.getClass() (返回一个Class类

  2. 对象.hashCode()内存地址经过特定算法得到的序列

  3. 对象.toString()类名@十六进制地址子类重写

  4. 对象.equals() (与==一样内存地址子类重写

// 手写一个 Student类

// 1. getClass 方法(返回一个Class类)
Student s1 = new Student("zhangsan", 19);
Student s2 = new Student("lisi", 25);

Class c1 = s1.getClass();
Class c2 = s2.getClass();
System.out.println("s1和s2是同一个对象:" + (c1 == c2));

// 2. hashCode方法,内存地址经过特定算法的到的序列
s1.hashCode();
s2.hashCode();

// 3. toString方法
s1.toString();
s2.toString();

// 4. equals方法:
Student s3 = new Student("jack", 15);
Student s4 = new Student("jack", 15);
s3.equals(s4);

包装类

基本数据类型对应的引用数据类型

整数缓冲区

Java预先创建了256个常用的整数包装类型对象(就是int类型, 创建在里)

类型转换

装箱基本类型转换成引用类型过程

拆箱引用类型转换为基本类型过程

装箱与拆箱

XXX包装类

xxx八大基本类型

装箱:

  1. new Integer(int num)

  2. XXX.valueOf(String str或int i),(返回XXX)

拆箱:

  1. XXX对象.xxxValue(),包装类 ==> xxx
int num = 15;

Integer i1 = new Integer(num);  // 构造器
Integer i2 = Integer.valueOf(num); // 装箱


Integer i3 = new Integer(100);
int num2 = i3.intValue(); // 拆箱

// JDK1.5之后,提供自动装箱和拆箱
//自动装箱
Integer i4 = 25;
//自动拆箱
int age2 = i4;

基本类型与String类的转换

基本类型 --> 字符串

  1. "" + num;

  2. 包装类.toString(基本类型)

字符串 --> 基本类型

  1. 包装类.parse基本类型(str)
// 1. 基本类型 ==> 字符串
int n = 100;

// 1.1使用+号
String s1 = n +"";

// 1.2使用Integer的toString()方法
String s2 = Integer.toString(n);


// 2. 字符串 ==> 基本类型
String str = "140";

// 使用Integer.parseXXX();
int n2 = Integer.parseInt(str);

// boolean字符串形式转成基本类型,"true --> true(非"true"或"false",结果总为false)
String str2 = "true";
boolean b = Boolean.parseBoolean(str2);

String类

String类本质就是char[]数组

构造方法

  1. String name = "";

  2. new String("");

特点:

  • 字符串常量,创建后不可改变

  • 字面值保存在字符串池中可共享

  • 字符串重新赋值,在方法区字符串池重新开辟空间

String name = "hello";  // "hello"常量存储在字符串池中,
name = "zhangsan"; // "zhangsan"赋值给变量name,字符串赋值,没修改数据,而是在方法区的字符串池里重新开辟空间
String name2 = "zhangsan";


// 会在栈开辟空间,指向堆,堆指向方法区(即堆,方法区都开辟了空间)
String str = new String("java");
String str2 = new String("java");
System.out.println(str == str2); // 比较的栈的地址不同

String的使用方法

  1. length() 返回长度

  2. charAt() 据下标获取字符

  3. contains() 当前字符串是否含str


// 字符串方法的使用
// 1 length() 返回长度
// 2 charAt() 据下标获取字符
// 3 contains() 当前字符串是否包含str

String s = "java是世界上java最好的语言,java真香 ";
System.out.println(s.length());
System.out.println(s.charAt(5));
System.out.println(s.contains("最好的"));


  1. toCharArray() 返回字符串对应的数组

  2. indexOf()

  3. lastIndexOf()


// 4 toCharArray() 返回字符串对应的数组
// 5 indexOf()
// 6 lastIndexOf()

System.out.println(Arrays.toString(s.toCharArray()));
System.out.println(s.indexOf("java"));
System.out.println(s.indexOf("java",4));   // 从下标4开始检索
System.out.println(s.lastIndexOf("java"));
  1. trim() 去掉字符串前后空格

  2. toUpperCase():字母全变成大写 toLowerCase():全变小写

  3. endWith(str):以什么结束 startsWith(str):以什么开始

System.out.println("======字符串方法的使用3======");
// 7 trim() 去掉字符串前后的空格
// 8 toUpperCase():字母全变成大写  toLowerCase():全变小写
// 9 endWith(str):以什么结束  startsWith(str):以什么开始

String s2 = "   hello world   ";
System.out.println(s2.trim());
System.out.println(s2.toUpperCase());
System.out.println(s2.toLowerCase());
String fileName = "hello.java";
System.out.println(fileName.endsWith(".java"));
System.out.println(fileName.startsWith("hello."));

  1. replace(char old, char new) 新字符或字符串替代旧字符或字符串

  2. split() 对字符串进行拆分

  3. equalsIgnoreCase() 忽略大小写比较

  4. compareTo() 比第一个字符的大小,字符一致比长度

// 10 replace(char old, char new) 新字符或字符串替代旧字符或字符串
// 11 split() 对字符串进行拆分

System.out.println(s.replace("java","php"));
String s3 = "java is the best language";
String[] arr = s3.split("[ ,]+");  // 正则表达式
// 遍历arr数组
for(String string : arr){
    System.out.println(string);
}

// 补充两个方法equals, compare() 比较大小
String s4 = "hello";
String s5 = "Hello";
System.out.println(s4.equalsIgnoreCase(s5));

String s6 = "abc"; // 97
String s7 = "xyz"; // 120
System.out.println(s6.compareTo(s7));

String s8 = "abc";
String s9 = "abcxyz";
System.out.println(s8.compareTo(s9));  // 比长度

StringBuffer和StringBuilder

可变String

与String比,1.效率更高,2.更节省内存

StringBuffer方法:

  1. append()

  2. insert(offset, str)

  3. replace(start, end, str) start, end为原字符串的始末

  4. delete(start, end)

StringBuilder方法同理(推荐使用)

StringBuffer sb = new StringBuffer();
//1. append() 追加
sb.append("java");
System.out.println(sb.toString());

// 2. insert()
sb.insert(1,"我在最前面");
System.out.println(sb);

// 3. replace()
sb.replace(0,4,"hello");
System.out.println(sb);

// 4. delete()删除
sb.delete(0,4);
System.out.println(sb);

// 5. 清空
sb.delete(0,sb.length());
System.out.println(sb.length());

BigDecimal类

大浮点数精确计算

构造方法:new BigDecimal("");

加减乘除保留n位小数

  1. add()

  2. subtract()

  3. multiply()

  4. divide()

  5. (val: , scale:2, BigDecimal.ROUND_HALF_UP) 四舍五入保留2位


double result = (1.4 - 0.5) / 0.9;
System.out.println(result);

// BigDecimal,大浮点数精确计算
BigDecimal bd1 = new BigDecimal("1.0");
BigDecimal bd2 = new BigDecimal("0.9");

// 减法
BigDecimal r1 = bd1.subtract(bd2);
System.out.println(r1);

// 加法
System.out.println(bd1.add(bd2));

// 乘法
System.out.println(bd1.multiply(bd2));

// 除法
BigDecimal r2 = new BigDecimal("1.4")
        .subtract(new BigDecimal("0.5"))
        .divide(new BigDecimal("0.9"));

System.out.println(r2);

// 保留几位小数
BigDecimal r3 = new BigDecimal("10")
        .divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP); // 四舍五入

Date

构造器

new Date();

方法

  1. toString(); 返回UTC时间

  2. toLocalString(); 返回当地时间(已过时)

  3. date1.after(date2) date1是在date2之后?(返回boolean)

  4. before()

  5. compareTo() -1 0 1,只有三个值

//1 创建Date对象
Date d1 = new Date();  // 获取当前时间

//今天
System.out.println(d1.toString());  // 返回UTC时间
System.out.println(d1.toLocaleString());

//昨天
Date d2 = new Date(d1.getTime() - (60*60*24*1000));
System.out.println(d2.toLocaleString());

// 2方法after before
System.out.println(d1.after(d2));
System.out.println(d1.before(d2));

//比较 compareTo();
System.out.println(d1.compareTo(d2));  // -1 0 1,只有三个值

System.out.println(d1.equals(d2));

Calendar

Calendar 构造器protected

构造对象:

Calendar.getInstance();

方法

  1. getTime() 获取时间

  2. get(int field) 获取年月日

  3. set(Calendar.常量, int field) field,要设置的值

  4. add(Calendar.常量, int num) 加为+,减为-

// 1创建Calendar对象
Calendar calendar = Calendar.getInstance();

System.out.println(calendar.getTimeInMillis()); // 获取时间毫秒值

//2获取时间信息
// 获取年
int year = calendar.get(Calendar.YEAR);

//月
int month = calendar.get(Calendar.MONTH); // 从0为1月,以此类推

//日
int day = calendar.get(Calendar.DAY_OF_MONTH); // Date 日期

//小时
int hour = calendar.get(Calendar.HOUR_OF_DAY); // HOUR:12小时制,HOUR_OF_DAY:24小时制

//分钟
int minute = calendar.get(Calendar.MINUTE);

//秒
int second = calendar.get(Calendar.SECOND);

System.out.println(year + "年" + (month + 1) + "月" + day + "日" + hour + ":" + minute + ":" + second);

//3修改时间
Calendar calendar2 = Calendar.getInstance();

calendar2.set(Calendar.DAY_OF_MONTH,5); // 设置的日期

//4add方法修改时间
calendar2.add(Calendar.HOUR, -1);  // 时间单位,加减

//5补充方法
int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println("最大天数:" + max);
System.out.println("最小天数:" + min);

SimpleDateFormat ( 使用较多)

其字母有特殊含义(可查表)

G 年代标志符
y 年
M 月
d 日
h 在上午或下午 (1~12)
H 在一天中 (0~23)
m 分
s 秒
S 毫秒
E 星期
D 一年中的第几天
F 一月中第几个星期几
w 一年中第几个星期
W 一月中第几个星期
a 上午 / 下午 标记符
k 时 在一天中 (1~24)
K 时 在上午或下午 (0~11)
z 时区

创建时间

  1. new SimpleDateFormat(); 设置格式

  2. new Date(); 新建时间

  3. format(Date date); 格式化时间

解析时间

  1. parse(); 解析时间,Date时间格式与sdf对象格式一致才能解析
// 1 创建一个SimpleDateFormat对象 y年 M月
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

// 2 创建一个Date
Date date = new Date();

// 3 格式化date(把日期转成字符串)
String str = sdf.format(date);

//解析 (把字符串转成日期)
Date date2 = sdf.parse("2014/04/19");  // 格式与sdf一致才能解析

System类

  1. System.arraycopy(src, srcPos, dest, destPos, length) 数组复制

  2. System.currentTimeMillis() 获取当前时间

  3. System.gc() garbage collection:垃圾回收器

  4. System.exit() 退出JVM

// 1 数组复制
//arraycopy: 数组的复制
//src:源数组
//srcPos:从哪个位置开始赋值
//dest:目标数组
//destPos:目标数组的位置
//length:复制的长度
int[] arr = {20,25,35,53,24,5,19,2};
int[] dest = new int[8];
System.arraycopy(arr,4,dest,2,4);

// 2 获取时间
//Arrays.copyOf(original,newLength)使用System.arraycopy
long start = System.currentTimeMillis();
    // 程序块
long end = System.currentTimeMillis();
System.out.println("用时:" + (end - start) + "ms");

// 3 垃圾回收器
// 自写一个Student类
// System.gc(); 告诉垃圾回收器回收垃圾,多线程

new Student("张三", 10);
Student s1 = new Student("李四", 10);
new Student("王五", 10);

System.gc();  // 告诉垃圾回收器回收

// 4 退出JVM
System.exit(0);
posted @ 2021-10-22 23:41  Coline1  阅读(17)  评论(0编辑  收藏  举报