📄 java4.txt
字号:
sd 0804 Javaday4 2008年6月13日7个随机数作业:/**作业:
完成下面的代码
package com.tarena.day03;
public class TestRan {
public static void main(String[] args) {
Math.random(); //[0,1)的随机数
int temp = (int)(Math.random()*36+1); //[1,37)
System.out.println(temp);
//要求生成7个无重复的随机数
int[] t = new int[7];
}
}
*/方法一 常规--------------------------------------------------------------------------------------import java.util.Arrays;public class TestRan { public static void main(String[] args) { int[] nums = new int[7];//申请一个数组空间,应为要返回一个随即数组 out:for(int i=0; i<nums.length; i++){// xx.length 比直接写数字方便扩展 int temp = (int)(Math.random()*36+1);/*用产生一个0.0~1.0的随机数,确定1到37之间的范围,转换成int整数(要返回整数),再赋给temp*/ nums[i] = temp;//把值给申请的数组 for (int j = 0; j < i; j++) {/*j<i产生不重复的数数组 **/ if(temp==nums[j]){/*钳套一个条件**/ --i;// continu out;//out标号 } } } Arrays.sort(nums);// for (int j = 0; j < nums.length; j++) {//数组排重输出 System.out.print(nums[j]+" "); /*print(char[] s)打印字符数组。按照平台的默认字符编码将字符转换为字节,并完全以 write(int) 方法的方式写入这些字节。*/ } }}方法二 C++高级编程员--------------------------------------------------------------------------------------public class TestRan { public static void main(String[] args) { int[] t = new int[7];/*弄一个数组T*/ int[] temp = {1,2,3,4,5,6,7};//要 排 的数组 for(int i=0; i<t.length; i++){ int index = (int)(Math.random()*(7-1)); //生成 [0,7) 的随机数 7-1相当于0~6的下标 t[i] = temp[index];//随机下标赋给数组t temp[index] = temp[7-1-i];//排序,保证每次不重复 } for (int i = 0; i < temp.length; i++) { System.out.print(t[i]+" ");/*print(char[] s)打印字符数组。按照平台的默认字符编码将字符转换为字节,并完全以 write(int) 方法的方式写入这些字节。*/ } }}方法三 java 程序员--------------------------------------------------------------------------------------import java.util.HashSet;//用类库HashSetpublic class TestRan { public static void main(String[] args) { HashSet hs = new HashSet(); //HashSet是无重复元素,new一个名为hs while(true){//返回: 该集合还不包含指定元素,则返回 true。 int temp = (int)(Math.random()*7);//产生一个随机数 hs.add(""+temp);//如果此集合中还不包含指定元素,则添加指定元素。 if(hs.size()==7)//if果==7 size() 返回此集合中的元素的数量(集合的容量)。 break; } System.out.println(hs); }}--------------------------------------------------------------------------------------多态:一个名字多种形态。1.基本类型多态 主要针对数字(8种)2.方法多态(重载,重写,覆盖)3.类多态(类相关)4.参数多态 在传参时发生的基本类型多态或类多态Person p = new Student new Person只要是Person类的子类都可以new ******************************************************一个类可以指向自身的对象,也可以指向任意一个子类对象,这叫类多态要指向子类才构成多态,父类的变量指向子类的对象在类多态时,只能使用在父类中生命的属性和方法,子类自身的属性和方法(非继承的东西)无法使用,相当于子类当作父类使用编译的时候按父类编译,运行时按子类运行******************************************************类多态能够让参数的传递更加灵活引用类型的类型转换:不能随意转换原则:引用类型的类型转换本质上是一种还原操作,还原堆内存中对象的本来面目变量类型一经声明就无法改变,想要改变就申请一个新变量--------------------------------------------------------------------------------------package com.tarena.day04.po;//打包public class Person {//建类Person 特征名字,年龄 --属性,行为--方法。 private int age;//属性 [修饰符] 类型 属性名 [默认值] private String name;//属性[private publkilc ] 类型 属性名 [默认值] public void setAge(int age){//get得到 set设置 /*方法的格式[修饰符]返回类型 方法名([参数列表])[抛出异常]{方法体}**/ this.age = age;//引用,指向自己,表示调用本类中的方法,(还可以调属性和构造) 能出现在构造里 } public int getAge(){//构造: /*[修饰符] 类名([参数列表])[抛出异常]{构造体}*/ return age;// }}package com.tarena.day04.po;--------------------------------------------------------------------------------------public class Student extends Person{//类与类继承 [修饰符] class + 新类名 +extends + 父类类名{类体} private int id;//封装 设私有 public void setId(int id){//提供方法public set设置属性 this.id = id; } public int getId(){//get得到属性 return id; }//继承在逻辑上是“is”关系。 好处:1.子类可以复用父类,2.是多态的基础 public static void main(String[] args){//一个类只能有一个父类 Person p = new Student(); //多态:父类对象p指向子类对象new的一个空间时发生多态。 p.setAge(23);//调用父类属性p设置的年龄,并赋给他个23。 //p.setId(2); 在Person中没有,所以无法调用 Student s = (Student)p; //引入一个新变量s等于Student类型,与p指向同一个new副本 s.setId(2);//调用副本,赋2给S //p.setId(); 还是不可以,因为p中还是没有setId,变量类型一经声明就无法改变 }}--------------------------------------------------------------------------------------引用类型转换:1.必须发生在父子类之间2.子转换成父会自动完成(隐式)3.父转换成子要显式,注明(还原操作)4.通常类型转换前要使用instanceof 先判断instanceof 返回boolean 类型,向父类兼容格式:(变量名 instanceof 类名)--------------------------------------------------------------------------------------package com.tarena.day04.po;public class Student extends Person{ private int id; public void setId(int id){ this.id = id; } public int getId(){ return id; } public static void main(String[] args){ Person p = new Student(); //多态 p.setAge(23); //p.setId(2); 在Person中没有,所以无法调用 if(p instanceof Student){/*判断类型是否匹配,instanceof 返回boolean 类型,向父类兼容*/ Student s = (Student)p;//引入一个新变量s等于Student类型,与p指向同一个new副本 s.setId(2); }//变量名instanceof 类名,返回boolean类型 if(p instanceof Person){ //instanceof是向父类兼容 System.out.println("is Person"); } if(p instanceof Object){ System.out.println("is obj"); } //p.setId(); 还是不可以,因为p中还是没有setId,变量类型一经声明就无法改变 }}输出结果:is Personis obj--------------------------------------------------------------------------------------重写:只有方法可以重写当父类方法不满足子类需要的时候,可以对父类的方法进行重写或覆盖该方法重写的语法要求(继承):1.具有相同的方法名称2.具有相同的参数列表3.具有相同的返回类型(JDK 5.0以后支持返回子类 )4.访问权限不能更严格*****5.不能抛出更大的异常*****@Override重写方法时保证正确性--------------------------------------------------------------------------------------package com.tarena.day04.po;public class Student extends Person{ private int id; public void setId(int id){ this.id = id; } public int getId(){ return id; } @Override//重写方法时可以保证正确性,这句能让编译器检测下面的方法是重写 public String showName() { //在子类中重写父类的方法 return super.showName()+"同学"; } public static void main(String[] args){ Person p = new Student(); //多态 p.setAge(23); //p.setId(2); 在Person中没有,所以无法调用 if(p instanceof Student){ //判断类型是否匹配 Student s = (Student)p; //引入一个新变量s等于Student类型,与p指向同一个new副本 s.setId(2); }//变量名instanceof 类名,返回boolean类型 if(p instanceof Person){ //instanceof是向父类兼容 System.out.println("is Person"); } if(p instanceof Object){ System.out.println("is obj"); } //p.setId(); 还是不可以,因为p中还是没有setId,变量类型一经声明就无法改变 }}--------------------------------------------------------------------------------------package com.tarena.day04.po;public class Test { public static void main(String[] args) { Student s = new Student(); System.out.println(s.showName()); Person p = new Student(); System.out.println(p.showName()); //编译时认为是父类,运行时实际上是子类方法 }}运行结果:null同学null同学--------------------------------------------------------------------------------------当重写的时候碰到类多态,那编译的时候会认为是父类的方法,而实际执行时是调用子类方法,如上
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -