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 方法将得到的标记转换为不同类型的值。
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的更多相关文章
- Java中main()的args的知识点浅谈
我们先来了解下Java中main()方法的默认定义格式: public static void main(String[] args){ }1.main方法是程序执行的入口,除了args这个形参变量可 ...
- Java面向对象 Main函数 静态的应用 单例设计模式
Java面向对象 Main函数 静态的应用与单例设计模式 知识概要 (1)Main函数的细解 (2)静态的应用,静态变量,静态代码块,静态函数 (3)单例设计模式 1.M ...
- Maven项目执行java入口main方法
在Maven项目中配置pom.xml文件加载maven-surefire-plugin插件来执行testng.xml,相信大家对此种用法已经非常熟悉了.但是有些场景可能需要我们去加载执行java的ma ...
- AndroidStudio运行java的main方法
新建一个java文件,含有main方法 package com.why.project.androidcnblogsdemo.utils; /** * Created by HaiyuKing * U ...
- 为什么java的main方法必须是静态的
今天看类型信息时发现一个问题,不能再main方法中打印this关键字的信息,这时想起了之前的知识,不能再静态方法中调用this.理由很简单,this表示“这个对象”,也就是声明一个类的对象,然而静态方 ...
- 1-为什么java的main方法必须是静态的
为什么java的main方法必须是静态的 今天看类型信息时发现一个问题,不能再main方法中打印this关键字的信息,这时想起了之前的知识,不能再静态方法中调用this.理由很简单,this表示“ ...
- java中main方法的 (String []args)
java中main方法的 (String []args) String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数.java 本身不存在不带String ...
- Java:main方法前面一定要加static?在main方法中一定要调用static方法?
今天敲代码的时候发现,出现了这样一个情况: 我在我在main方法中调用了一个函数,并且这个函数没有用static修饰,就像这样: 这样报错了!!! 我虽然学Java 的时间也不多,但这个问题也帮助我更 ...
- eclipse的maven项目,如何使用java run main函数
项目使用maven管理,一般说来就使用jetty:run了.但是对于做功能测试和集成测试的用例,需要使用自定义的quickrun来运行进行测试环境的参数设定和功能隔离,google一番发现maven有 ...
- [Java基础]java的main函数
1.main函数详解 main在编程中的形式:public static void main(String[] args) { - } public : 公共的. 权限是最大,在任何情况下都可以访问. ...
随机推荐
- setColorFilter()滤镜
----------转载于:http://blog.sina.com.cn/s/blog_5da93c8f01012pkj.html 通过setColorFilter可以实现滤镜效果. 如: ...
- openssl evp 哈希算法(md5,sha1,sha256)
1. 简述 openssl提供了丰富密码学工具,一些常用的哈希算法 比如md5,sha 可以直接用提供的md5.h ,sha.h 接口使用: 为了方便开发者使用,openssl 又提供了一个EVP, ...
- 001_kafka起步
一.简介 Kafka is a distributed, partitioned, replicated commit log service. It provides the functionali ...
- C#预编译指令之#region
#region和#endregion是一个区域注释(注释一段话.但是不是AU3内置的语法.内置的注释是 ";" 和 "#cs" 与 "#ce" ...
- 51nod 1158 全是1的最大子矩阵
题目链接:51nod 1158 全是1的最大子矩阵 题目分类是单调栈,我这里直接用与解最大子矩阵类似的办法水过了... #include<cstdio> #include<cstri ...
- div仿textarea
CSS代码: .test_box { width: 400px; min-height: 120px; max-height: 300px; _height: 120px; margin-left: ...
- 电源相关知识—S0、S1(POS)、S2、S3(STR)、 S4、S5、睡眠、休眠、待机
转 http://blog.sina.com.cn/s/blog_52f28dde0100l3ci.html APM https://en.wikipedia.org/wiki/Advanced_Po ...
- iOS流量监控
http://code4app.com/snippets/one/iOS%E6%B5%81%E9%87%8F%E7%9B%91%E6%8E%A7/5020ba7a6803fae325000000 1. ...
- [vijos P1083] 小白逛公园
不知怎地竟有种错觉此题最近做过= =目测是类似的?那道题貌似是纯动归? 本来今晚想做两道题的,一道是本题,一道是P1653疯狂的方格取数或NOI08 Employee,看看现在的时间目测这个目标又达不 ...
- 利用ftp端口设置,浅谈windows防火墙之应用+ftp直接资源管理器登陆
win服务器的版本是不错的.防火墙也比较能用.server-u 6.4则是比较稳定.兼容性好的的版本,所以很多人在用 1.服务器为了安全,一般开启windows高级防火墙,在网络连接处右键鼠标,有弹出 ...