Ⅰ 用java編寫一個程序,要求如下:
1.內部使用 C 的 longjmp 機制讓出一個協程。因此,如果一個 C 函數 foo 調用了一個 API 函數, 而這個 API 函數讓出了(直接或間接調用了讓出函數)。 由於 longjmp 會移除 C 棧的棧幀, Lua 就無法返回到 foo 里了。
2.為了迴避這類問題, 碰到 API 調用中調用讓出時,除了那些拋出錯誤的 API 外,還提供了三個函數: lua_yieldk, lua_callk,和 lua_pcallk 。 它們在讓出發生時,可以從傳入的 延續函數 (名為 k 的參數)繼續運行。
3.我們需要預設一些術語來解釋延續點。對於從 Lua 中調用的 C 函數,我們稱之為 原函數。從這個原函數中調用的上面所述的三個 C API 函數我們稱之為 被調函數。 被調函數可以使當前線程讓出。 (讓出發生在被調函數是 lua_yieldk, 或傳入 lua_callk 或 lua_pcallk 的函數調用了讓出時。)
4.假設正在運行的線程在執行被調函數時讓出。當再次延續這條線程,它希望繼續被調函數的運行。 然而,被調函數不可能返回到原函數中。 這是因為之前的讓出操作破壞了 C 棧的棧幀。 作為替代品,Lua 調用那個作為被調函數參數給出的 延續函數 。 正如其名,延續函數將延續原函數的任務。
5.注意這里那個額外的顯式的對延續函數的調用:Lua 僅在需要時,這可能是由錯誤導致的也可能是發生了讓出而需要繼續運行,才會調用延續函數。 如果沒有發生過任何讓出,調用的函數正常返回, 那麼 lua_pcallk (以及 lua_callk)也會正常返回。 (當然,這個例子中你也可以不在之後調用延續函數, 而是在原函數的調用後直接寫上需要做的工作。)
6.Lua 會把延續函數看作原函數。延續函數將接收到和原函數相同的 Lua 棧,其接收到的 lua 狀態也和 被調函數若返回後應該有的狀態一致。 (例如, lua_callk 調用之後, 棧中之前壓入的函數和調用參數都被調用產生的返回值所替代。) 這時也有相同的上值。 等到它返回的時候,Lua 會將其看待成原函數的返回去操作。
7.我們需要預設一些術語來解釋延續點。對於從 Lua 中調用的 C 函數,我們稱之為 原函數。 從這個原函數中調用的上面所述的三個 C API 函數我們稱之為 被調函數。 被調函數可以使當前線程讓出。 (讓出發生在被調函數是 lua_yieldk, 或傳入 lua_callk 或 lua_pcallk 的函數調用了讓出時。)
8.假設正在運行的線程在執行被調函數時讓出。當再次延續這條線程,它希望繼續被調函數的運行。 然而,被調函數不可能返回到原函數中。 這是因為之前的讓出操作破壞了 C 棧的棧幀。 作為替代品,Lua 調用那個作為被調函數參數給出的 延續函數 。 正如其名,延續函數將延續原函數的任務。
希望能幫到你,謝謝!
Ⅱ 如何編寫java程序
新建java第一種方法:
1。首先右擊滑鼠,新建一個文本文檔。
2。更改文本文檔的後綴名為
.java
。注意文件名必須和類名相同。
如果你的電腦沒有顯示後綴名的話需要對電腦進行一定的設置。
3。打開計算機——組織——文件夾選項——查看——將隱藏文件夾選項取消勾選即可。
建議將這個選項取消勾選,有很多的惡意程序會侵入我們的電腦,取消勾選可以很好的查看病毒等文件的類型。
4。右擊建好的文檔,選擇編輯即可進行java的編寫。
在編寫的時候我們有一定的格式,java語言的格式是為了我們日後更改程序方便而規定的,我們一定要遵循這種格式編寫。
第二種方法:
1直接新建一個記事本文檔,然後選擇保存。
注意保存時額位置,不要等到保存完卻找不到文件到哪了。
2在選擇保存的窗口中輸入後綴「.java」,然後保存即可。注意文件名必須和類名相同。
3同樣右擊文件,選擇編輯即可在文件中進行編輯了。
前兩個大括弧之間回車,第二對大括弧有一個間隔,直接按TAb鍵即可。
測試運行java程序:
打開運行命令,也可以直接在開菜單中輸入CMD調用命令窗口。
你的文件保存在哪裡就將你的文件目錄輸入到命令提示符窗口中,例如我的是D盤根目錄,所以我輸入「d:」。
編譯java文件,生成class文件:
在命令提示符中輸入「javac
文件名.java」,我的文件名為A,所以輸入javac
A.java然後回車,等待編譯。
運行文件:
繼續輸入「java
文件名」然後回車就可以運行我們寫好的文件了。
Ⅲ java語言如何編寫程序
如下:
Ⅳ 簡述JAVA程序的編輯編譯和運行過程
第一步(編譯): 創建完源文件之後,程序會先被編譯為.class文件。Java編譯一個類時,如果這個類所依賴的類還沒有被編譯,編譯器就會先編譯這個被依賴的類,然後引用,否則直接引用,這個有點象make。
如果java編譯器在指定目錄下找不到該類所其依賴的類的.class文件或者.java源文件的話,編譯器話報「cant find symbol」的錯誤。
第二步(運行):java類運行的過程大概可分為兩個過程:1、類的載入 2、類的執行。需要說明的是:JVM主要在程序第一次主動使用類的時候,才會去載入該類。也就是說,JVM並不是在一開始就把一個程序就所有的類都載入到內存中,而是到不得不用的時候才把它載入進來,而且只載入一次。
特別說明:java類中所有public和protected的實例方法都採用動態綁定機制,所有私有方法、靜態方法、構造器及初始化方法<clinit>都是採用靜態綁定機制。而使用動態綁定機制的時候會用到方法表,靜態綁定時並不會用到。
(4)java怎麼編程序擴展閱讀:
Java整個編譯以及運行的過程相當繁瑣,本文通過一個簡單的程序來簡單的說明整個流程。
Java代碼編譯:是由Java源碼編譯器來完成;
Java位元組碼的執行:是由JVM執行引擎來完成
Java程序從源文件創建到程序運行要經過兩大步驟:
1、源文件由編譯器編譯成位元組碼(ByteCode)
2、位元組碼由java虛擬機解釋運行。因為java程序既要編譯同時也要經過JVM的解釋運行,所以說Java被稱為半解釋語言( "semi-interpreted" language)。
Ⅳ 用java怎麼編程序
//你看看我這個 記得把這一行刪掉哦 老師會發現的
//第二題
import java.util.Scanner;
// 題目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個數字。
// 例如2+22+222+2222+22222(此時共有5個數相加),幾個數相加有鍵盤控制。
// 程序分析:關鍵是計算出每一項的值。
public class Eigth {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in).useDelimiter("\\s*");
//以空格作為分隔符
System.out.print("求s=a+aa+aaa+aaaa+...的值,請輸入a的值:");
int a = scan.nextInt();
System.out.print("求s=a+aa+aaa+aaaa+...的值,請輸入數字的個數:");
int n = scan.nextInt();
scan.close();//關閉掃描器
System.out.println(expressed(a,n)+add(a,n));
}
//求和表達式
private static String expressed(int a,int n){
StringBuffer sb = new StringBuffer();
StringBuffer subSB = new StringBuffer();
for(int i=1;i<n+1;i++){
subSB = subSB.append(a);
sb = sb.append(subSB);
if(i<n)
sb = sb.append("+");
}
sb.append("=");
return sb.toString();
}
//求和
private static long add(int a,int n){
long sum = 0;
long subSUM = 0;
for(int i=1;i<n+1;i++){
subSUM = subSUM*10+a;
sum = sum+subSUM;
}
return sum;
}
}
//第三題
import java.util.Scanner;
public class Two {
// 判斷101-200之間有多少個素數,並輸出所有素數
public static void main(String[] args) {
System.out.println("請輸入所求范圍:");
Scanner sc1 = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in);
int m = sc1.nextInt();
int n = sc2.nextInt();
int count = 0;
//統計素數個數
for (int i = m; i < n; i++) {
if (isPrime(i)) {
count++;
System.out.print(i + " ");
if (count % 10 == 0) {
System.out.println();
}
}
}
System.out.println();
System.out.println("在" + m + "和" + n + "之間共有" + count + "個素數");
}
//判斷素數
private static boolean isPrime(int n) {
boolean flag = true;
if (n == 1) {
flag = false;
} else {
for (int i = 2; i <= Math.sqrt(n); i++) {
if ((n % i) == 0) {
flag = false;
break;
} else {
flag = true;
}
}
}
return flag;
}
}
Ⅵ 用JAVA編寫一個程序,要求如下:
實現代碼如下:
Student類:
public class Student {
private String name;
private String sex;
private int age;
private double chinese;
private double math;
private double english;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getChinese() {
return chinese;
}
public void setChinese(double chinese) {
this.chinese = chinese;
}
public double getMath() {
return math;
}
public void setMath(double math) {
this.math = math;
}
public double getEnglish() {
return english;
}
public void setEnglish(double english) {
this.english = english;
}
}
-----------------------------------------------------------------
StudentTest類:(測試類)
import java.util.Scanner;
public class StudentTest {
public static void main(String[] args) {
Student student = new Student();
Scanner sc = new Scanner(System.in);
System.out.println("請輸入姓名:");
student.setName(sc.next());
System.out.println("請輸入性別:");
student.setSex(sc.next());
System.out.println("請輸入年齡:");
student.setAge(sc.nextInt());
System.out.println("請輸入語文成績、數學成績、英語成績:");
student.setChinese(sc.nextDouble());
student.setMath(sc.nextDouble());
student.setEnglish(sc.nextDouble());
Double count = student.getChinese()+ student.getMath()+student.getEnglish();
System.out.println("姓名:"+student.getName()+" 性別:"+student.getSex()+" 年齡:"+student.getAge());
System.out.println("總分:"+count+" 平均分:"+count/3);
}
}
運行結果為:
Ⅶ Java程序怎麼編寫
import java.util.Scanner;
class Parent{
private String name;
private String object;
private float point;
private Scanner item=new Scanner(System.in);
public Parent(){
System.out.println("請輸入姓名:");
this.name=item.next();
System.out.println("請輸入科目名稱:");
this.object=item.next();
System.out.println("請輸入成績:");
this.point=item.nextFloat();
}
public final void out(){
System.out.println("信息如下:");
System.out.println("姓名\t"+"科目\t"+"成績\t");
System.out.print(this.name+"\t"+this.object+"\t"+this.point);
}
}
class Sub extends Parent{
public Sub(){
out();
}
public static void main(String[] args){
Parent p=new Sub();
}
}
Ⅷ Java程序怎樣編寫
打開eclipse,依次找到菜單欄里的
「文件」-「新建」-「Java項目」。
創建Java項目,輸入項目名稱,點擊窗口下方「完成」
拉開項目文件夾,新建一個包,名稱最好是com.xxx
設置好包的名稱後,點擊窗口下方「完成」。
右鍵點擊建號的包,選擇「新建」,點擊「類」。
即創建一個新的類
輸入類的名稱,勾選「public static void main(String[] args)」。
點擊「完成」,成功創建一個類。
我們的第一個Java程序為:在控制台輸出「Hello World!」。
如圖在對應位置輸入:System.out.println("Hello World!");
菜單欄下方有個運行按鈕,點擊運行程序(
我們的Hello World在控制台成功輸出,這就是我們第一個簡單的Java程序。
Ⅸ java程序編寫
這個問題和多態有著直接關系,首先封裝兩個類,貓類和狗類,定義好屬性和值,定義行為,吃,跑,跳等,再新建一個方法實現他們,具體多態只是可以參考下面解釋。
Java的多態是java要實現的多種形式
一、實現多態的三個條件(前提條件,向上轉型、向下轉型)
1、繼承的存在;(繼承是多態的基礎,沒有繼承就沒有多態)
2、子類重寫父類的方法。(多態下會調用子類重寫後的方法)
3、父類引用變數指向子類對象。(涉及子類到父類的類型轉換)
向上轉型 Student person = new Student()
將一個父類的引用指向一個子類對象,成為向上轉型,自動進行類型轉換。此時通過父類引用變數調用的方法是子類覆蓋或繼承父類的方法,而不是父類的方法此時通過父類引用變數無法調用子類特有的方法。
向下轉型 Student stu = (Student)person;
將一個指向子類對象的引用賦給一個子類的引用,成為向下轉型,此時必須進行強制類型轉換。向下轉型必須轉換為父類引用指向的真實子類類型,,否則將出現ClassCastException,不是任意的強制轉換
向下轉型時可以結合使用instanceof運算符進行強制類型轉換,比如出現轉換異常---ClassCastException
關於java的基礎知識學習,一定要多看視頻 多看視頻 多看視頻 重要的事情說三遍,因為視頻不會使學習變得枯燥,推薦b站上高淇講得還不錯,可以看看視頻了解一下什麼是java中的多態。
二、多態(Polymorphism)按字面的意思就是「多種狀態」。在面向對象語言中,介面的多種不同的實現方式即為多態。引用Charlie Calverts對多態的描述——多態性是允許你將父對象設置成為一個或更多的他的子對象相等的技術,賦值之後,
1.把不同的子類對象都當作父類來看,可以屏蔽不同子類對象之間的差異,寫出通用的代碼,做出通用的編程,以適應需求的不斷變化。
2.賦值之後,父類型的引用就可以根據當前賦值給它的子對象的特性以不同的方式運作。也就是說,父親的行為像兒子,而不是兒子的行為像父親。
3.比如從某個基類派生出多個子類,其基類有一個虛方法Tdoit,然後其子類也有這個方法,但行為不同,然後這些子類對象中的任何一個可以賦給其基類對象的引用,或者說將子對象地址賦給基類指針,這樣其基類的對象就可以執行不同的操作了。
4.實際上你是在通過其基類的引用來訪問其子類對象的,你要做的就是一個賦值操作。
5.使用繼承性的結果就是當創建了一個類的家族,在認識這個類的家族時,就是把子類的對象當作基類的對象,這種認識又叫作upcasting(向上轉型)。這樣認識的重要性在於:我們可以只針對基類寫出一段程序,但它可以適應於這個類的家族,
6.因為編譯器會自動找出合適的對象來執行操作。這種現象又稱為多態性。而實現多態性的手段又叫稱動態綁定(dynamic binding)。
7.父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作(摘自「Delphi4 編程技術內幕」)。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。多態性在Object Pascal和C++中都是通過虛函數實現的。
8.多態指同一個實體同時具有多種形式。它是面向對象程序設計(OOP)的一個重要特徵。如果一個語言只支持類而不支持多態,只能說明它是基於對象的,而不是面向對象的。C++中的多態性具體體現在運行和編譯兩個方面。
9.運行時多態是動態多態,其具體引用的對象在運行時才能確定。編譯時多態是靜態多態,在編譯時就可以確定對象使用的形式。
10.多態:同一操作作用於不同的對象,可以有不同的解釋,產生不同的執行結果。在運行時,可以通過指向基類的指針,來調用實現派生類中的方法。
C++中,實現多態有以下方法:虛函數,抽象類,覆蓋,模板(重載和多態無關)。
OC中的多態:不同對象對同一消息的不同響應.子類可以重寫父類的方法
多態就是允許方法重名 參數或返回值可以是父類型傳入或返回。
Ⅹ 怎麼用eclipse編寫java程序
使用eclipse編寫和運行java程序(基礎)
1.首先java程序的運行你需要下載和安裝JDK,這是java運行的必備環境。
2.在桌面上找到eclipes,雙擊打開。
3.在eclipes啟動的過程中,會彈出一個窗口,讓你填寫java工作區的保存目錄,在這個目錄下會保存你寫的所有的源代碼文件,建議不要把工作區放在C盤
註:修改工作區路徑 File -> Switch Workspace
4.ecplies啟動完成之後,會有一個歡迎頁面,這個不用管,直接點擊左上方的差號,取消掉就可以了,隨後就進入eclipes的主界面。
5.新建項目:點擊左上角的file =》new =》java-Project,彈出一個小窗口,填上項目名稱點擊確認。
6.創建包:點擊項目,打開它找到src,右鍵點擊new =》package, 寫上包名,點擊確認。
7.創建java文件:右鍵軟體包,在軟體包下創建一個java文件,右鍵 點擊new =》class
8.編寫:在源代碼編輯器中寫上源代碼。並且保存。
9,運行:右鍵文件瀏覽器中的java文件,再點擊run as,下面命令行窗口中機會出現運行結果。