Java进阶01常用类
Java进阶01常用类
包装类



package com.mingmao.commonclass.wrapperclass;
import org.omg.PortableInterceptor.INACTIVE;
public class Test {
public static void main(String[] args) {
//调用Integer类的属性
System.out.println(Integer.MAX_VALUE);//返回int类型数据的最大值
System.out.println(Integer.MIN_VALUE);//返回int类型数据的最小值
//物极必反
System.out.println(Integer.MAX_VALUE+1);//返回int类型数据的最小值
System.out.println(Integer.MIN_VALUE -1);//返回int类型数据的最大值
//创建Integer类的对象
Integer i1=new Integer(12);//int-->Integer
//Integer i2=new Integer("abc");//抛出异常
Integer i2=new Integer("12");//可以传能转换成int类型的字符串,String-->Integer
//int-->Integer其他方法:自动装箱
Integer i3=12;//int-->Integer
//自动拆箱
int i4=i3;//Integer-->int
//调用Integer的方法
//compareTo
System.out.println(i1.compareTo(i2));//0:x=y->0,x<y->-1,x>y->1
//equals
System.out.println(i1.equals(i2));//true 比较值
System.out.println(i1 == i2);//false 比较地址
//自动装箱的比较
Integer i5=13;
Integer i6=13;
System.out.println(i5==i6);//true byte类型范围内-128-127,地址相同
Integer i7=129;
Integer i8=129;
System.out.println(i7==i8);//false byte类型范围外,地址不同
//intValue
System.out.println(i8.intValue());//返回int类型
//parseInt
System.out.println(Integer.parseInt("129"));//返回int类型
//toString
System.out.println(i8.toString());//转换成String类型
//valueOf
Integer.valueOf(129);//int类型转换成Integer,与自动装箱一致
}
}
String
package com.mingmao.commonclass.stringcode;
public class Test {
public static void main(String[] args) {
String s1="你好,2021!";
System.out.println(s1);
//创建对象
String s2="abc";
String s3=new String();
String s4=new String("abc");
String s5=new String(new char[] {'a','b','c'});
//输出数组长度
System.out.println(s1.length());
//判断是否是空数组
System.out.println(s3.isEmpty());
System.out.println(s2.isEmpty());
//输出字符串中第n个字符
System.out.println(s1.charAt(2));
//比较字符串的值
System.out.println(s2.equals(s4));//比较值
System.out.println(s2==s4);//比较地址
// 按字典顺序比较两个字符串。
String s6="abc";
String s7="abcdefg";
System.out.println(s6.compareTo(s7));//-4
//返回特定字符在字符串中的索引值
System.out.println(s7.indexOf('d'));//3
//返回指定索引的子字符串
System.out.println(s7.substring(2,5));
//拼接两个字符串
System.out.println(s6.concat(s7));
//替换字符串中的特定字符
System.out.println(s7.replace('a','h'));
//去除字符串头尾空格
String s9=" hjknmm ";
System.out.println(s9);
System.out.println(s9.trim());
//int转String
System.out.println(String.valueOf(12));
}
}
String内存加反编译验证
package com.mingmao.commonclass.stringcode;
public class Test1 {
public static void main(String[] args) {
String s1="abc";
String s2="a"+"b"+"c";
String s3="abc"+"";
String s4=s1+"";
String s5=new String("abc");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//true
System.out.println(s1==s4);//false
System.out.println(s1==s5);//false
}
}

StringBuilder
空构造器:长度16

数组的扩容

package com.mingmao.commonclass.stringbuildercode;
public class Test {
public static void main(String[] args) {
StringBuilder sb1=new StringBuilder();//可变字符串 长度16,count=0
StringBuilder sb2=new StringBuilder(23);
StringBuilder sb3=new StringBuilder("abc");//长度19,count=3
System.out.println(sb1);
System.out.println(sb2);
System.out.println(sb3);
//增
System.out.println(sb3.append("defyuioopjkl"));
//删
System.out.println(sb3.delete(3,6));
System.out.println(sb3.deleteCharAt(3));
//改
System.out.println(sb3.insert(3,"aaa"));
System.out.println(sb3.replace(3,5,"我好累"));
sb3.setCharAt(3,'!');
System.out.println(sb3);
//查
System.out.println(sb3.substring(3,6));
}
}
StringBuffer
package com.mingmao.commonclass.stringbuffercode;
public class Test {
public static void main(String[] args) {
StringBuffer sb3=new StringBuffer("abc");//长度19,count=3
System.out.println(sb3);
//增
System.out.println(sb3.append("defyuioopjkl"));
//删
System.out.println(sb3.delete(3,6));
System.out.println(sb3.deleteCharAt(3));
//改
System.out.println(sb3.insert(3,"aaa"));
System.out.println(sb3.replace(3,5,"我好累"));
sb3.setCharAt(3,'!');
System.out.println(sb3);
//查
System.out.println(sb3.substring(3,6));
}
}
StringBuilder与StringBuffer的区别

模拟集合ArrayList
package com.mingmao.commonclass.arraylist;
import java.util.Arrays;
public class MyCollection {
//底层是一个数组--Object[]
Object[] value;
//数组中被占用的个数
int size;
//定义空构造器
public MyCollection() {
//value=new Object[16];
this(16);
}
//定义有参构造器
public MyCollection(int num) {
value=new Object[num];
}
//定义增方法
public MyCollection add(Object obj){
value[size]=obj;
size++;
//数组扩容
if(size>value.length-1){
Object[] obj2=new Object[value.length*2+2];
for (int i =0 ;i <=value.length-1; i++) {
obj2[i]=value[i];
}
value=obj2;
}
return this;
}
//定义取方法
public Object get(int index){
if(index<0 || index>=size){
throw new RuntimeException("超出边界");
}
return value[index];
}
//定义获取长度的方法
public int size(){
return size;
}
//重写toString方法
@Override
public String toString() {
StringBuilder sb=new StringBuilder("[");
for (int i = 0; i <size-1; i++) {
sb.append(value[i]+",");
}
sb.append(value[size-1]);
sb.append("]");
return sb.toString();
}
public static void main(String[] args) {
//创建对象
MyCollection mc=new MyCollection();
MyCollection mc2=new MyCollection(23);
//调用方法
mc.add("abc");
mc.add(123);
mc.add(new Student("lili",18));
System.out.println(mc.get(2));
for (int i = 0; i <mc.size(); i++) {
System.out.print(mc.get(i)+" ");
}
System.out.println();
//System.out.println(mc.get(-2));
System.out.println(mc.toString());
mc.add(23).add("po");
System.out.println(mc.toString());
}
}
package com.mingmao.commonclass.arraylist;
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
时间处理类
Date
package com.mingmao.commonclass.timeprocessingclass;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date d1=new Date();
//打印当前时间
System.out.println(d1); //Sat Sep 11 14:21:24 CST 2021=GMT+8
System.out.println(d1.toGMTString());//11 Sep 2021 06:21:24 GMT 有中划线的方法是过期方法,建议不用
System.out.println(d1.toLocaleString());//2021-9-11 14:26:06
System.out.println(d1.getYear());//121 +1900=2021
System.out.println(d1.getMonth());//8 +1=9
System.out.println(d1.getDate());//11
System.out.println(d1.getDay());//6 星期
System.out.println(d1.getTime());//1631341966992 距离1970年1月1号0:0:0的毫秒数
System.out.println(System.currentTimeMillis());//1631341967039 同上,常用,不用创建对象
//java.sql.data
java.sql.Date sqlDate=new java.sql.Date(45678909008L);
java.sql.Date sqlDate1=new java.sql.Date(1631341967039L);
System.out.println(sqlDate);//1971-06-14
System.out.println(sqlDate1);//2021-09-11
System.out.println(java.sql.Date.valueOf("2019-01-08"));//2019-01-08
//java.sql.data与java.util.Date相互转换
//sql-->util 子类转父类
Date ud=sqlDate;
System.out.println(ud);//1971-06-14
//util-->sql
java.sql.Date sd=new java.sql.Date(new Date().getTime());
System.out.println(sd);//2021-09-11
//java.sql.Time
Time t=new Time(100L);
Time t2=new Time(new Date().getTime());
System.out.println(t);//08:00:00
System.out.println(t.toGMTString());//1 Jan 1970 00:00:00 GMT
System.out.println(t2);//14:52:37
System.out.println(t2.toGMTString());//11 Sep 2021 06:52:37 GMT
//java.sql.Timestamp 时间戳
Timestamp ts=new Timestamp(new Date().getTime());
System.out.println(ts);//2021-09-11 14:54:39.768
}
}
时间格式

package com.mingmao.commonclass.timeprocessingclass;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Test2 {
public static void main(String[] args) {
//String--> Date
//方法一:字符串格式必须是yyyy-mm--dd
Date d=java.sql.Date.valueOf("2019-1-8");
System.out.println(d);//2019-01-08
//方法二:日期格式化类
DateFormat df=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");//自己给定输出格式
try {
System.out.println(df.parse("2019-1-8 12:30:21"));//Tue Jan 08 12:30:21 CST 2019
} catch (ParseException e) {
e.printStackTrace();
} finally {
}
//Date-->String
System.out.println(df.format(new Date()));//此处打印指定的输出格式 2021-15-11 15:15:13
}
}
Calendar
Calendar很强大,但是用得少!
package com.mingmao.commonclass.timeprocessingclass;
import java.util.Calendar;
import java.util.GregorianCalendar;
public class Test3 {
public static void main(String[] args) {
//创建一个日历
Calendar cal=Calendar.getInstance();
Calendar cal2=new GregorianCalendar();
System.out.println(cal);
/*
java.util.GregorianCalendar[
time=1631345063783,
areFieldsSet=true,
areAllFieldsSet=true,
lenient=true,
zone=sun.util.calendar.ZoneInfo[
id="Asia/Shanghai",
offset=28800000,
dstSavings=0,
useDaylight=false,
transitions=31,
lastRule=null],
firstDayOfWeek=1,
minimalDaysInFirstWeek=1,ERA=1,
YEAR=2021,MONTH=8,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=11,DAY_OF_YEAR=254,DAY_OF_WEEK=7,
DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=24,SECOND=23,MILLISECOND=783,
ZONE_OFFSET=28800000,DST_OFFSET=0]
*/
//常用方法
//读取get
System.out.println(cal.get(Calendar.YEAR));//2021
System.out.println(cal.get(Calendar.MONTH));//8 +1=9
System.out.println(cal.get(Calendar.DATE));//11
System.out.println(cal.get(Calendar.DAY_OF_WEEK));//7 周日是第一天
System.out.println(cal.getActualMaximum(Calendar.DATE));//30 这月最大的一天
System.out.println(cal.getActualMaximum(Calendar.MONTH));//11 +1=12从0开始
//设置set
cal.set(Calendar.DATE,16);
cal.set(Calendar.MONTH,3);
cal.set(Calendar.YEAR,2009);
System.out.println(cal);
/*
java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,
YEAR=2009,MONTH=3,WEEK_OF_YEAR=37,WEEK_OF_MONTH=2,DAY_OF_MONTH=16,DAY_OF_YEAR=254,DAY_OF_WEEK=7,
DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=3,HOUR_OF_DAY=15,MINUTE=35,SECOND=35,MILLISECOND=39,ZONE_OFFSET=28800000,DST_OFFSET=0]
*/
//String-->Calendar
cal.setTime(java.sql.Date.valueOf("2019-1-8"));
System.out.println(cal);
}
}
练习:输入日期,给出日历

package com.mingmao.commonclass.timeprocessingclass;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class CanlendarCode {
public void calendar(){
Scanner s=new Scanner(System.in);
System.out.print("请输入你想要查看的日期--(格式例如:2016-10-21):");
String date=s.nextLine();
System.out.println();
if(!(date.isEmpty())){
printCalendar(date);
}
}
public void printCalendar(String date){
System.out.println("日"+"\t"+"一"+"\t"+"二"+"\t"+"三"+"\t"+"四"+"\t"+"五"+"\t"+"六");
//获取输入月份1号是星期几
Date d=java.sql.Date.valueOf(date);
int year=d.getYear()+1900;
int month=d.getMonth()+1;
int day=d.getDate();
Date d2=java.sql.Date.valueOf(year+"-"+month+"-"+1);
int initalweek=d2.getDay();
//获取输入月份的天数
Calendar cal=Calendar.getInstance();
int daynum=cal.getActualMaximum(Calendar.DATE);
int num=0;
//输出前面的空格
if(initalweek<=6 && initalweek>=1){
for (int i = 0; i <initalweek; i++) {
System.out.print("\t");
num++;
}
}
//输出日历
for (int i = 1; i <=daynum; i++) {
if(num%7==0){
System.out.println();
}
if(i==day){
System.out.print(i+"*"+"\t");
}else{
System.out.print(i+"\t");
}
num++;
}
}
public static void main(String[] args) {
CanlendarCode calc=new CanlendarCode();
calc.calendar();
}
}
枚举
值固定的时候使用枚举
package com.mingmao.commonclass.timeprocessingclass;
public enum Gender {
男,女;
}
package com.mingmao.commonclass.timeprocessingclass;
public class Person {
private String name;
private int age;
//private String sex;
private Gender sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Gender getSex() {
return sex;
}
public Person() {
}
public Person(String name, int age, Gender sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void setSex(Gender sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
'}';
}
public static void main(String[] args) {
Person p=new Person();
p.setName("lili");
p.setAge(18);
p.setSex(Gender.女);
System.out.println(p);
Person p2=new Person("nana",21,Gender.女);
System.out.println(p2);
//switch后面可以放枚举类型
Gender sex=Gender.男;
switch (sex){
case 男:
System.out.println("这是男孩");
break;
case 女:
System.out.println("这是女孩");
break;
default:
break;
}
}
}
Math类
package com.mingmao.commonclass.mathandrandom;
//静态导包
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
//Math类
//属性
System.out.println(Math.PI);
//方法,静态导包后调用时不用加Math.
System.out.println(Math.pow(3.0,2.0));//x^y
System.out.println(Math.sqrt(9.0));//开平方
System.out.println(ceil(9.1));//向上取整
System.out.println(floor(9.1));//向下取整
System.out.println(round(5.3));//四舍五入
System.out.println(random());//随机数0.0<=x<1.0
System.out.println(abs(-9.8));//绝对值
System.out.println(min(9.0,18.8));//取小
System.out.println(max(9.0,18.8));//取大
}
}
Random类
package com.mingmao.commonclass.mathandrandom;
import java.util.Random;
public class Test1 {
public static void main(String[] args) {
System.out.println(Math.random());//[0.0,1.0)之间的随机数
//Random类
//有参
Random r=new Random(10);//随机数种子为10,所以每次产生的随机数一样
for (int i = 1; i <=3; i++) {
System.out.println(r.nextInt());
}
System.out.println("---------------------------------------------------");
Random r1=new Random(8);
for (int i = 1; i <=3; i++) {
System.out.println(r1.nextInt());
}
System.out.println("---------------------------------------------------");
Random r2=new Random(System.currentTimeMillis());//产生变化的随机数
for (int i = 1; i <=3; i++) {
System.out.println(r2.nextInt());
}
//无参
System.out.println("---------------------------------------------------");
Random r3=new Random();//产生变化的随机数
for (int i = 1; i <=3; i++) {
System.out.println(r3.nextBoolean());
}
System.out.println("---------------------------------------------------");
Random r4=new Random();//产生变化的随机数
for (int i = 1; i <=3; i++) {
System.out.println(r4.nextDouble());//[0.0,1.0)
}
System.out.println("---------------------------------------------------");
for (int i = 1; i <=3; i++) {
System.out.println(r4.nextInt(10));//[0,10)
}
}
}
学习视频
File类
package com.mingmao.commonclass.file;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.SimpleTimeZone;
public class Test {
public static void main(String[] args) {
File f=new File("D:\\file\\javatest\\JavaSE\\java进阶\\src\\com\\mingmao\\commonclass\\file\\1.jpg");
//判断文件状态
System.out.println(f.isDirectory());//是否是文件夹 false
System.out.println(f.isFile());//是否是文件 true
System.out.println(f.exists());//文件是否存在 true
System.out.println(f.canRead());//文件是否可读 true
System.out.println(f.canWrite());//文件是否可写 true
System.out.println(f.isHidden());//是否是隐藏状态 false
//获取文件信息
System.out.println(f.getAbsolutePath());//获取绝对路径
System.out.println(f.getPath());//获取相对路径,一般用相对路径,与盘符无关
System.out.println(f.getName());//获取文件名称
System.out.println(f.length());//获取文件长度,字节
System.out.println(f.lastModified());//获取最后一次修改时间 1631353336943返回的是毫秒
System.out.println(new Date(f.lastModified()));//Sat Sep 11 17:42:16 CST 2021
SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(s.format(new Date(f.lastModified())));//2021-09-11 17:42:16
}
}
学习视频
Object类
每个类都直接或者间接的继承Object类
hashCode方法和getClass方法
package com.mingmao.commonclass.object;
public class Student {
}
package com.mingmao.commonclass.object;
public class StudentTest {
public static void main(String[] args) {
//hashCode方法
Student s1=new Student();
System.out.println(s1.hashCode());//460141958,根据地址值根据哈希算法换算成的一个整数值
Student s2=new Student();
System.out.println(s2.hashCode());//1163157884
Student s3=s1;
System.out.println(s3.hashCode());//460141958,与s1哈希值一样
//getClass方法
//返回运行时类,Class类有一个方法getName,返回对象名
Student s4=new Student();
Class c=s4.getClass();
System.out.println(c.getName());//com.mingmao.commonclass.object.Student
//链式编程
System.out.println(s4.getClass().getName());//com.mingmao.commonclass.object.Student
}
}
toString方法
package com.mingmao.commonclass.object.tostring;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
package com.mingmao.commonclass.object.tostring;
public class StudentTest {
public static void main(String[] args) {
//toString 方法 返回对象的字符串表示
//建议所有子类都重写此方法
//toString等价于this.getClass().getName()+@+Integer.toHexString(this.hashCode)
Student s1=new Student();
//Object类的toString方法
System.out.println(s1.toString());//com.mingmao.commonclass.object.tostring.Student@1b6d3586,十六进制
System.out.println(s1.getClass().getName()+"@"+Integer.toHexString(s1.hashCode()));
//com.mingmao.commonclass.object.tostring.Student@1b6d3586,十六进制
//重写的toString方法
System.out.println(s1.toString());//Student{name='null', age=0}
//直接输出对象名称相当于调用了toString方法
System.out.println(s1);//Student{name='null', age=0}
}
}
equals方法
package com.mingmao.commonclass.object.equals;
import java.util.Objects;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
}
package com.mingmao.commonclass.object.equals;
public class StudentTest {
public static void main(String[] args) {
//==比较
//基本数据类型:比较值
//引用数据类型:比较地址
Student s1=new Student("lili",13);
Student s2=new Student("lili",13);
Student s3=s1;
System.out.println(s1==s2);//false
System.out.println(s3==s1);//true
System.out.println(s2==s3);//false
//equals方法
//默认情况下与==一样,但是只能比较引用数据类型,源码如下:
/*public boolean equals(Object obj) {
return (this == obj);
}*/
System.out.println(s1.equals(s2));//false
System.out.println(s1.equals(s3));//true
System.out.println(s2.equals(s3));//false
//比较地址值一般意义不大,所以我们要重写equals方法
//调用重写后equals方法
System.out.println(s1.equals(s2));//true
System.out.println(s1.equals(s3));//true
System.out.println(s2.equals(s3));//true
}
}
finalize和clone方法
package com.mingmao.commonclass.object.finalizeandclone;
import java.util.Objects;
public class Student implements Cloneable{
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return age == student.age &&
Objects.equals(name, student.name);
}
}
package com.mingmao.commonclass.object.finalizeandclone;
import java.util.Objects;
public class StudentTest {
public static void main(String[] args) throws CloneNotSupportedException{
//finalize方法
//用于垃圾回收,但是什么时候回收不确定
//clone 创建并返回一个对象的副本
//需要重写
//克隆的对象与原对象地址不同
//重写时必须继承接口Cloneable 它是一个没有方法的接口,叫做标记接口,实现此接口才能实现对象的复制
Student s=new Student("lili",18);
Object obj= s.clone();
Student s2=(Student)obj;
System.out.println(s2);//Student{name='lili', age=18}
System.out.println(s2==s);//false
System.out.println(s2.equals(s));//true
//如下操作的对象与原对象地址相同
Student s3=s;
System.out.println(s3);//Student{name='lili', age=18}
System.out.println(s3==s);//true
System.out.println(s3.equals(s));//true
}
}

浙公网安备 33010602011771号