可以在命令行運行java程序時加上程序的參數。
例子如下:
public class HelloWorld{
public static void main(String args[]){
System.out.println("temp=" + args[0]);
}
}
源代碼截圖:
解釋一下: String[ ] args
該參數,是一個字元串數組,用來接收從命令行輸入的參數
1. 參數之間用空格隔開
2. java解釋器會自動處理,把用空格隔開的每一個參數通過args數組傳遞給買呢()方法。
3. 參數的下標從0開始,args[0]表示第一個參數,例如java HelloWorld 10 20 30
4.可以有多個空格,多個空格會被忽略。
(1)java讀取命令行參數擴展閱讀:
Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程 。
Java具有簡單性、面向對象、分布式、健壯性、安全性、平台獨立與可移植性、多線程、動態性等特點。Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等 。
2. 編寫java程序,使用命令行參數讀取兩個整數N和K,使用牛頓迭代法求N的K階方根
packagetest;
importjava.util.Scanner;
/**
*@author:鄭旭東
*@company:通廣電子
*@time:2014年10月14日下午3:03:35
*/
publicclassNewton{
staticintn;
staticinty;
staticdoubleres;
publicstaticdoublefunc(doublex){
doublek=1;
inti;
for(i=0;i<n;i++){
k*=x;
}
returnk-y;
}
publicstaticdoublefunc1(doublex){
doublek=1;
inti;
for(i=0;i<n-1;i++){
k*=x;
}
returnn*k;
}
publicstaticintNewtonn(doublex,doubleprecision,intmaxcyc){
doublex1,x0;
intk;
x0=x;
for(k=0;k<maxcyc;k++){
if(func1(x0)==0.0){
System.out.println("迭代過程中導數為0!");
return0;
}
x1=x0-func(x0)/func1(x0);
if(Math.abs(x1-x0)<precision||Math.abs(func(x1))<precision){
res=x1;
return1;
}
else
x0=x1;
}
System.out.println("迭代次數達到預期值!");
return0;
}
@SuppressWarnings({"resource"})
publicstaticvoidmain(Stringargs[]){
doublex,precision;
intmaxcyc;
System.out.println("請輸入被開方數:");
Scannerscanner=newScanner(System.in);
y=scanner.nextInt();
System.out.println("請輸入開方數:");
n=scanner.nextInt();
System.out.println("請輸入初始迭代值:");
x=scanner.nextInt();
System.out.println("請輸入最大迭代次數:");
maxcyc=scanner.nextInt();
System.out.println("請輸入精度值(如0.00001):");
precision=scanner.nextDouble();
if(Newtonn(x,precision,maxcyc)==1){
System.out.println("結果為:"+res);
}
else
System.out.println("迭代失敗!");
}
}
手打望採納...
3. java main方法中的命令行參數
作用:
當你使用命令行的形式運行.class文件時,向你的類傳遞參數.
C:\>java
YourClassName
參數1
[參數2
參數3
....]
參數之間用一個空格作為間隔符.
String[] args 這個字元串數組是保存運行main函數時輸入的參數的,例如main函數所在的類名為test
那麼你在cmd運行
java
test
a b
c 時,args[0]
= a
,args[1]=b,
args[2]=c
你就可以在你的程序中調用你輸入的這些變數了。
args[]不就是那個字元串This is a simple Java program嗎?
-------完全不是的,你理解不對。這樣好了,你在運行的時候加個參數,比如 java test XX。然後在你的main函數裡面加這段話:System.out.println("arg is"+args[0]),然後看看輸出是什麼?
是不是這個:
This is a simple Java program
arg is XX
在運行時輸入java test xx yy zz,並且在你的main函數裡面加這段話:System.out.println("arg is"+args[0]+" "+args[1]+" "+args[2]),然後看看輸出是什麼?
是不是:
This is a simple Java program
arg is xx yy zz
現在你理解了嗎。。。
如果沒關系,為什麼程序中去掉String args[]會出現錯誤?
--------之所以去掉會出錯在於,不帶String args[]的main函數和帶String args[]的main函數,本質上已經不是同一個函數了,java 本身不存在不帶String args[]的main函數,所以當然出錯了。
4. 如何識別java命令行編譯參數
javac
用法:javac <選項> <源文件>
其中,可能的選項包括:
-g 生成所有調試信息
-g:none 不生成任何調試信息
-g:{lines,vars,source} 只生成某些調試信息
-nowarn 不生成任何警告
-verbose 輸出有關編譯器正在執行的操作的消息
-deprecation 輸出使用已過時的 API 的源位置
-classpath <路徑> 指定查找用戶類文件的位置
-cp <路徑> 指定查找用戶類文件的位置
-sourcepath <路徑> 指定查找輸入源文件的位置
-bootclasspath <路徑> 覆蓋引導類文件的位置
-extdirs <目錄> 覆蓋安裝的擴展目錄的位置
-endorseddirs <目錄> 覆蓋簽名的標准路徑的位置
-d <目錄> 指定存放生成的類文件的位置
使用-d參數,如類中定義了包,則編譯時會自動生成包, 如:javac -d . helloworld.java
表示在當前目錄下編譯Helloworld 類。.表示當前目錄,如helloword中定義有包,則在當前目錄下生成包:
-encoding <編碼> 指定源文件使用的字元編碼
-source <版本> 提供與指定版本的源兼容性
-target <版本> 生成特定 VM 版本的類文件
-version 版本信息
-help 輸出標准選項的提要
-X 輸出非標准選項的提要
-J<標志> 直接將 <標志> 傳遞給運行時系統
java
用法: java [-選項] 類 [參數...]
(執行一個類)
或者 java [-選項] -jar jar文件 [參數...]
(執行一個jar文件)
其中,可能的選項包括:
-client 選擇 "client" VM(ginger547:應該是指Virtual Machine)
-server 選擇 "server" VM
-hotspot 與 "client" VM同義 [不贊成]
默認情況的VM是client.
-cp <一個文件夾和zip/jar文件組成的類搜索路徑>
-classpath <一個文件夾和zip/jar文件組成的類搜索路徑>
一個由文件夾,JAR壓縮文件,或者ZIP壓縮文件組成的用來搜索類的列表
-D<名字>=<值>
設置一個系統屬性
-verbose[:class|gc|jni]
使詳細輸出變的可用
-version 列印產品版本然後退出
-version:<值>
只運行指定版本
-showversion 列印產品版本後繼續
-jre-restrict-search | -jre-no-restrict-search
在版本搜索的時候,包含/排除用戶私人的JRE
-? -help 列印幫助信息
-X 列印非標准選項幫助
-ea[:<包名>...|:<類名>]
-enableassertions[:<包名>...|:<類名>]
使斷言可用
-da[:<包名>...|:<類名>]
-disableassertions[:<包名>...|:<類名>]
是斷言不可用
-esa | -enablesystemassertions
使系統級斷言可用
-dsa | -disablesystemassertions
使系統級斷言不可用
-agentlib:<庫名>[=<選項>]
載入本地代理庫<庫名>,例如. -agentlib:hprof
同時可查看, -agentlib:jdwp=help和 -agentlib:hprof=help
-agentpath:<路徑名>[=<選項>]
通過全路徑名來載入本地代理庫
-javaagent:<jar路徑>[=<選項>]
載入Java編程語言代理,可查看 java.lang.instrument
5. JAVA如何從命令行讀入一個String
比如你現在有一個可以運行的class文件叫做A.class。那麼在命令行中可以這樣執行這個程序:
java A arg
其中arg是A需要的參數。那麼A是怎麼得到這個arg的呢。基本上是這樣的:
public static void main(String[] args)
{
if(args.length > 0)
{
String str = arg[0];
}
}
這是在A.java中的main函數,這里只是得到了第一個參數的做法,如果想得到更多的參數,只要做一個簡單的循環遍例這個數組args就可以了。
6. java 命令行 傳遞參數
不要在Java中處理「<」(重定向)符號,那是留給操作系統來處理的。
要想將將輸入從定向文件傳遞給Java程序,可採用如下辦法。
(1)首先製作批文件(Windows下為.bat文件,Linux/UNIX下為.sh文件)。給你作個例子(以Windows為例,製作一個名稱為start.bat的文件):
@set/p A= >nul
@set/p B= >nul
@set/p C= >nul
@set/p D= >nul
@java 您的java啟動類名 %A% %B% %C% %D%
@set/p A= <nul
@set/p B= <nul
@set/p C= <nul
@set/p D= <nul
這里只有四個參數,您可以添加更多的參數。
之後編寫輸入重定向文件(in.txt),內容範例如下:
para1Value
para2Value
para3Value
...
在執行的時候,使用格式如下:
start.bat < in.txt
這時,您的Java啟動類.main才能接收到從定向文件里的參數。
建議在批文件中可以多設一些參數,即使輸入重定向文件內提供的參數值數量不足也沒有關系,操作系統不會傳遞沒無值參數。
7. java程序如何獲取命令行參數
args[],中括弧里0是第一個命令行參數,1是第二個,以此類推。
8. java如何從命令行輸入和輸出數據
import java.util.*;
import java.io.*;
import javax.swing.JOptionPane;
public class SysIn
{
public static void main(String [] args)
{
【java.util包中的Scanner類】
Scanner sc = new Scanner(System.in);
System.out.println("請輸入第一串字元:");
String firStr = sc.next();
System.out.println("你輸入的是" +firStr);
注意事項:next()讀取一個字元串,該字元串在一個空白符之前結束
(8)java讀取命令行參數擴展閱讀
其他java從命令行輸入和輸出數據
1、【java.io包中的BufferedReader類】
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("請輸入第二串字元:");
String secStr=null;
try
{
secStr=bf.readLine();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("你輸入的是" + secStr);
注意事項:nextByte()讀取一個byte類型整數--其他類型整數類推
2、【調用 javax.swing.JOptionPane 類】
String jop = JOptionPane.showInputDialog
(null,"Please Input:","InputDialog",JOptionPane,QUESTION_MESSAGE);
System.out.println("你輸入的第三串字元:「 + jop);
}
}
注意事項:nextLine()讀取一行文本
9. JAVA在命令行接受參數進行運算的問題
import java.util.*;
public class Test{
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("請輸入第一個數:");
int num1=in.nextInt();
System.out.println("請輸入第二個數:");
int num2=in.nextInt();
int sum=num1+num2;
System.out.println(("輸入的值的和為:"+sum);
}
}