変数パラメーター
メソッド宣言で、指定したパラメータータイプの後に省略記号(...)を追加します。
メソッドで指定できる変数パラメーターは1つだけであり、それはメソッドの最後のパラメーターでなければなりません。通常のパラメータは、その前に宣言する必要があります。
public class VarargsDemo {
public static void main(String args[]) {
// 调用可变参数的方法
printMax(34, 3, 3, 2, 56.5);
printMax(new double[]{
1, 2, 3});
}
public static void printMax( double... numbers) {
if (numbers.length == 0) {
System.out.println("No argument passed");
return;
}
double result = numbers[0];
for (int i = 1; i < numbers.length; i++){
if (numbers[i] > result) {
result = numbers[i];
}
}
System.out.println("The max value is " + result);
}
}
/*以上实例编译运行结果如下:
The max value is 56.5
The max value is 3.0
finalize()メソッド
Javaでは、そのようなメソッドを定義できます。このメソッドは、ガベージコレクタによってオブジェクトが破棄(再利用)される前に呼び出されます。このメソッドはfinalize()と呼ばれ、再利用されたオブジェクトをクリアするために使用されます。
たとえば、finalize()を使用して、オブジェクトによって開かれたファイルを確実に閉じることができます。
public class FinalizationDemo {
public static void main(String[] args) {
Cake c1 = new Cake(1);
Cake c2 = new Cake(2);
Cake c3 = new Cake(3);
c2 = c3 = null;
System.gc(); //调用Java垃圾收集器
}
}
class Cake extends Object {
private int id;
public Cake(int id) {
this.id = id;
System.out.println("Cake Object " + id + "is created");
}
protected void finalize() throws java.lang.Throwable {
super.finalize();
System.out.println("Cake Object " + id + "is disposed");
}
}
运行以上代码,输出结果如下:
$ javac FinalizationDemo.java
$ java FinalizationDemo
Cake Object 1is created
Cake Object 2is created
Cake Object 3is created
Cake Object 3is disposed
Cake Object 2is disposed
Java Scannerクラス
次に、Scannerオブジェクトを作成するための基本的な構文を示します:
Scanner s = new Scanner(System.in);
次のメソッドを使用します。
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
// next方式接收字符串
System.out.println("next方式接收:");
// 判断是否还有输入
if (scan.hasNext()) {
String str1 = scan.next();
System.out.println("输入的数据为:" + str1);
}
scan.close();
}
}
/*执行以上程序输出结果为:
$ javac ScannerDemo.java
$ java ScannerDemo
next方式接收:
runoob com
输入的数据为:runoob
nextLineメソッドを使用します。
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
// nextLine方式接收字符串
System.out.println("nextLine方式接收:");
// 判断是否还有输入
if (scan.hasNextLine()) {
String str2 = scan.nextLine();
System.out.println("输入的数据为:" + str2);
}
scan.close();
}
}
next()とnextLine()
next()の
違い:1.入力を終了する前に、有効な文字を読み取る必要があります。
2. next()メソッドは、有効な文字を入力する前に遭遇した空白を自動的に削除します。
3.有効な文字が入力された後にのみ、それらの後に入力されたブランクが区切り文字またはターミネーターとして使用されます。
next()はスペースを含む文字列を取得できません。
nextLine():
1. Enterをターミネータとして使用します。つまり、nextLine()メソッドはキャリッジリターンの前にすべての文字を返します。
2.ブランクが得られます。
intまたはfloat型のデータを入力する場合は、Scannerクラスでもサポートされていますが、入力する前にhasNextXxx()メソッドを使用して確認し、次にnextXxx()を使用して読み取ることをお勧めします。
コード例1:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 从键盘接收数据
int i = 0;
float f = 0.0f;
System.out.print("输入整数:");
if (scan.hasNextInt()) {
// 判断输入的是否是整数
i = scan.nextInt();
// 接收整数
System.out.println("整数数据:" + i);
} else {
// 输入错误的信息
System.out.println("输入的不是整数!");
}
System.out.print("输入小数:");
if (scan.hasNextFloat()) {
// 判断输入的是否是小数
f = scan.nextFloat();
// 接收小数
System.out.println("小数数据:" + f);
} else {
// 输入错误的信息
System.out.println("输入的不是小数!");
}
scan.close();
}
}
/*执行以上程序输出结果为:
$ javac ScannerDemo.java
$ java ScannerDemo
输入整数:12
整数数据:12
输入小数:1.2
小数数据:1.2
コード例2:
import java.util.Scanner;
class ScannerDemo {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
double sum = 0;
int m = 0;
while (scan.hasNextDouble()) {
double x = scan.nextDouble();
m = m + 1;
sum = sum + x;
}
System.out.println(m + "个数的和为" + sum);
System.out.println(m + "个数的平均值是" + (sum / m));
scan.close();
}
}
/*执行以上程序输出结果为:
$ javac ScannerDemo.java
$ java ScannerDemo
12
23
15
21.4
end
4个数的和为71.4
4个数的平均值是17.85