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 方法将得到的标记转换为不同类型的值。

     import java.util.Scanner;
import java.io.File;
public class ScannerKeyBoardTest
{
public static void main(String[] args) throws Exception
{
//readFileCon();
//test2(); //通过键盘输入指定类型
Scanner scan = new Scanner(System.in);
Long l = scan.nextLong();
System.out.println("l is "+l);
}
//读取任何的数据输入返回String
public static void test1(){
Scanner scan = new Scanner(System.in); //使用 回车键 作为分隔符 默认使用 空格 制表键 回车作为分割付。
//scan.useDelimiter("\n");
while(scan.hasNext()){
System.out.println("next is " + scan.next());
}
} //读取Long型数据的输入返回Long
public static void test2(){
Scanner scan = new Scanner(System.in);
//当输入的为 非 Long数值时 推出循环
while(scan.hasNextLong()){//阻塞式
//System.out.println("has over scan.nextLong() begin....");
System.out.println("next is " + scan.nextLong());
//System.out.println("scan.nextLong() over has begin....");
}
}
//读取文件中的内容 并打印到控制台
public static void readFileCon()throws Exception
{
Scanner scan = new Scanner(new File("ScannerKeyBoardTest.java"));
System.out.println("fileContent is:");
while(scan.hasNextLine()){
System.out.println(scan.nextLine());
}
}
}

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

     import java.io.BufferedReader;
import java.io.InputStreamReader;
class BufferReaderKeyBoardTest
{
public static void main(String[] args) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String in = null;
while((in = br.readLine()) != null){
System.out.println("用户输入的是: "+in);
}
}
} 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));

     package ysu.hxy;
import java.util.*;
import java.io.*; public class BufferedReaderWriterDemo
{
public static void main(String[] args)
{
try
{
//缓冲System.in输入流
//System.in是位流,可以通过InputStreamReader将其转换为字符流
BufferedReader bufReader = new BufferedReader(new InputStreamReader(System.in));
//缓冲FileWriter
BufferedWriter bufWriter = new BufferedWriter(new FileWriter(args[0])); String input = null; //每读一行进行一次写入动作
while(!(input = bufReader.readLine()).equals("quit"))
{
bufWriter.write(input);
//newLine()方法写入与操作系统相依的换行字符,依执行环境当时的OS来决定该输出那种换行字符
bufWriter.newLine();
}
bufReader.close();
bufWriter.close();
}
catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("没有指定文件");
}
catch(IOException e)
{
e.printStackTrace();
}
}
}

编译运行上面的程序

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

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

java之main的更多相关文章

  1. Java中main()的args的知识点浅谈

    我们先来了解下Java中main()方法的默认定义格式: public static void main(String[] args){ }1.main方法是程序执行的入口,除了args这个形参变量可 ...

  2. Java面向对象 Main函数 静态的应用 单例设计模式

     Java面向对象 Main函数 静态的应用与单例设计模式 知识概要             (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...

  3. Maven项目执行java入口main方法

    在Maven项目中配置pom.xml文件加载maven-surefire-plugin插件来执行testng.xml,相信大家对此种用法已经非常熟悉了.但是有些场景可能需要我们去加载执行java的ma ...

  4. AndroidStudio运行java的main方法

    新建一个java文件,含有main方法 package com.why.project.androidcnblogsdemo.utils; /** * Created by HaiyuKing * U ...

  5. 为什么java的main方法必须是静态的

    今天看类型信息时发现一个问题,不能再main方法中打印this关键字的信息,这时想起了之前的知识,不能再静态方法中调用this.理由很简单,this表示“这个对象”,也就是声明一个类的对象,然而静态方 ...

  6. 1-为什么java的main方法必须是静态的

    为什么java的main方法必须是静态的   今天看类型信息时发现一个问题,不能再main方法中打印this关键字的信息,这时想起了之前的知识,不能再静态方法中调用this.理由很简单,this表示“ ...

  7. java中main方法的 (String []args)

    java中main方法的 (String []args)         String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数.java 本身不存在不带String ...

  8. Java:main方法前面一定要加static?在main方法中一定要调用static方法?

    今天敲代码的时候发现,出现了这样一个情况: 我在我在main方法中调用了一个函数,并且这个函数没有用static修饰,就像这样: 这样报错了!!! 我虽然学Java 的时间也不多,但这个问题也帮助我更 ...

  9. eclipse的maven项目,如何使用java run main函数

    项目使用maven管理,一般说来就使用jetty:run了.但是对于做功能测试和集成测试的用例,需要使用自定义的quickrun来运行进行测试环境的参数设定和功能隔离,google一番发现maven有 ...

  10. [Java基础]java的main函数

    1.main函数详解 main在编程中的形式:public static void main(String[] args) { - } public : 公共的. 权限是最大,在任何情况下都可以访问. ...

随机推荐

  1. MDK的一些设置(尤其是部分代码无法断点问题的解决)

    转自http://www.cnblogs.com/worldsing/p/3412323.html

  2. mac Zip 常用命令

    最通俗的用法 zip -q -r -e -m -o [yourName].zip someThing -q 表示不显示压缩进度状态 -r 表示子目录子文件全部压缩为zip  //这部比较重要,不然的话 ...

  3. jqury ajax 标准

    参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 ...

  4. 第九章 企业项目开发--分布式缓存Redis(1)

    注意:本章代码将会建立在上一章的代码基础上,上一章链接<第八章 企业项目开发--分布式缓存memcached> 1.为什么用Redis 1.1.为什么用分布式缓存(或者说本地缓存存在的问题 ...

  5. pwnable.kr-fd

    题目: 链接登录: ssh fd@pwnable.kr -p2222 查看文件及权限: ls –al 看到flag文件,但是当前用户fd并没有读权限. cat fd.c 分析程序: int argc ...

  6. BestCoder Round #40

    T1:Tom and pape (hdu 5224) 题目大意: 给出一个矩形面积N,求周长的最小值.(长&&宽&&面积都是正整数) N<=109 题解: 没啥好 ...

  7. 省常中模拟 day1

    第一题: 题目大意: 给出N个数的数列,如果相邻的两个数加起来是偶数,那么就可以把这两个数消掉,求最多能消掉多少数. 解题过程: 1.先自己手工模拟了几组数据,发现不管消除的顺序如何,最终剩下的是一定 ...

  8. spring-mvc xml文件的最基本配置

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  9. Jmeter—5 关联 响应数据传递-正则表达式提取器

    在测试过程中,遇到一个问题:用户登录成功后服务器会返回一个登录凭证,之后所有的操作都需要带上此凭证.我们怎么获取登录凭证并传递给后续的操作? Jmeter提供了正则表达式提取器,用变量提取参数,后续通 ...

  10. <我是一只IT小小鸟>读书笔记

    这篇文章给我感触最深的是开篇蒋宇东所出的一道选择题--今后的发展选择有三条:A.做一辈子IT民工:B.将大学时欠下来的债补上:C.改行. 他们用自己的成长故事告诉师弟师妹们:一定要弄清楚上大学首要的任 ...