课后作业——2022.09.17
1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。
import java.util.Random; import java.util.Scanner; public class RandomNum { public static void main(String[] args) { Random ran = new Random(System.currentTimeMillis());//以当前时间为种子 Scanner input = new Scanner(System.in); System.out.print("Enter the number of randomnumbers:");//从键盘输入要产生随机数的个数 int in = input.nextInt(); int j=0;//引入j用来输出换行符 for(int i = 0 ; i < in ; i++) { System.out.print(ran.nextInt()+"\t");//利用for循环输出所产生的随机数 j+=1; if(j==6){ System.out.println(); j=0; } } } }
2、看以下代码,你发现了有什么特殊之处吗?
// MethodOverload.java // Using overloaded methods public class MethodOverload { public static void main(String[] args) { System.out.println("The square of integer 7 is " + square(7)); System.out.println("\nThe square of double 7.5 is " + square(7.5)); } public static int square(int x) { return x * x; } public static double square(double y) { return y * y; } }
同样名称的函数可以不同,不同的参数类型可以自动调用相应的函数(方法),即方法的重载。
满足以下条件的两个或多个方法构成“重载”关系:
(1)方法名相同;
(2)参数类型不同,参数个数不同,或者是参数类型的顺序不同。
注意:方法的返回值不作为方法重载的判断条件。
3.查看一下JDK中System.out.println()方法,你发现了什么?
System.out.println()方法中实参表内可输入很多类型。
4.阶乘数怎么可能出现负数?
原因:由于计算机使用固定的位数来保存数值,因此,能处理的数值大小是有限的。50的阶乘过于大,超出了范围,导致数据溢出。
5.请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。
class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的静态初始化块"); } { System.out.println("Leaf的普通初始化块"); } public Leaf() { //通过super调用父类中有一个字符串参数的构造器 super("Java初始化顺序演示"); System.out.println("执行Leaf的构造器"); } } public class TestStaticInitializeBlock { public static void main(String[] args) { new Leaf(); } }
静态初始化块只执行一次。 创建子类型的对象时,也会导致父类型的静态初始化块的执行。
6.静态方法中只允许访问静态数据,那么,如何在静态方法中访问类的实例成员(即没有附加static关键字的字段或方法)?
public class Me { int x=1; static int y=2; public static void method()//静态方法 { System.out.println("实例变量x = " + new Test().x);//在静态方法中访问类的实例变量需首先进行类的实例化 System.out.println("静态变量y = " + y);//在静态方法中可直接访问类的静态变量 } public static void main(String[] args) { Test.method(); Test t = new Test(); System.out.println("x = " + t.x); } }
类中静态的方法或者属性,本质上来讲并不是该类的成员,在java虚拟机装在类的时候,这些静态的东西已经有了对象,它只是在这个类中"寄居",不需要通过类的构造器(构造函数)类实现实例化;而非静态的属性或者方法,在类的装载是并没有存在,需在执行了该类的构造函数后才可依赖该类的实例对象存在。