zoukankan      html  css  js  c++  java
  • 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:Usersfgy>javac MainArgs.java

    C:Usersfgy>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("
    ");    
    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,并在其中写入刚才输入的内容。

  • 相关阅读:
    谈谈Windows Wow64
    Windows x86 下的 静态代码混淆
    Android so 文件进阶<二> 从dlsym()源码看android 动态链接过程
    You should blog even if you have no readers
    android app启动过程
    Android so文件进阶 <一>
    AndroidStudio+ideasmali动态调试smali汇编
    32位进程注入64位进程
    What is Windows Clustering
    Delphi实用小function
  • 原文地址:https://www.cnblogs.com/createyuan/p/5629645.html
Copyright © 2011-2022 走看看