java實驗聯合編譯
你是想把所有的類編譯成一個文件?這是不可能的哦。一個class文件只能對應一個java文件的。你如果想把他們弄成一個文件的話,可以用jar命令把這幾個文件打成jar包。不過要保證jar包裡面只有一個main方法。
B. Java簡單編譯問題(結合批處理)
我曾經研究了這個問題研究了一天,查了很多資料
這是個很難說清楚的問題,如果你的java文件沒有引用外部的jar與其他的類,javac是可以的
前一段時間我寫了遞歸編譯項目的小程序,不幸的是編譯文件沒有我想像中的容易。
因為編譯.java是需要關聯的jar和類的,而javac又無法動態的提供所需的jar或類,所以想用批處理通吃是不實際的
所以盡量用IDE編譯吧,等你有一定能力的時候看看ant,專門編譯項目的
C. 如何用Java代碼編譯Java文件
簡單點的,自己去運行javac編譯
復雜點的,javax.tools.ToolProvider有個getSystemJavaCompiler方法,他可以幫你找,並在內存中編譯
D. 簡述JAVA程序的編輯編譯和運行過程
Java應用程序的開發周期包括編譯、下載、解釋和執行幾個部分。Java編譯程序將 Java源程序翻譯為JVM可執行代碼--位元組碼。Java將符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查 表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全性。
運行JVM位元組碼的工作是由解釋器( java命令 )來完成的。解釋執行過程分三部進行:代碼的裝入、代碼的校驗和代碼的執行。裝入代碼的工作由"類裝載器"(class loader)完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調用的類。當類裝載器裝入一個類時,該類被放 在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機上的所有類都在同一地址空間內,而所有從外 部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。當裝入 了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用同特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的 內存布局,Java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。
E. 如何用javac 和java 編譯運行整個Java工程
你不用去關心它後面做了些什麼,執行了哪些命令,基於什麼原理。然而也是這種過分的依賴往往讓人散失了最基本的技能,當到了一個沒有IDE的地方,你便覺得無從下手,給你個代碼都不知道怎麼去跑。好比給你瓶水,你不知道怎麼打開去喝,然後活活給渴死。 之前用慣了Myeclipse, Java文件編譯運行的命令基本忘得一干二凈。現在項目出了原型,放到伺服器上去測試 一、javac命令javac 用於編譯Java文件,格式為:java [options] [sourcefiles] [@files]其中:options:命令行選項;sourcefiles:一個或多個要編譯的源文件;@files:一個或多個對源文件進行列表的文件,有時候要編譯的文件很多,一個個敲命令會顯得很長,也不方便修改,可以把要編譯的源文件列在文件中,在文件名前加@,這樣就可以對多個文件進行編譯,對編譯一個工程很有用,方便,省事。 有幾個比較重要的選項:-d 用於指定編譯成的class文件的存放位置,預設情況下不指定class文件的存放目錄,編譯的class文件將和源文件在同一目錄下;-classpath 可以簡寫成-cp,用於搜索編譯所需的class文件,指出編譯所用到的class文件的位置,如jar、zip或者其他包含class文件的目錄,指定該選項會覆蓋CLASSPATH的設定;-sourcepath用於搜索編譯所需的源文件(即java文件),指定要搜索的源文件的位置,如jar、zip或其他包含java文件的目錄;需要注意windows下和linux下文件路徑分隔符和文件列表(即-classpath和-sourcepath指定的文件)分隔符的區別:windows下文件路徑分隔符用 \ ,文件列表分隔符用分號 ;linux下文件路徑分隔符用 / ,文件列表分隔符用冒號 :二、java命令java 用於執行程序,格式如下:java [options] classfile options:命令行選項,一般用於 -classpath 指定要執行的文件所在的位置以及需要用到的類路徑,包括jar、zip和class文件目錄,會覆蓋CLASSPATH的設定三、腳本如果要敲的命令很長,每次要編譯運行的時候都要重新敲一遍,這是一件很痛苦的事情,所以用腳本可以大大方便你的工作量。在linux下用shell腳本,windows下用bat批處理程序。因為是在linux下,我這里只是簡單介紹一下shell,關於bat批處理程序的語法自己網路一下,不難。 1. 開頭linux有很多不同的shell,通常使用bash(bourne again shell),程序必須以下面的行開始:#!/bin/sh #!用來告訴系統用後面的參數來執行程序,這里使用的是/bin/sh要使你的腳本能夠執行,還必須讓這個文件有可執行許可權,使用下面命令更改文件許可權:chmod +x filename 2. 注釋以#開始的句子表示注釋,一直到這行結束,多寫注釋有利於以後重新看的時候知道自己在做什麼3. 變數shell的腳本的變數都是字元串,不用申明類型,定義的時候直接 變數=值 即可,用到變數的的時候用 $變數 或者 ${變數},echo命令用於列印,舉個例子:#!
F. JAVA中聯合編譯時保存源代碼的文本怎樣命名
聯合編譯時很多個類寫在一個源文件里的意思嗎??
如果是這樣,我印象中,一個源文件里只能出現一個public 聲明的類,
其他的類可以是預設的聲明。
源文件的名字是public類的類名.java
不能有多個public類,如果都是預設的聲明,源文件的名字並不重要。
G. 如何編譯並運行.java源程序
java源程序是運行不了的。java程序要先編譯成class文件後,可以運行class文件。如果你是用eclipse(myeclipse)這個會自動編譯的,你直接運行就行了。如果沒有編譯軟體,在控制台,找到java源代碼路徑,用javac
命令可編譯該源代碼,編譯完了再用java命令可運行此class文件
H. java 的聯合編譯問題
首先
java中一個主類中只能有一個類聲明成public,你聲明了兩個,你應該將publicclassFamily中的public去掉。
count=f.name(count);
f.name(值);這個方法是將值賦給Family類型的對象f中屬性為name
count不可能得到f.name()的值,類型不對一個String一個int;
你可以f.name(count);或f.name = count+"";
I. 在java中同時編譯幾個類
原因是沒有import進java.util.Date和java.util.GregorianCalendar兩個類
import java.util.Date;
import java.util.GregorianCalendar;
public class EmployeeTest {
public static void main(String[] args) {
// fill the staff array with three Employee objects
Employee[] staff = new Employee[3];
staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);
staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);
staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);
// raise everyone's salary by 5%
for (Employee e : staff)
e.raiseSalary(5);
// print out information about all Employee objects
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay=" + e.getHireDay());
}
}
class Employee {
public Employee(String n, double s, int year, int month, int day) {
name = n;
salary = s;
GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);
// GregorianCalendar uses 0 for January
hireDay = calendar.getTime();
}
public String getName() {
return name;
}
public double getSalary() {
return salary;
}
public Date getHireDay() {
return hireDay;
}
public void raiseSalary(double byPercent) {
double raise = salary * byPercent / 100;
salary += raise;
}
private String name;
private double salary;
private Date hireDay;
}
J. JAVA程序編譯
/*
* Door.java 設計門的介面
*/
public interface Door {
public void openDoor(); //打開門
public void closeDoor(); //關閉門. 這兩個是所有門的共有屬性
}
----------------------------------
/*
* TheftDoor.java 防盜門 它可以開門也可以關門,還可以防盜.
*/
public class TheftDoor implements Door {
public void closeDoor() {
// TODO Auto-generated method stub
System.out.println("TheftDoor Close.");
}
public void openDoor() {
// TODO Auto-generated method stub
System.out.println("TheftDoor Open.");
}
public void theftProof(){
System.out.println("TheftDoor theftProof.");
}
}
--------------------------------
/*
* WaterDoor.java 這個防水門是在防盜門的基礎上設計的,
* 它不但可以開關,還可以放水防盜.
*/
public class WaterDoor extends TheftDoor{
public void closeDoor() {
// TODO Auto-generated method stub
System.out.println("WaterDoor Close.");
}
/*public void openDoor() {
// TODO Auto-generated method stub
System.out.println("WaterDoor Open.");
}*/
public void theftProof(){
System.out.println("WaterDoor theftProof.");
}
/*
* 上面這三個方法可以重寫也可以不重寫..這要看你了.
*/
public void waterProof(){
System.out.println("WaterDoor waterProof.");
}
}
--------------------------
//TestDoor.java 測試
public class TestDoor {
public static void main(String args[])
{
TheftDoor theftDoor = new TheftDoor();
theftDoor.closeDoor();
theftDoor.openDoor();
theftDoor.theftProof();
WaterDoor waterDoor = new WaterDoor();
waterDoor.waterProof();
waterDoor.openDoor(); // 如果這個方法沒有被重寫,輸出的就是 "TheftDoor Open."
waterDoor.closeDoor();// 這個方法被重寫了,輸出的是"WaterDoor Close."
}
}
///
繼承、抽象類、介面 是很繁瑣的東西,也是java 很重要的一部分東西.不是通過一兩個程序就能說明白的.當然,我寫的程序也不能涵蓋全部.
建議你系統的學習一下.先單獨學習,掌握,再學混合運用..
希望對你有所幫助.