Java学习笔记7 常用包、常用类、内存机制

目录

1. 常用包

2. String

3. Math

4. Date--日期

5. Calendar--日历

6. System

7. runtime&progress

8. 封装类(包装类)

9. 方法传参

10. JVM中的内存


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:比较内容是否一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值