目录
1. 常用包
java.lang 默认包
java.io IO流
java.math 数学包
java.net 通讯包
java. sql 数据库包
java. text 文本包
java. util 工具包
常用类有String、Math、Date、Calendar、System、
2. String
字符串是常量,它们的值在创建之后不能更改,因为 String 对象是不可变的,所以可以共享。
两个字符串比较是否相等: str1.equals(str2);
两个字符拼接消耗大量资源,如图:
字符串拼接后,得到字符串"abcefg",字符串"abc"与"efg"成为垃圾!!!
解决方法:java. lang. StringBuffer类 或者 java. lang. StringBuilder类。
字符串缓冲区支持可变的字符串,构造内存大小可变的字符序列。
2.2 比较java. lang. StringBuffer类 和 java. lang. StringBuilder类:
java. lang. StringBuffer :线程安全(同步),效率低
java. lang. StringBuilder :非线程安全(不同步),效率高
stringBuilder. append (字符串) ; 链式语法连接字符串
stringBuilder. insert ( int index , String s ) ; 在指定位置插入指定数据
stringBuilder. toString ( ) ; 将字符序列转为字符串
2.3 实例
@Test
//使用可变字符串序列进行字符串拼接
public void test01() {
StringBuffer stringBuffer=new StringBuffer();
stringBuffer.append("abc").append("efg"); //字符串拼接
System.out.println(stringBuffer);
}
//字符串拼接
//方法一:常用方法
public String method01(String...args) {
//String...args----可变参数,按数组处理
String result01 = "";
for (String string : args) {
result01+=string;
}
return result01;
}
//方法二:使用StringBuffer
public StringBuffer method02(String...args) {
//String...args----可变参数,按数组处理
StringBuffer result02 = new StringBuffer();
for (String string : args) {
result02.append(string);
}
//StringBuffer与String非继承关系,返回值类型为StringBuffer
return result02;
}
@Test
//获得文件的格式
public void getFileFormat() {
String fileName = "hfuihicu.hchae-oka+vu.ufhvaioh.mp3";
//从最后一个"."字符分割字符串
String fileFormat = fileName.substring(fileName.lastIndexOf("."));
System.out.println(fileFormat); //.mp3
}
3. Math
java. lang. math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
常量:math. E math. PI
常用方法:
Math. random ( ) 返回一个0到1之间的浮点数
Random ( ). nextInt (整数) 返回一个0到给定整数之间的整数
Math. round ( double d ) 返回最接近参数的long
Math. round ( float f ) 返回最接近参数的int
Math. abs ( int a ) 绝对值
Math. max( int a , int b ) 两个数中较大值
Math. sqrt ( double d ) 算术平方根
Math. pow ( double a , double b ) a的b次幂
Math. ceil ( double d ) 向上取整
Math. floor ( double d ) 向下取整
实例:
public class MathTest {
@Test
public void test01() {
// 随机数生成
// Math.random生成[0,1)的double类型的数
System.out.println(Math.random());
System.out.println(new Random().nextDouble()); //功能同上
//生成[0,10)的整数
System.out.println((int)(Math.random()*10));
System.out.println(new Random().nextInt(10)); //功能同上
//四舍五入
System.out.println(Math.PI);
System.out.println(Math.round(Math.PI)); //Math.round()不保留小数
//四舍五入,保留3位小数,Math.PI=3.141592653589793
double temp=Math.PI*1000.0;
System.out.println(temp);
temp=Math.round(temp)/1000.0; //必须使用1000.0(double)作为除数
System.out.println(temp);
}
}
运行结果:
4. Date--日期
java. util. Date
yyyy-MM-dd HH:mm:ss:SSS
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
实例:
public class DateTest {
//@Test
public void test01() {
Date date = new Date(); //获得当前日期
System.out.println(date); //Wed Mar 31 08:53:50 CST 2021
System.out.println(date.getYear());
//date.getYear()已过时的方法
//输出为121,需要+1900,计算机设置1900-01-01 00:00:00 开始计时
//类似方法.getMonth()、.getDay()、.getHours()--均已过时
//.getTime()--获得时间戳,long类型,自1900-01-01 00:00:00到现在的毫秒数
System.out.println(date.getTime());
// 可以用时间戳作为不重复的文件名称
//另外生成不重复文件名称的方法还有UUID
String string = UUID.randomUUID().toString();
System.out.println(string);
}
//@Test
//Date====>日期
public void test02() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
String string = dateFormat.format(date);
System.out.println(string);
}
@Test
//日期 ====> Date
public void test03() {
String dateString = "2021/03/31 22:19:46";
//根据字符串格式选择dateFormat的格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date;
try {
//parse--解析,解析可能异常,需要异常处理
date = dateFormat.parse(dateString); //解析dateString
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
5. Calendar--日历
java. util. Calendar
一个抽象类,可通过类名使用静态方法
Calendar calendar = Calendar. getInstance( ) 实例化
//.getInstance() 返回一个Calendar的实例
//Calendar 类是一个抽象类,不允许使用new创建一个实例
calendar. get ( Calendar. YEAR ) 得到当前年
calendar. set ( Calendar. YEAR , 2018 ) 设置当前年为指定值
calendar. set(int year, int month, int date, int hourOfDay, int minute, int second) //设置时间
calendar. getTime ( ) 将Calendar类型的实例转换成Date类型
calendar.add(int field,int amount) 加或减去天数
实例:
public void test01() {
//.getInstance() 返回一个Calendar的实例
//Calendar 类是一个抽象类,不允许使用new创建一个实例
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
System.out.println(calendar.get(Calendar.YEAR));//年
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//天
// 0-11表示月份,按照习惯应该+1
System.out.println(calendar.get(Calendar.MONTH)+1);//月份
//转换成yyyy-MM-dd格式
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//calendar.getTime():把Calendar转化成Date
System.out.println(dateFormat.format(calendar.getTime()));
}
// .set()方法
public void test02() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
calendar.set(Calendar.YEAR, 2020);//赋值使用--- .set()
System.out.println(calendar.get(Calendar.YEAR));
calendar.set(2020,4,20,13,14,20); //一次性赋值:年,月,日,时,分,秒
//2020-05-20 13:14:20 , 0-11表示月份,赋值时应该-1
System.out.println(dateFormat.format(calendar.getTime()));
}
//.add()方法
public void test03() {
Calendar calendar = Calendar.getInstance();
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(dateFormat.format(calendar.getTime())); //2021-04-01 22:36:46
calendar.add(Calendar.DAY_OF_MONTH, 5); //加上5天
System.out.println(dateFormat.format(calendar.getTime())); //2021-04-06 22:36:46
calendar.add(Calendar.DAY_OF_MONTH, -10); //减去10天
System.out.println(dateFormat.format(calendar.getTime())); //2021-03-27 22:36:46
calendar.set(2020, 11, 29); //设置11---其实表示12月
System.out.println(dateFormat.format(calendar.getTime())); //2020-12-29 22:39:30
calendar.add(Calendar.DAY_OF_MONTH, 5); //自动进位
System.out.println(dateFormat.format(calendar.getTime())); //2021-01-03 22:39:30
}
//黑色星期五--月的13日&&星期五
//找出2020年的黑色星期五
public void checkBlackFriday2() {
int year=2020;
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
for (int i = 0; i < 12; i++) { //遍历2020年的12个月
calendar.set(Calendar.MONTH, i); //设置月份
calendar.set(Calendar.DAY_OF_MONTH, 13); //设置天
int week = calendar.get(Calendar.DAY_OF_WEEK); //取出这一天的DAY_OF_WEEK
if(week==Calendar.FRIDAY) //如果这一天是星期五则是黑色星期五
System.out.println(dateFormat.format(calendar.getTime()));
//2020-03-13
//2020-11-13
}
}
6. System
java. lang. System
public final class System
System. in 输入流
System. out 输出流
System. err 错误输出
以内存为坐标,读入到内存中的流叫输入流,从内存中写出的流叫输出流
System. exit ( int status ) 终止当前正在运行的Java虚拟机,status==0 表示非异常退出
System. gc ( ) 垃圾自动回收机制 ,显示调用也不一定运行。垃圾--失去引用的内存。
System. currentTimeMillis ( ) 返回以毫秒为单位的当前时间,时间戳
//System.currentTimeMillis()--获得当前系统时间
public void test04() {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long currentTimeMills = System.currentTimeMillis();
Date date = new Date( currentTimeMills );
System.out.println(dateFormat.format(date)); //2021-04-02 08:51:35
}
7. runtime&progress
7.1 java.lang.runtime类
每一个Java程序都有一个Runtime类的单一实例。
通过Runtime.getRuntime() 获得Runtime类的实例。
类的方法: freeMemory()、maxMemory()、toalMemory()、exec(String command).
//Runtime类常用方法
public void test01() {
Runtime runtime = Runtime.getRuntime();//得到程序运行的实例
//内存单位:byte,B,KB,MB,GB,TB
System.out.println(runtime.freeMemory()/1024/1024+"MB"); //查看空闲的内存
System.out.println(runtime.maxMemory()/1024/1024+"MB"); //查看最大内存
System.out.println(runtime.maxMemory()/1024/1024+"MB"); //查看使用的内存
String command = "C:/Users/17871/AppData/Local/Programs/utools/uTools.exe";
try {
runtime.exec(command); //运行可执行的文件
} catch (IOException e) {
e.printStackTrace();
}
}
7.2 java.lang.Process类 -- 进程类
ProcessBuilder.start()
和 Runtime.exec
()
方法创建一个本机进程,并返回 Process
子类的一个实例,该实例可用来控制进程并获得相关信息。
Process
类提供了执行从进程输入、执行输出到进程、等待进程完成、检查进程的退出状态以及销毁(杀掉)进程的方法。
//Process类
public void test02() {
Runtime runtime = Runtime.getRuntime();
//启动的软件的位置
String command = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe";
try {
Process process = runtime.exec(command); //获得运行实例
System.out.println("软件运行的进程:"+process);
//让程序间隔一段时间
try {
Thread.sleep(10000); //程序睡10000毫秒,1 秒=1000 毫秒
process.destroy(); //程序运行10秒后,杀掉进程
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
8. 封装类(包装类)
(1)封装类:对java中的八大基本数据类型进行封装形成的类。
基本数据类型:byte、short、int、long、float、double、boolean、char
默认值: 0 0 0 0 0.0 0.0 false ''
对应的封装类:Byte、Short、Integer、Long、Double、Boolean、Character
默认值:null null null ----------------------------------------------------对象
(2)用引用数据数据的.equals( )方法作比较时,基本数据类型自动封箱
类中常量定义成int类型比较安全(避免判断Integer==Integer出错,integer值在[0-127]可以==比较,常量池)
(3)自动装箱:将基本数据类型的数据转成(赋给)封装类型的数据
自动拆箱:将封装类型的数据转成基本数据类型的数据
在表达式中,如果同时出现了封装类和基本数据类型,则封装类会进行自动拆箱成基本数据类型再参与运算。
9. 方法传参
形参(形式参数)方法定义的时候书写,无具体的值。
实参(实际参数)方法调用的时候传入,有具体的值。
基本数据类型传递的是值的拷贝,封装类和String单独传参当作基本数据类型。
引用数据类型传递的是引用的拷贝。
10. JVM中的内存
栈:速度快,仅次于CPU中的寄存器,栈数据可以共享,
但要求栈中数据大小与生命周期确定,缺乏灵活性。
堆:内存大小可以动态调整,生存周期也不需明确,Java的垃圾回收机制(GC)会自动回收开辟在堆中的垃圾内存,
但由于要在运行时动态分配内存,存取速度较慢。
基本数据类型内存分配----常量池-堆中
基本数据类型(4类8种):
整数类型:byte、short、int、long
浮点数类型:float、double
字符类型:char
布尔类型:boolean(ture false)
引用类型数据分配
引用类型:类、接口、数组
引用类型可以相互传递。
== 与 equals 的区别:
==:比较内存地址是否一致
equals:比较内容是否一致