Fork me on GitHub

java_main

 

Java中用户向系统传递参数的三种基本方式

 

main方法

在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。

这个main()方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。
 
为什么要这么定义,和JVM的运行有关系。
当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。
 
由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要是限制为public static。
 
对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。
main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类细必须String[],至于字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和sun java规范范例中mian参数名保持一致,取名为args。
 
因此,main()方法定义必须是:“public static void main(String 字符串数组参数名[])”。

main()方法中字符串参数数组作用是接收命令行输入参数的,命令行的参数之间用空格隔开。

public class HelloWorld2 {
    static {
        System.out.println("Hello Wordld!");
    }
    public static void main(String args[]){
        System.exit(0);
    }
}

这个main()方法执行的内容就一句"System.exit(0);" ,目的是让程序正常结束。那“HelloWorld!”是从哪里打印的,秘密就是在static打印的,因为static代码块的内容会在main调用前调用。

 

第一种通过main方法传递

    public class MainArgs   
    {  
        public static void main(String[] args)   
        {  
            System.out.println(args.length);  
            for(String str : args){  
                System.out.println(str);  
            }  
        }  
    }  

在运行 java程序后面跟的字符串(一个或多个用空格隔开)jvm将会把这些一个或多个字符串赋给args数组。当字符串中包含空格时则需要将完整的一个字符串用“”括起来。

执行时

C:\Users\fgy>javac MainArgs.java

C:\Users\fgy>java MainArgs we fie ow
3
we
fie
ow

 

第二种使用scanner类

使用Scanner类进行用户输入:可以输入用户指定的数据类型
Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的 next 方法将得到的标记转换为不同类型的值。

 1     import java.util.Scanner;  
 2     import java.io.File;  
 3     public class ScannerKeyBoardTest   
 4     {  
 5         public static void main(String[] args) throws Exception  
 6         {  
 7             //readFileCon();  
 8             //test2();  
 9       
10             //通过键盘输入指定类型  
11             Scanner scan = new Scanner(System.in);  
12             Long l = scan.nextLong();  
13             System.out.println("l is "+l);  
14         }  
15         //读取任何的数据输入返回String  
16         public static void test1(){  
17             Scanner scan = new Scanner(System.in);  
18       
19             //使用 回车键 作为分隔符 默认使用 空格 制表键  回车作为分割付。  
20             //scan.useDelimiter("\n");    
21             while(scan.hasNext()){  
22                 System.out.println("next is " + scan.next());  
23             }         
24         }  
25       
26         //读取Long型数据的输入返回Long  
27         public static void test2(){  
28             Scanner scan = new Scanner(System.in);  
29             //当输入的为 非 Long数值时 推出循环  
30             while(scan.hasNextLong()){//阻塞式  
31                 //System.out.println("has over scan.nextLong() begin....");  
32                 System.out.println("next is " + scan.nextLong());  
33                 //System.out.println("scan.nextLong() over has begin....");  
34             }  
35         }  
36         //读取文件中的内容 并打印到控制台  
37         public static void readFileCon()throws Exception  
38         {  
39             Scanner scan  = new Scanner(new File("ScannerKeyBoardTest.java"));  
40             System.out.println("fileContent is:");  
41             while(scan.hasNextLine()){  
42                 System.out.println(scan.nextLine());  
43             }  
44         }  
45     }  

 

第三种是使用BufferedReader类读取用户的输入:返回的只能是String类

 1     import java.io.BufferedReader;  
 2     import java.io.InputStreamReader;  
 3     class BufferReaderKeyBoardTest   
 4     {  
 5         public static void main(String[] args) throws Exception  
 6         {  
 7             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
 8             String in = null;  
 9             while((in = br.readLine()) != null){  
10                 System.out.println("用户输入的是: "+in);  
11             }         
12         }  
13     }   

System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

 

 

1. java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

2. 从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。

3. System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 

 

 1     package ysu.hxy;  
 2     import java.util.*;  
 3     import java.io.*;  
 4       
 5     public class BufferedReaderWriterDemo   
 6     {  
 7         public static void main(String[] args)   
 8         {  
 9             try  
10             {  
11                 //缓冲System.in输入流  
12                 //System.in是位流,可以通过InputStreamReader将其转换为字符流  
13                 BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));  
14                 //缓冲FileWriter  
15                 BufferedWriter bufWriter = new BufferedWriter(new FileWriter(args[0]));  
16       
17                 String input = null;  
18       
19                 //每读一行进行一次写入动作  
20                 while(!(input = bufReader.readLine()).equals("quit"))  
21                 {  
22                     bufWriter.write(input);  
23                     //newLine()方法写入与操作系统相依的换行字符,依执行环境当时的OS来决定该输出那种换行字符  
24                     bufWriter.newLine();  
25                 }  
26                 bufReader.close();  
27                 bufWriter.close();  
28             }  
29             catch(ArrayIndexOutOfBoundsException e)  
30             {  
31                 System.out.println("没有指定文件");  
32             }  
33             catch(IOException e)  
34             {  
35                 e.printStackTrace();  
36             }  
37         }  
38     }  

编译运行上面的程序

D:\hxy>java ysu.hxy.BufferedReaderWriterDemo test2.txt
111111111111
222222222222
quit

会在目录下产生一个文件test2.txt,并在其中写入刚才输入的内容。

 

posted on 2016-06-30 13:15  阳光-源泉  阅读(278)  评论(0编辑  收藏  举报

导航