1.java程序的入口,main()方法——public static void main(String[] args){}
1)public修饰符:java类由JVM调用,为了让JVM可以自由的调用这个main()方法,所以使用public修饰符。
2)static修饰符:JVM调用这个主方法时,不会先创建该主类的对象。
3)void返回值:因为该方法被JVM调用,该方法的返回值返回给JVM,这里面没有意义。
根据方法调用规则:谁调用方法,谁负责为形参赋值。那么JVM怎么知道如何为args赋值呢?
public class argstest{
public static void main(String[] args){
System.out.println(args.length); //args的长度
for(String arg:args){ //进行循环遍历,查看args的内容
System.out.println(arg);
}
}
}
从上面的代码可以看出,args默认是空的。如果运行java程序时在类名后紧跟一个或多个字符串(多个字符串之间以空格隔开),JVM就会把这些字符串依次赋值给args数组。如
java argstest java test 如果参数本身加了空格,可以用"",这样JVM就会把这个空格也算进参数里。如 java argstest "java test"
2.使用Scanner类可以很方便地获取用户的键盘输入。Scanner主要提供了两个方法来扫描输入。
1)hasNextXxx():是否还有下一个输入项,其中Xxx可以死Int、Long等代表基本数据类型的字符串。如果只是判断是否包含下一个字符串,则直接使用hasNext()。
2)nextXxx():获取下一个输入项。
在默认情况下,Scanner使用空白(包括空格、tab空白、回车)作为多个输入项之间的分隔符。
import java.util.Scanner; //记得要导入Scaner类
public class scannertest{
public static void main(String[] args){
Scanner sr = new Scanner(System.in);//创建一个Scanner类对象sr,System.in代表键盘输入
while(sr.hasNext()){ //判断是否还有下一个输入项
System.out.println("键盘输入的内容是"+sr.next());
}
}
}
如果希望改变Scanner的分隔符,可以使用useDelimiter()方法来定义新的分隔符。
Scanner的读取操作可能被阻赛来等待信息的输入。如果输入源没有结束,Scanner又读不到更多输入项时(尤其在键盘输入时比价常见),Scanner的hasNext()和next()方法都有可能阻塞,hasNext()方法是否阻塞与和其相关的next()方法是否阻塞无关。
import java.util.Scanner;
public class test56{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
sc.useDelimiter("\t"); //以tab键结束当前的输出
while(sc.hasNext()){
System.out.println("不阻塞部分");
System.out.println("阻塞部分"+sc.next()); //即使hasNext()返回了true,next()方法是也可能造成阻塞
}
}//比如输入"天赋影响上限+tab+努力决定下限"会输出"...天赋影响上限"而"...努力决定下限"被阻塞了,因为此时还在等待输入,并没有扫描到tab,所以此时输入
} //还没有结束
3)Scanner提供了两个简单的方法来逐行读取。
boolean hasNextLine():返回输入源中是否还有下一行。
String nextLine():返回输入源中下一行的字符串。
关于next()方法和nextLine()方法的区别,可以看这里点击打开链接
import java.util.Scanner;
public class scannertest2{
public static void main(String[] args){
String s1,s2;
Scanner sc = new Scanner(System.in);
System.out.println("输入第一个字符串");
s1=sc.next();
//s2=sc.nextLine();
System.out.println("第一个字符串是"+s1);
System.out.println("输入第二个字符串");
s2=sc.nextLine();
System.out.println("第二个字符串是"+s2);
System.out.println("第一和第二字符串的内容是"+s1+s2);
}
}
上面代码中,运行程序,输入a b c d+回车,会输出
其原因是因为nextLine()方法自动读取了next()方法去掉的Enter作为结束符,所以无法给s2从键盘获取输入值。如果要解决,可以在s1=sc.next();后加s2=sc.nextLine();
4)Scanner不仅可以获取字符串输入,也可以获取任何基本类型的输入项,如
import java.util.Scanner;
public class scannertest3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNextLong()){ //判断是否还有下一个纯Long型的数据。如果没有,直接跳出。
System.out.println("键盘输入的内容是"+sc.next());
}
}
}
5)Scanner不仅能读取用户的键盘输入,还可以读取文件输入
import java.util.Scanner;
import java.io.*; //记得导入这个包
public class scannertest4{
public static void main(String[] args)throws Exception{
Scanner sc = new Scanner(new File("scannertest4.java")); //将一个File对象作为Scannner的构造器参数,Scanner读取文件内容
System.out.println("scannertest4.java文件内容如下");
sc.useDelimiter("/n");
while(sc.hasNext()){
System.out.println(sc.next()); //必须使用nextLine()方法获取整行输出
} //如果使用next()方法,那么就会把空格和tab也当作分割符,那么这时就要用useDelimiter("/n")
}
}