目录
[方法 三 的拓展:](#方法 三 的拓展:)
- System 和 Math 一样,也是一个工具类,提供了一些与系统相关的方法
常用方法:
第一个方法:
// 方法的形参:0表示虚拟机是正常停止
// 非0表示虚拟机异常停止
System.out.println("会执行");
System.exit(0);
System.out.println("看看我执行了吗");
//但我们需要把整个程序停止,就可以调用这个方法
第二个方法:
返回当前时间毫秒值,并且以 1970 年 1 月 1 日 08:00:00 作为计算机中的时间原点(含时差); 1 秒=1000 毫秒
System.out.println(System.currentTimeMillis());
//分两次时间打印 :第一次1705373724363 第二次1705373737774
//看得出时间是在变化的
那这个方法的作用在哪?
public class Test02 {
public static void main(String[] args) {
/*求1~100000中的质数*/
long start = System.currentTimeMillis();//开始
for (int i = 1; i < 100000; i++) {
if (check1(i)) {
System.out.println(i);
}
}
long end = System.currentTimeMillis();//结束
//获取程序运行时间
System.out.println(end-start);//老方法需要578毫秒
}
public static boolean check1(int number) {
//验证是否是质数的方法(老方法)
for (int i = 2; i < number; i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
public class Test02 {
public static void main(String[] args) {
/*求1~100000中的质数*/
long start = System.currentTimeMillis();//开始
for (int i = 1; i < 100000; i++) {
if (check2(i)) {
System.out.println(i);
}
}
long end = System.currentTimeMillis();//结束
//获取程序运行时间
System.out.println(end-start);//新方法只需要33毫秒
//可以验证出改进的方法效率确实更高了
}
//验证是否是质数的方法(新方法--效率更高)
public static boolean check2(int number) {
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
return false;
}
}
return true;
}
}
得出此方法可以验证程序运行速度。
第三个方法:
int []arr1={1,2,3,4,5,6,7,8,9,10};
int []arr2=new int[10];
//拷贝arr1到arr2
System.arraycopy(arr1,0,arr2,0,10);
//遍历arr2
for (int i = 0; i <arr2.length ; i++) {
System.out.print(arr2[i]+" ");
}
System.out.println();
控制台:
1 2 3 4 5 6 7 8 9 10
练习:使 arr2 为: 0 0 0 0 1 2 3 0 0 0
//拷贝arr1到arr2
System.arraycopy(arr1,0,arr2,4,3);
练习:使 arr2 为:0 0 7 8 9 0 0 0 0 0
//拷贝arr1到arr2
System.arraycopy(arr1,6,arr2,2,3);
方法 三 的拓展:
-
如果数据源数组和目的数组是基本数据类型,那么类型必须一致,否则报错
int []arr1={1,2,3,4,5,6,7,8,9,10};
double []arr2=new double[10]; -
在拷贝的时候必须考虑数组长度,如果超出范围也会报错
int []arr1={1,2,3,4,5,6,7,8,9,10};
int []arr2=new int[5];
3.若数据源数组和目的数组都是引用数据类型,那么子类类型可以拷贝给父类类型
public class Test05 {
public static void main(String[] args) {
Student s1=new Student("张胜男1",21);
Student s2=new Student("李胜男2",22);
Student s3=new Student("王胜男3",23);
//数据源数组和目的数组都是引用数据类型
Student []arr1={s1,s2,s3};
Person []arr2=new Person[3];
//arr1拷贝到arr2
System.arraycopy(arr1,0,arr2,0,3);
//遍历arr2
for (int i = 0; i <arr2.length ; i++) {
System.out.println(arr2[i].getName()+" ,"+arr2[i].getAge());
}
}
}
//父类
class Person{
private String name;
private int age;
public Person(){};
public Person (String name ,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//子类
class Student extends Person{
public Student(){};
public Student(String name,int age){
super(name, age);
}
}
控制台:
张胜男1 ,21
李胜男2 ,22
王胜男3 ,23