java基础
待补
前言
java中有众多封装好的包和类以供调用,这篇文章介绍一下一些常用的类。
1.包装类
包装类即把基本数据类型转换为对象进行管理,其内部提供了很多便捷的方法,以及常量(比如Integer中可使用MAX_VALUE获取int可表示的最大值)
1.1整形包装类
四大整形基础类型对应的包装类其内部的方法大致相同,区别只是封装不同类型的数据,所以这里仅用Integer举例即可。
1.1.1常用方法
转换方法
parseInt(String s)
将一个 String 转换为 int 类型的数值。
toString(int i)
将一个 int 值转换为 String。
toBinaryString(int i)
将一个 int 值转换为二进制的 String 表示。
toOctalString(int i)
将一个 int 值转换为八进制的 String 表示。
toHexString(int i)
将一个 int 值转换为十六进制的 String 表示。
比较方法
compare(int x, int y)
比较两个 int 值并返回它们的比较结果。
max(int a, int b)
返回两个 int 值中的最大值。
min(int a, int b)
返回两个 int 值中的最小值。
数值操作
sum(int a, int b)
返回两个 int 值的和。
reverse(int i)
将一个 int 值的位进行反转。
rotateLeft(int i, int distance)
将一个 int 值的位向左旋转。
rotateRight(int i, int distance)
将一个 int 值的位向右旋转。
bitCount(int i)
返回 int 值中设置的位数(即值为 1 的位)。
其他方法
valueOf(int i)
返回一个表示指定 int 值的 Integer 实例。
valueOf(String s)
返回一个表示指定 String 表示的 int 值的 Integer 实例。
parseInt(String s, int radix)
将一个 String 转换为 int 类型的数值,其中 radix 指定了基数。
1.2浮点数包装类
两种浮点数的包装类型方法大致相同,这里以Double为例。
1.2.1常用方法
转换方法
parseDouble(String s)
将一个 String 转换为 double 类型的数值。
toString(double d)
将一个 double 值转换为 String。
valueOf(double d)
返回一个表示指定 double 值的 Double 实例。
valueOf(String s)
返回一个表示指定 String 表示的 double 值的 Double 实例。
数值操作
isNaN(double v)
判断给定的 double 值是否为 NaN (Not-a-Number)。
isInfinite(double v)
判断给定的 double 值是否为无穷大。
doubleToLongBits(double value)
将 double 值转换为其 IEEE 754 浮点表示的位序列。
longBitsToDouble(long bits)
将 IEEE 754 浮点表示的位序列转换为 double 值。
compare(double d1, double d2)
比较两个 double 值并返回它们的比较结果。
sum(double a, double b)
返回两个 double 值的和。
max(double a, double b)
返回两个 double 值中的最大值。
min(double a, double b)
返回两个 double 值中的最小值。
常量
Double.MAX_VALUE
最大的有限的 double 值。
Double.MIN_VALUE
最小的正数 double 值。
Double.NEGATIVE_INFINITY
负无穷大。
Double.POSITIVE_INFINITY
正无穷大。
Double.NaN
不是一个数字(NaN)。
1.3Boolean类
1.3.1常用方法
转换方法
parseBoolean(String s)
将一个 String 转换为布尔类型的数值。
toString(boolean b)
将一个布尔值转换为 String。
valueOf(boolean b)
返回一个表示指定布尔值的 Boolean 实例。
valueOf(String s)
返回一个表示指定 String 表示的布尔值的 Boolean 实例。
比较方法
equals(Object obj)
比较两个 Boolean 对象是否相等。
compareTo(Boolean anotherBoolean)
将此 Boolean 实例与另一个 Boolean 实例进行比较。
其他方法
booleanValue()
将 Boolean 对象的值转换为基本类型的布尔值。
hashCode()
返回此 Boolean 对象的哈希码。
toString()
返回 Boolean 对象的字符串表示。
getBoolean(String name)
返回指定系统属性的布尔值,如果该属性不存在,则返回默认值 false。
1.4Character类
字符类型对应包装类。
1.5Number类
所有数字类型的封装类有一个共同的父类,即Number类
1.6包装类缓存机制
Java 包装类的缓存机制,是在Java 5中引入的一个有助于节省内存、提高性能的功能。
Java 基本类型的包装类的大部分都提供了对象的缓存,实现方式是在类初始化时提前创建好会频繁使用的包装类对象,当需要使用某个包装类的对象时,如果该对象包装的值在缓存的范围内,就返回缓存的对象,否则就创建新的对象并返回。
实验:
Integer a=100;
Integer b=100;
System.out.println(a==b);
//输出true,即当值在缓存区间时,获取的是同一个包装类对象
Integer a=130;
Integer b=130;
System.out.println(a==b);
//输出False,即当值超出缓存范围时,会单独创建对象存储。
补充:如果是使用构造器来获取包装类对象,则一定是新建出来的对象(即使值在缓存范围内)
2.数字处理
2.1Math类
math类提供很多数学函数方法,比如三角函数,指数函数等,可根据需要使用。
常用方法:
求绝对值 Math.abs(-10) --> 10
四舍五入取整 Math.round(2.6) --> 3
求两个数最大值 Math.max(2,10) --> 10
求两个数最小值 Math.min(2,10) --> 2
随机数 Math.random() --> 0 ~ 1之间任意小数
求平方根 Math.sqrt(16) – > 4
求幂 Math.pow(2,3) – > 8
2.2Random类
该类用于生成各种类型的随机数
该类生成的随机数是伪随机数(使用一个公式来生成随机数字,公式是固定的,只是传入的值在改变所以生成的随机数改变,也就是说如果提前知道传入值,那最终生成的结果也是一定的),一般是以运行时当前时间为种子生成随机数,但也可用在创建Random对象时自行传入种子,传入相同的种子其生成的随机数是一致的,所以默认情况下该类使用当前时间作为种子,因为不会存在相同的时间值。(但运行速度太快也可能出现相同随机数)。
3.System类
该类提供系统层面的操作方法,这些方法都是静态方法,且该类被final修饰(无法被继承)
3.1常用方法
系统属性
getProperties()
返回一个包含当前系统属性的 Properties 对象。
getProperty(String key)
返回与指定键关联的系统属性的字符串值。
setProperty(String key, String value)
设置系统属性。
输入/输出流
in, out, err
分别提供对标准输入、标准输出和标准错误输出流的访问。
垃圾回收
gc()
请求 JVM 执行垃圾回收。
线程相关
currentTimeMillis()
返回当前时间的毫秒数,常用于计时。
nanoTime()
返回当前时间的纳秒数,用于高精度计时。
安全退出
exit(int status)
终止当前正在运行的 Java 虚拟机,status 参数表示退出状态码。
数组拷贝
arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
将数组的一部分复制到另一个数组。
线程挂起
Thread.sleep(long millis)
让当前线程暂停执行指定的毫秒数。
环境变量
getenv(String name)
返回指定名称的环境变量的值。
线程堆栈跟踪
identityHashCode(Object obj)
返回对象的唯一标识符哈希码。
内存管理
totalMemory(), freeMemory(), maxMemory()
分别返回 JVM 的总内存、可用内存和最大可用内存。
线程本地随机数生成器
setSecurityManager(SecurityManager sm)
设置安全管理器,以控制对敏感系统操作的访问。
4.Scanner类
用于扫描用户输入
5.日期时间类
5.1Date类
可用用来表示日期时间,这里说的是java.util包下的Date类,不是java.sql下的。
5.1.1构造方法
要使用Date类,需要先使用构造器创建对象。
Date():分配一个 Date对象,并初始化,以便它代表它被分配的时间,精确到毫秒
Date(long date):分配一个 Date对象,并将其初始化为表示从标准基准时间起指定的毫秒数
5.1.2常用方法
getTime():获取的是日期对象从1970年1月1日 00:00:00到现在的毫秒值
setTime(long date):通过毫秒值设置时间
toString():转换为字符串,格式如:Mon Jun 20 18:31:56 CST 2022
toLocaleString():转换为字符串,格式如:2022年6月20日 下午6:32:44
//今天的时间
Date date1 = new Date();
System.out.println(date1.toString());//打印日期
//输出结果:Mon Jun 20 18:31:56 CST 2022
System.out.println(date.toLocaleString());//打印日期,此方法虽已为过时的方法,但是比toString看起来更符合我们日常。
//输出结果:2022年6月20日 下午6:32:44
//昨天的时间
Date date2 = new Date(date1.getTime()-(60*60*24*1000)); //getTime() 返回从1970年1月1日到现在的毫秒数。
//after、before 方法
boolean b1 = date1.after(date2); //返回true 表示 date1 在 date2 后面
//compareTo方法
int d=date2.compareTo(date1);//返回-1表示date2比date小;1表示date2比date大;0表示date2和date一样大。
//equals方法
//比较是否相等 返回true or false。
5.2SimpleDateFormat类(Date与String之间的转换)
该类可以使Date对象转换为自定义时间格式的字符串,也可以反过来解析字符串为Date对象。
5.2.1构造方法
public SimpleDateFormat():普通空参构造器
public SimpleDateFormat(String pattern):可以在创建对象时就指定使用的日期格式
5.2.2常用方法
public final String format(Date date):将日期格式化成日期/时间字符串
public Date parse(String source):从给定字符串的开始解析文本以生成日期
public class SimpleDateFormatDemo {
public static void main(String[] args) throws ParseException {
//格式化:从 Date 到 String
Date d = new Date();
// SimpleDateFormat sdf = new SimpleDateFormat();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
String s = sdf.format(d);
System.out.println(s);
System.out.println("--------");
//从 String 到 Date
String ss = "2048-08-09 11:11:11";
//ParseException
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dd = sdf2.parse(ss);
System.out.println(dd);
}
}
5.2.3格式指定
SimpleDateFormat 的日期时间格式字符串是由一系列的模式字母组成的。这些模式字母代表日期时间的不同部分,如年、月、日、小时、分钟、秒等。下面是一些常见的模式字母:
y:年份(例如,“yy” 表示年份的后两位,“yyyy” 表示完整的年份)。
M:月份(1 到 12 或 01 到 12)。
d:日期(1 到 31 或 01 到 31)。
H:小时(0 到 23 或 00 到 23)。
h:小时(1 到 12 或 01 到 12)。
m:分钟(0 到 59或00到59)。
s:秒(0 到 59 或 00 到 59)。
S:毫秒。
你可以根据需要组合这些模式字母来创建自定义的日期时间格式。例如,“yyyy-MM-dd HH:mm:ss” 表示包含年、月、日、小时、分钟和秒的日期时间格式。
5.3Calendar类
是一个抽象类,作为上述Date类的替代方案(因为Date类在设计时没考虑国际化,所以很多方法现在来看过时了)。
常用方法:
Calendar calendar = Calendar.getInstance(); //静态方法
System.out.println(calendar.getTime().toLocaleString());//输出现在的时间
System.out.println(calendar.getTimeInMillis()); //返回1970年1月1日到现在的毫秒数
//获取时间信息
int year = calendar.get(Calendar.YEAR); //月MONTH 天: DAY_OF_MONTH 小时: HOUR_OF_DAY(24)HOUR12(12) 分钟:MINUTE 秒:SECOND。
//其中MONTH 范围是0-11,所以用的时候MONTH+1。
//修改时间
Calendar calendar2 = Calendar.getInstance()
calendar2.set(Calendar.DAY_OF_MONTH,5);//表示将天数改为5.
//add方法修改时间
calendar2.add(Calendar.HOUR,1); // 加一个小时。
//获取当前月份中的最大天数和最小天数。
int max = calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
5.4jdk8新增时间类
LocalDate 表示日期(年月日)
LocalTime 表示时间(时分秒)
LocalDateTime 表示时间+ 日期 (年月日时分秒)
5.4.1LocalDateTime创建方法
public static LocalDateTime now():获取当前系统时间
public static LocalDateTime of (年, 月 , 日, 时, 分, 秒):使用指定年月日和时分秒初始化一个LocalDateTime对象
如
public class JDK8DateDemo2 {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
LocalDateTime localDateTime = LocalDateTime.of(2020, 11, 11, 11, 11, 11);
System.out.println(localDateTime);
}
}
5.4.2LocalDateTime获取方法
5.4.3LocalDateTime转换方法
5.4.4LocalDateTime格式化和解析
5.4.5LocalDateTime增加或者减少时间的方法
5.4.6LocalDateTime修改方法
5.5计算时间间隔
5.5.1Period
常用方法
示例:
/**
* 计算两个时间的间隔
*/
public class JDK8DateDemo9 {
public static void main(String[] args) {
//public static Period between(开始时间,结束时间) 计算两个"时间"的间隔
LocalDate localDate1 = LocalDate.of(2020, 1, 1);
LocalDate localDate2 = LocalDate.of(2048, 12, 12);
Period period = Period.between(localDate1, localDate2);
System.out.println(period);//P28Y11M11D
//public int getYears() 获得这段时间的年数
System.out.println(period.getYears());//28
//public int getMonths() 获得此期间的月数
System.out.println(period.getMonths());//11
//public int getDays() 获得此期间的天数
System.out.println(period.getDays());//11
//public long toTotalMonths() 获取此期间的总月数
System.out.println(period.toTotalMonths());//347
}
}
5.5.2Duration
常用方法
示例:
/**
* 计算两个时间的间隔
*/
public class JDK8DateDemo10 {
public static void main(String[] args) {
//public static Duration between(开始时间,结束时间) 计算两个“时间"的间隔
LocalDateTime localDateTime1 = LocalDateTime.of(2020, 1, 1, 13, 14, 15);
LocalDateTime localDateTime2 = LocalDateTime.of(2020, 1, 2, 11, 12, 13);
Duration duration = Duration.between(localDateTime1, localDateTime2);
System.out.println(duration);//PT21H57M58S
//public long toSeconds() 获得此时间间隔的秒
System.out.println(duration.toSeconds());//79078
//public int toMillis() 获得此时间间隔的毫秒
System.out.println(duration.toMillis());//79078000
//public int toNanos() 获得此时间间隔的纳秒
System.out.println(duration.toNanos());//79078000000000
}
}
6.Runtime类型
该类可以用来对当前运行环境进行一些简单的操作,比如执行本地命令(在window上执行cmd命令,linux上执行shell命令),查看运行时的内存情况等。
6.1获取Runtime实例
Runtime实例无法使用new创建,只可以使用**getRuntime()**方法获取
6.2执行本地命令
内部提供**exec()**方法来执行操作系统命令,甚至可以使用java程序调用windows中的shutdown指令来关闭计算机
6.3查看内存
获取Runtime对象后可以使用totalMemory()方法查看总内存,使用freeMemory()方法查看空闲内存。
总结
本文章介绍了一些java中常用的类库。