常用类
1、Object类
- 超类、基类、所有类的直接或间接父类,位于继承树的最顶层
- 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类
- Object类中所定义的方法,是所有对象都具备的方法
- Object类型可以存储任何对象
- 作为参数,可以接受任何对象
- 作为返回值,可以返回任何对象。
1.1、getClass方法
- public final Class<?> getClass(){}
- 返回引用中存储的实际对象类型
- 应用:通常用于判断两个引用中实际存储对象类型是否一致。
1.2、hashCode()方法
- public int hashCode(){}
- 返回该对象的哈希码值
- 哈希值根据***对象的地址***或***字符串***或***数字***使用***hash算法***计算出来的***int 类型的数值***。
- 一般情况下相同对象返回相同哈希码。
1.3、toString()方法
- public String toString(){}
- 返回该对象的字符串表示(表现形式)
- 可以根据程序需求覆盖该方法,如:展示对象各个属性值
1.4、equals()方法
- public boolean equals(Object obj){}
- 默认实现为(this ==obj),比较两个对象地址是否相同
- 可进行覆盖,比较两个对象的内容是否相同。
equals()方法覆盖步骤
- 比较两个引用是否指向同一个对象。
- 判断obj 是否为null;
- 判断两个引用指向的实际对象类型是否一致
- 强制类型转换
- 依次比较各个属性值是否相同
1.5、finalize()方法
- 当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。
- 垃圾对象:没有有效引用指向此对象时,为垃圾对象。
- 垃圾回收:由GC销毁垃圾对象,释放数据存储空间。
- 自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象
- 手动回收机制:使用System.gc();通知JVM执行垃圾回收。
1.6、示例代码
package com.zhang.object1;
/**
* @ClassName Student
* @Description TODO 测试getClass方法
* @Author Administrator
* @Date 2021/2/1 18:28
* @Version 1.0
**/
public class Student {
private String name = "aaa";
private int age = 18;
public Student() {
}
public Student(String name, int age) {
super();
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;
}
//快捷键 Alt + Insert
@Override
public String toString() {
return "GetClass{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
// 1. 比较两个引用是否指向同一个对象。
if(this ==o){
return true;
}
//2. 判断obj 是否为null;
if(o==null){
return false;
}
//3. 判断两个引用指向的实际对象类型是否一致
//instanceof 判断对象是否是某种类型
if (o instanceof Student){
//4. 强制类型转换
Student g =(Student)o;
//5. 依次比较各个属性值是否相同
if (this.name.equals(g.getName())&&this.age==g.getAge()){
return true;
}
}
return true;
}
@Override
protected void finalize() throws Throwable {
System.out.println(this.name+ "对象被回收了");
}
}
package com.zhang.object1;
/**
* @ClassName TestStudent
* @Description TODO 测试Object类的常用方法
* @Author Administrator
* @Date 2021/2/1 18:34
* @Version 1.0
**/
public class TestStudent {
public static void main(String[] args) {
Student g1 = new Student("aaa",18);
Student g2 = new Student("bbb", 20);
// 1、测试getClass()
System.out.println("################### 1、测试getClass()###################");
//判断g1和g2是不是同一个类型
Class class1 = g1.getClass();
Class class2 = g2.getClass(); //Class这个类在反射那块再深入学习
if (class1==class2) {
System.out.println("class1和class2是同一种类型");
} else {
System.out.println("class1和class2不是同一种类型");
}
// 2、测试hashCode()
System.out.println("################### 2、测试hashCode()###################");
System.out.println(g1.hashCode()); //哈希值为460141958
System.out.println(g2.hashCode());//哈希值为 1163157884
Student g3 = g1;
System.out.println(g3.hashCode());//哈希值为460141958
// 3、测试toString()
System.out.println("################### 3、测试toString()###################");
System.out.println(g1.toString()); // 16进制值 1b6d3586 转成 10进制值 为 460141958
System.out.println(g2.toString());
// 4、测试equals():判断两个对象是否相同
System.out.println("################### 4、测试equals()###################");
Student g4 =new Student("xiaozhang",1);
Student g5 =new Student("xiaozhang",1);
System.out.println(g4.equals(g5));
}
// 5、测试finalize()方法
}
package com.zhang.object1;
/**
* @ClassName TestStudent2
* @Description TODO 测试垃圾回收
* @Author Administrator
* @Date 2021/2/2 7:09
* @Version 1.0
**/
public class TestStudent2 {
public static void main(String[] args) {
// Student s1 =new Student("aa",20);
// Student s2 =new Student("bb",20);
// Student s3 =new Student("cc",20);
// Student s4 =new Student("dd",20);
// Student s5 =new Student("ee",20);
// 没有有效引用时,被判定为垃圾对象
new Student("aa",20);
new Student("bb",20);
new Student("cc",20);
new Student("dd",20);
new Student("ee",20);
System.gc();
System.out.println("回收垃圾");
}
}
2、包装类
2.1、什么是包装类
- 基本数据类型所对应的引用数据类型。
- Object可统一所有数据,包装类的默认值时null。
2.2、包装类对应
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
2.3、类型转换与装箱、拆箱
- 8种包装类提供不同类型间的转换方式
- Number父类中提供的6个共性方法。
- parseXXX()静态方法。
- valueOf()静态方法。
- 注意:需保证类型兼容,否则抛出NumberFormatException异常。
- 示例代码
package com.zhang.baozhuang2;
import javax.sound.midi.Soundbank;
/**
* @ClassName Demo01
* @Description TODO
* @Author Administrator
* @Date 2021/2/2 8:47
* @Version 1.0
**/
public class Demo01 {
public static void main(String[] args) {
System.out.println("#################装箱###################");
//类型转换:装箱,基本类型转成引用类型的过程
//基本类型
int num1 =18;
// 使用Integer类创建对象
Integer i1 = new Integer(num1);
Integer i2 = new Integer(num1);
System.out.println(i1);
System.out.println(i2);
System.out.println("#################拆箱###################");
//类型转型:拆箱,引用类型转成基本类型
Integer i3 = new Integer(123);
int num2 = i3.intValue();
System.out.println(i1);
System.out.println(num2);
System.out.println("#################自动装箱和拆箱###################");
// JDK1.5之后,提供自动装箱和拆箱
int age =30;
//自动装箱
Integer i5 = age;//实际是 Integer i5 = new Integer(age);
//自动拆箱
int age2 = i5;
System.out.println(i5);
System.out.println(age2);
System.out.println("#################基本类型和字符串之间转换###################");
//基本类型和字符串之间转换
System.out.println("################# 1 基本类型转成字符串###################");
// 1 基本类型转成字符串
int n1 =15;
// 1.1使用+号
String s1 = n1 +"";
// 1.2使用Integer中的toString()方法
String s2 = Integer.toString(n1,16); //改成16进制
System.out.println(s1);
System.out.println(s2);
System.out.println("#################2字串转成基本类型###################");
// 2字串转成基本类型
String str = "123";
// 使用Integer.parseXXX();
int n2 =Integer.parseInt(str);
System.out.println(n2);
// boolean字符串形式转成基本类型,"true"--->true, 非"true"----->false
String str2 = "true";
boolean b1 = Boolean.parseBoolean(str2);
String str3 = "非true";
boolean b2 = Boolean.parseBoolean(str3);
}
}
2.4、整数缓冲区(面试题)
- Java预先创建了 256 ***[-128,127]***个常用的整数包装类型对象
- 在实际应用当中,对已创建的对象进行复用。
package com.zhang.baozhuang2;
/**
* @ClassName Demo02
* @Description TODO
* @Author Administrator
* @Date 2021/2/2 18:37
* @Version 1.0
**/
public class Demo02 {
public static void main(String[] args) {
//面试题
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1==integer2);//false
// Integer integer3 = 100;//自动装箱
Integer integer3 = Integer.valueOf(100);
// Integer integer4 = 100;
Integer integer4 = Integer.valueOf(100);
System.out.println(integer3==integer4);//true
// Integer integer5 =128; //自动装箱 IntegerCache[-128,127]
Integer integer5 =Integer.valueOf(128);
// Integer integer6= 128;
Integer integer6= Integer.valueOf(128);
System.out.println(integer6==integer5);//false
}
}
3、String类
3.1、String类的特点
-
字符串是常量,创建之后不可改变
-
字符串字面值存储在字符串池中,可以共享。
-
String s =“Hello”;产生一个对象,字符串池中存储
-
String s =new String(“Hello”);//产生两个对象,堆、池各存储一个。
- 示例代码
package com.zhang.string;
import java.util.Arrays;
/**
* @ClassName Demo01
* @Description TODO 测试常用类方法
* @Author Administrator
* @Date 2021/2/2 19:22
* @Version 1.0
**/
public class Demo01 {
public static void main(String[] args) {
String name = "hello";//"hello"常量存储在字符串中,
name ="zhangsan";//"zhangsan"赋值给name变量,给字符串赋值时,并没修改数据"hello",而是重新在方法区开辟占用一个新的内存"zhangsan"
String name2 ="zhangsan";
//演示字符串的另一种创建方式, new String();
String str = new String("java");
String str1 = new String("java");
System.out.println(str==str1);
System.out.println(str.equals(str1));
//测试String类常用方法
System.out.println("`~~~~~~~~~~~~~~~~~字符串方法的使用1~~~~~~~~~~~~~~~~~~~~~~");
//- public int length():返回字符串的长度
//- public char charAt(int index): 根据下标获取字符。
//- public boolean contains(String str):判断当前字符串中是否包含str。
String content ="Java是世界上最好的编程语言,Java非常易学,Java真香";
System.out.println(content.length());
System.out.println(content.charAt(content.length()-1));
System.out.println(content.contains("Java"));
System.out.println(content.contains("php"));
System.out.println("`~~~~~~~~~~~~~~~~~字符串方法的使用2~~~~~~~~~~~~~~~~~~~~~~");
//- public char[] toCharArray():将字符串转换成数组。
//- public int indexOf(String str):查找str首次出现的下标,存在则返回该下标;不存在,则返回-1。
//- public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。
System.out.println(Arrays.toString(content.toCharArray()));
System.out.println(content.indexOf("Java"));
System.out.println(content.indexOf("Java",5));
System.out.println(content.lastIndexOf("Java"));
System.out.println("`~~~~~~~~~~~~~~~~~字符串方法的使用3~~~~~~~~~~~~~~~~~~~~~~");
//- public String trim():去掉字符串前后的空格。
//- public String toUpperCase(): 将小写转成大写。
//- public boolean endWith(String str):判断字符串是否以str结尾。
String content2 =" Hwllo world ";
System.out.println(content2.trim());
System.out.println(content2.toLowerCase());
System.out.println(content2.toLowerCase());
String filename ="hello,java";
System.out.println(filename.startsWith("he"));
System.out.println(filename.endsWith("va"));
System.out.println("`~~~~~~~~~~~~~~~~~字符串方法的使用4~~~~~~~~~~~~~~~~~~~~~~");
//- public String replace(char oldChar, char newChar):将旧字符串替换成新字符
//- public String[] split(String str):根据str做拆分。
System.out.println(content2.replace("Java","php"));
String say="java is the best programing language,java xiang";
String[] arr= say.split("[ ,]+");
System.out.println(arr.length);
for (String s:arr
) {
System.out.println(s);
}
//补充两个方法equals()、compare();比较大小
System.out.println();
String s1 ="hello";
String s2 ="HELLO";
System.out.println(s1.equals(s2));//false
System.out.println(s1.equalsIgnoreCase(s2));//true 忽略大小写比较
String s3 ="abc";
String s4 ="xyz";
System.out.println(s3.compareTo(s4)); //对应编码表:a为97,x为120 -23 如果第一个字母相同,则比较第二个
String s6 ="abc";
String s5 ="abc";
System.out.println(s5.compareTo(s6)); //0
String s7 ="ABC";
System.out.println(s6.compareToIgnoreCase(s7));//忽略大小写比较,大小写不同,对应编码值不同
System.out.println(s6.compareTo(s7));
}
}
3.2、常用方法
-
public int length():返回字符串的长度
-
public char charAt(int index): 根据下标获取字符。
-
public boolean contains(String str):判断当前字符串中是否包含str。
-
public char[] toCharArray():将字符串转换成数组。
-
public int indexOf(String str):查找str首次出现的下标,存在则返回该下标;不存在,则返回-1。
-
public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引。
-
public String trim():去掉字符串前后的空格。
-
public String toUpperCase(): 将小写转成大写。
-
public String toLowerCase(): 将大写转成小写。
-
public boolean startWith(String str):判断字符串是否以str开始。
-
public boolean endWith(String str):判断字符串是否以str结尾。
-
public String replace(char oldChar, char newChar):将旧字符串替换成新字符
-
public String[] split(String str):根据str做拆分。
补充:补充两个方法equals()、compareTo();比较大小
3.3 练习
package com.zhang.string;
/**
* @ClassName Demo
* @Description TODO
* @Author Administrator
* @Date 2021/2/3 13:49
* @Version 1.0
**/
public class Demo {
/*
已知String str = "this is a text";
1.将str中的单词单独获取出来
2.将str中的text替换为practice
3.在text前面插入一个easy
4.将每个单词的首字母改为大写
*/
public static void main(String[] args) {
System.out.println("~~~~~~~~~~~~~~~~~~~~~1.将str中的单词单独获取出来~~~~~~~~~~~~~~~~~~~~~");
String str = "this is a text";
String[] str1 = str.split(" ");
for (String str2 :str1
) {
System.out.println(str2);
}
System.out.println("\"~~~~~~~~~~~~~~~~~~~~~2.将str中的text替换为practice~~~~~~~~~~~~~~~~~~~~~\"");
System.out.println(str.replace("text","pracrice"));
System.out.println("\"~~~~~~~~~~~~~~~~~~~~~ 3.在text前面插入一个easy~~~~~~~~~~~~~~~~~~~~~\"");
System.out.println(str.replace("text","easy text"));
System.out.println("\"~~~~~~~~~~~~~~~~~~~~~ 4.将每个单词的首字母改为大写~~~~~~~~~~~~~~~~~~~~~\"");
for (int i = 0; i <str1.length ; i++) {
char first= str1[i].charAt(0);
char upperfirst = Character.toUpperCase(first);
String newer = upperfirst +str1[i].substring(1);
System.out.print(newer+" ");
}
}
}
3.4可变字符串 StringBuffer和StringBuilder
- StringBuffer:可变长字符串,JDK1.0提供,运行效率慢、线程安全 单线程的使用
- StringBilder:可变长字符串,JDK5.0提供,运行效率快、线程不安全
- 示例代码
package com.zhang.string;
/**
* @ClassName Demo02
* @Description TODO StringBuffer 和StringBuilder的使用
* 与String的区别
* (1)效率比String高;(2)比String节省内存
* @Author Administrator
* @Date 2021/2/3 15:13
* @Version 1.0
**/
public class Demo02 {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
// 1、 append();追加
sb.append("java世界第一");
System.out.println(sb.toString());
sb.append("java世界第一");
System.out.println(sb.toString());
sb.append("java世界第一");
System.out.println(sb.toString());
// 2、insert();添加
sb.insert(0,"我在最前面");
System.out.println(sb.toString());
// 3、 replace();替换
sb.replace(0,5,"hello");
System.out.println(sb.toString());
// 4、delete();删除
sb.delete(0,5);
System.out.println(sb.toString());
// 清空
sb.delete(0,sb.length());
System.out.println(sb.toString());
}
}
package com.zhang.string;
/**
* @ClassName Demo03
* @Description TODO 验证String 、StringBuilder、StringBUffer
* @Author Administrator
* @Date 2021/2/3 15:29
* @Version 1.0
**/
public class Demo03 {
public static void main(String[] args) {
long start = System.currentTimeMillis();//开始是时间
/*
String str ="";
for (int i = 0; i <99999 ; i++) {
str+=i;
}
用时:29384
*/
// StringBuilder sb = new StringBuilder(); 用时:50
StringBuffer sb =new StringBuffer();//用时:62
for (int i = 0; i <99999 ; i++) {
sb.append(i);
}
System.out.println(sb);
long end = System.currentTimeMillis();//结束时间
System.out.println("用时:"+(end-start));
// 用时:1
}
}
4、BigDecimal
-
位置:java.math包中。
-
作用:精确计算浮点数。
-
创建方式: BigDecimal bd =new BigDecimal(“1.0”);
-
方法:
-
BigDecimal add(BigDecimal bd) 加
-
BigDecimal subtract (BIgDecimal bd) 减
-
BigDecimal multiply(BigDecimal bd) 乘
-
BigDecimal divide(BigDecimal bd,int scal,RoundingMode mode) 除
-
参数scal:指定精确到小数点后几位
-
参数mode:
1、指定小数部分的取舍模式,通常采用四舍五入的模式
2、取值为BigDecimal.ROUND_HALF_UP。
-
package com.zhang.bigdecimal;
import java.math.BigDecimal;
/**
* @ClassName Demo01
* @Description TODO
* @Author Administrator
* @Date 2021/2/3 15:59
* @Version 1.0
**/
public class Demo01 {
public static void main(String[] args) {
double d1 =1.0;
double d2 = 0.9;
System.out.println(d1-d2);
// 面试题
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);
// 加法
BigDecimal r2 = bd1.add(bd2);
System.out.println(r2);
// 乘法
BigDecimal r3 = bd1.multiply(bd2);
System.out.println(r3);
// 除法
BigDecimal r4 = new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
System.out.println(r4);
new BigDecimal("10").divide(new BigDecimal("3"),2,BigDecimal.ROUND_HALF_UP);
}
}
5、Date类
-
Date表示特定的瞬间,精确到毫秒。Date类中的大部分方法都已经被Calendar类中的方法所取代。
-
时间单位
- 1秒 = 1000毫秒
-
1毫秒= 1000微秒
- 1微秒= 1000纳秒
-
示例代码
package com.zhang.date;
import java.util.Date;
/**
* @ClassName Demo01
* @Description TODO 测试Date类
* @Author Administrator
* @Date 2021/2/4 16:02
* @Version 1.0
**/
public class Demo01
{
public static void main(String[] args) {
// 1、创建Date对象
// 今天
Date date1 = new Date();
System.out.println(date1.toString());
System.out.println(date1.toLocaleString());
// 昨天
Date date2 = new Date(date1.getTime()-(60*60*24*1000));
System.out.println(date2.toLocaleString());
// 2、方法 after before
boolean b1 = date1.after(date2);
System.out.println(b1);
boolean b2 = date1.before(date2);
System.out.println(b2);
// 比较 compareTo();
date1.compareTo(date2);
}
}
6、Calendar类
- Calendar提供了获取或设置各种日历字段的方法
- 构造方法
- protected Calendar():由于修饰符是protected,所以无法直接创建该对象。
- 其他方法
方法名 | 说明 |
---|---|
static Calendar getInstance() | 使用默认时区和区域获取日历 |
void set (int year,int month, int date,int hourofday,int minute ,int second) | 设置日历的年、月、日、时、分、秒 |
int get(int feld) | 返回给定日历字段的值。字段比如年、月、日等 |
void setTime(Date date) | 用给定的Date设置此日历的时间。Date-Calendar |
Date getTime() | 返回一个Date表示此日历的时间。Calendar-Date |
void add(int field, int amount) | 按照日历的规则,给指定字段添加或减少时间量 |
long getTimeInMillies() | 毫秒为单位返回该日历的时间值 |
- 示例代码
package com.zhang.calendar;
import javax.xml.transform.Source;
import java.util.Calendar;
/**
* @ClassName Demo01
* @Description TODO 测试Calendar类的方法
* @Author Administrator
* @Date 2021/2/5 14:30
* @Version 1.0
**/
public class Demo01 {
public static void main(String[] args) {
// 1 创建Calendar对象
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
System.out.println(calendar.getTime().toLocaleString());
System.out.println(calendar.getTimeInMillis());
// 2 获取时间信息
// 获取年
int year = calendar.get(Calendar.YEAR);
// 月
int month = calendar.get(Calendar.MONTH);
// 日
int day =calendar.get(Calendar.DAY_OF_MONTH);//Date
// 小时
int hour = calendar.get(Calendar.HOUR_OF_DAY);
// 分钟
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,7);
System.out.println(calendar2.getTime().toString());
// 4 add 方法修改时间
calendar2.add(Calendar.HOUR,-1);
System.out.println(calendar2.getTime().toString());
// 5 补充方法
calendar2.add(Calendar.MONTH,2);
int max =calendar2.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = calendar2.getActualMinimum(Calendar.DAY_OF_MONTH);
System.out.println(max);
System.out.println(min);
}
}
7、SimpleDateFormat
-
SimpleDateFormat是一个以与语言环境有关的方式 来格式化和解析日期的具体类。
-
进行格式化(日期->文本)
-
解析(文本->日期)
-
常用的时间模式字母
字母 日期或时间 示例 y 年 2019 M 年中月份 08 d 月中天数 10 H 1天中小时数(0-23) 22 m 分钟 16 s 秒 59 S 毫秒 367 - 示例代码
package com.zhang.simpledateformat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @ClassName demo01
* @Description TODO
* @Author Administrator
* @Date 2021/2/5 16:20
* @Version 1.0
**/
public class demo01 {
public static void main(String[] args) throws ParseException {
// 1 创建SimpleDateFormat对象 y年M月
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
// 2 创建Date
Date date =new Date();
// 格式化date(把日期转成字符串)
String str = sdf.format(date);
System.out.println(str);
// 解析(把字符串转成日期)
Date date2 = sdf.parse("1970/01/01");
System.out.println(date2);
}
}
8、System类
-
System系统类,主要用于获取系统的属性数据和其他操作,构造方法私有。
方法名 说明 static void arrraycopy() 复制数组 static long currentTimeMillis(); 获取当前系统时间,返回的时毫秒值 static void gc() 建议JVM赶快启动垃圾回收器回收垃圾 static void exit(int status); 退出JVM,如果参数是0表示正常退出JVM,非0表示异常退出JVM -
示例代码
package com.zhang.system;
import java.util.Arrays;
/**
* @ClassName Demo01
* @Description TODO 测试System类的方法
* @Author Administrator
* @Date 2021/2/5 18:01
* @Version 1.0
**/
public class Demo01 {
public static void main(String[] args) {
// 1 arraycopy:数组的复制
// src:源数组
// srcPos:从那个位置开始复制0
// dest:目标数组
// destPos:目标数组的位置
// length:复制的长度
int [] arr = {20,18,15,8,35,26,45,90};
int [] dest = new int[8];
System.arraycopy(arr,4,dest,4,4);
for (int i = 0; i < dest.length; i++) {
System.out.println(dest[i]);
}
// Arrays.copyOf(origianl,newLength);
// 2 获取毫秒数
int r=0;
long start = System.currentTimeMillis();
for (int i = 0; i <99999999 ; i++) {
for (int j = 0; j <99999999 ; j++) {
r = i + j;
}
}
System.out.println(r);
long end = System.currentTimeMillis();
System.out.println("用时:"+(end-start));
// 3 回收垃圾
new Student("qqq",12);
new Student("www",13);
new Student("eee",14);
System.gc();
//4 退出jvm
System.exit(0);
System.out.println("程序结束");
}
}
package com.zhang.system;
/**
* @ClassName Student
* @Description TODO
* @Author Administrator
* @Date 2021/2/6 2:03
* @Version 1.0
**/
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
protected void finalize() throws Throwable {
System.out.println("回收了"+name+" + "+age);
}
}