當前位置:首頁 » 編程軟體 » java編譯過程不會出錯嗎

java編譯過程不會出錯嗎

發布時間: 2022-05-25 03:19:50

java程序報錯怎麼解決

一般是由於你的程序需要訪問的文件的許可權問題,查看訪問的文件的屬性,看看許可權,是不是為只讀許可權,然後修改許可權,設置為完全控制最好,然後再次運行程序就可以啦。

如果還是報錯拒絕訪問,可能就是由於那個文件所在的文件位置的訪問許可權問題,這個時候,只要把你所要訪問的那個文件移到D盤或者其他盤(C盤以外的其他盤都可以),然後再次運行程序,就可以啦。

② java中throw拋出的一些異常,程序不進行處理程序編譯也不會錯誤

不會,拋出異常本意就是在某些不滿足條件的時候終止程序運行,但是也可以選擇捕獲處理,捕獲後就不會使程序終止。但是為什麼有的系統方法必須讓你捕獲呢?那是因為該方法使用throws關鍵字聲明了,作用就是將throw拋出的異常顯示的交給調用者處理,如果調用者不處理,就不try-catch那麼才會編譯不通過。

③ 在java語言中不同數據類型的數據不能進行運算會產生編譯錯誤嗎

Java 是由 C++發展而來的,保留了 C++的大部分內容,其編程方式類似於 C++。但 Java 的句法更清晰、規模更小、更易學。Sun 公司對多種程序設計語言進行了深入研究,並摒棄了其他語言的不足之處,最終退出了 Java。正是這樣,Java 從根本上解決了 C++的固有缺陷,形成了一種新的完全面向對象的語言。Java 和 C/C++的相似之處多於不同之處,有 C 基礎的讀者,學習 Java 會更容易。相比較而言,Java 的編程環境更為簡單。

剛開始的時候我們也搞不清這些概念,不過後來就慢慢清晰了,首先和大家談談Java和js的區別,最簡單的區別就是一個是後端,一個是前端。

1.指針

JAVA語言讓編程者無法找到指針來直接訪問內存無指針,並且增添了自動的內存管理功能,從而有效地防止了c/c++語言中指針操作失誤,如野指針所造成的系統崩潰。但也不是說JAVA沒有指針,虛擬機內部還是使用了指針,只是外人不得使用而已。這有利於Java程序的安全。

2.多重繼承

c++支持多重繼承,這是c++的一個特徵,它允許多父類派生一個類。盡管多重繼承功能很強,但使用復雜,而且會引起許多麻煩,編譯程序實現它也很不容易。Java不支持多重繼承,但允許一個類繼承多個介面(extends+implement),實現了c++多重繼承的功能,又避免了c++中的多重繼承實現方式帶來的諸多不便。

3.數據類型及類

Java是完全面向對象的語言,所有函數和變數部必須是類的一部分。除了基本數據類型之外,其餘的都作為類對象,包括數組。對象將數據和方法結合起來,把它們封裝在類中,這樣每個對象都可實現自己的特點和行為。而c++允許將函數和變數定義為全局的。此外,Java中取消了c/c++中的結構和聯合,消除了不必要的麻煩。

4.自動內存管理

Java程序中所有的對象都是用new操作符建立在內存堆棧上,這個操作符類似於c++的new操作符。下面的語句由一個建立了一個類Read的對象,然後調用該對象的work方法:

④ java中中是不是所有向下強制轉換都會在運行時出錯 有的能編譯不能運行,有的不可以編譯也不可以

通常使用強制類型轉換將父類型轉換成子類型時,是不會有編譯錯誤的,只會有運行時拋出ClassCast的異常,如果編譯提示錯誤,那肯定是因為你轉換的時候類型就匹配,被轉換的對象和目標類型不是子父類/介面實現類的關系,自然編譯不通過

⑤ Java程序中的問題 short s1=1; s1+=1;為什麼編譯不出錯精度會損失嗎

short
s=31;
編譯沒問題是因為short的范圍是-32768~32767的,雖然31默認是int但是轉換為short不會超過范圍,所以不報錯。
你寫short
s=32768;
就會發現
這個也是報錯的。
而short
s1=31l;
「l」標明當前數字是long型,這樣就不能轉換為short型了

⑥ java編譯過程沒有錯誤為什麼運行過程後出現出現錯誤或無法載入主類

java中的錯誤一般分為編譯錯誤或者運行時的錯誤或異常
編譯錯誤一般指的是語法上的錯誤,比如引用未付值的變數,語句後少了分號等等通過編譯器可以檢查出來的錯誤
運行時的錯誤或異常,是指編譯器無法檢查出來在程序中卻又不能正確執行的代碼,比如兩個變數相除,除數為0,或者是你引用了null值等等,面向對象的語言中萬物皆對象,運行時的各種異常或錯誤也是java的類的一部分,你可以參見j2se的api,在java.lang這個包下的Throwable就是所有異常和錯誤的父類,你可以看一看
java在運行出錯時,通常都會在控制台上列印出錯信息,比如
Exception in thread "main" java.lang.NullPointerException
at Test.main(Test.java:6)
那個java.lang.NullPointerException就是異常的名稱,你就可以去API中查看此異常,就知道這個異常是什麼意思了,第二行Test.java:6的意思就是Test.java這個文件第6行報的錯誤

無法載入主類,你是怎麼判斷的,如果你是用命令行啟動,一般情況下看看檢查你的class_path設置的對不對,你運行的class文件有沒有,運行的class文件中有沒有main方法,還有就是引用的其他class文件或jar包在不在classpath的路徑下

祝你好運!

⑦ 關於JAVA編譯中的錯誤問題

Java虛擬機(JVM)是可運行Java代碼的假想計算機。只要根據JVM規格描述將解釋器移植到特定的計算機上,就能保證經過編譯的任何Java代碼能夠在該系統上運行。本文首先簡要介紹從Java文件的編譯到最終執行的過程,隨後對JVM規格描述作一說明。

一.Java源文件的編譯、下載、解釋和執行
Java應用程序的開發周期包括編譯、下載、解釋和執行幾個部分。Java編譯程序將Java源程序翻譯為JVM可執行代碼?位元組碼。這一編譯過程同C/C++的編譯有些不同。當C編譯器編譯生成一個對象的代碼時,該代碼是為在某一特定硬體平台運行而產生的。因此,在編譯過程中,編譯程序通過查表將所有對符號的引用轉換為特定的內存偏移量,以保證程序運行。Java編譯器卻不將對變數和方法的引用編譯為數值引用,也不確定程序執行過程中的內存布局,而是將這些符號引用信息保留在位元組碼中,由解釋器在運行過程中創立內存布局,然後再通過查表來確定一個方法所在的地址。這樣就有效的保證了Java的可移植性和安全性。

運行JVM位元組碼的工作是由解釋器來完成的。解釋執行過程分三部進行:代碼的裝入、代碼的校驗和代碼的執行。裝入代碼的工作由"類裝載器"(class loader)完成。類裝載器負責裝入運行一個程序需要的所有代碼,這也包括程序代碼中的類所繼承的類和被其調用的類。當類裝載器裝入一個類時,該類被放在自己的名字空間中。除了通過符號引用自己名字空間以外的類,類之間沒有其他辦法可以影響其他類。在本台計算機上的所有類都在同一地址空間內,而所有從外部引進的類,都有一個自己獨立的名字空間。這使得本地類通過共享相同的名字空間獲得較高的運行效率,同時又保證它們與從外部引進的類不會相互影響。當裝入了運行程序需要的所有類後,解釋器便可確定整個可執行程序的內存布局。解釋器為符號引用同特定的地址空間建立對應關系及查詢表。通過在這一階段確定代碼的內存布局,Java很好地解決了由超類改變而使子類崩潰的問題,同時也防止了代碼對地址的非法訪問。

隨後,被裝入的代碼由位元組碼校驗器進行檢查。校驗器可發現操作數棧溢出,非法數據類型轉化等多種錯誤。通過校驗後,代碼便開始執行了。

Java位元組碼的執行有兩種方式:
1.即時編譯方式:解釋器先將位元組碼編譯成機器碼,然後再執行該機器碼。
2.解釋執行方式:解釋器通過每次解釋並執行一小段代碼來完成Java位元組碼程 序的所有操作。
通常採用的是第二種方法。由於JVM規格描述具有足夠的靈活性,這使得將位元組碼翻譯為機器代碼的工作

具有較高的效率。對於那些對運行速度要求較高的應用程序,解釋器可將Java位元組碼即時編譯為機器碼,從而很好地保證了Java代碼的可移植性和高性能。

二.JVM規格描述
JVM的設計目標是提供一個基於抽象規格描述的計算機模型,為解釋程序開發人員提很好的靈活性,同時也確保Java代碼可在符合該規范的任何系統上運行。JVM對其實現的某些方面給出了具體的定義,特別是對Java可執行代碼,即位元組碼(Bytecode)的格式給出了明確的規格。這一規格包括操作碼和操作數的語法和數值、標識符的數值表示方式、以及Java類文件中的Java對象、常量緩沖池在JVM的存儲映象。這些定義為JVM解釋器開發人員提供了所需的信息和開發環境。Java的設計者希望給開發人員以隨心所欲使用Java的自由。

JVM定義了控制Java代碼解釋執行和具體實現的五種規格,它們是:
JVM指令系統
JVM寄存器
JVM棧結構
JVM碎片回收堆
JVM存儲區

2.1JVM指令系統

JVM指令系統同其他計算機的指令系統極其相似。Java指令也是由 操作碼和操作數兩部分組成。操作碼為8位二進制數,操作數進緊隨在操作碼的後面,其長度根據需要而不同。操作碼用於指定一條指令操作的性質(在這里我們採用匯編符號的形式進行說明),如iload表示從存儲器中裝入一個整數,anewarray表示為一個新數組分配空間,iand表示兩個整數的"與",ret用於流程式控制制,表示從對某一方法的調用中返回。當長度大於8位時,操作數被分為兩個以上位元組存放。JVM採用了"big endian"的編碼方式來處理這種情況,即高位bits存放在低位元組中。這同 Motorola及其他的RISC CPU採用的編碼方式是一致的,而與Intel採用的"little endian "的編碼方式即低位bits存放在低位位元組的方法不同。

Java指令系統是以Java語言的實現為目的設計的,其中包含了用於調用方法和監視多先程系統的指令。Java的8位操作碼的長度使得JVM最多有256種指令,目前已使用了160多種操作碼。

2.2JVM指令系統

所有的CPU均包含用於保存系統狀態和處理器所需信息的寄存器組。如果虛擬機定義較多的寄存器,便可以從中得到更多的信息而不必對棧或內存進行訪問,這有利於提高運行速度。然而,如果虛擬機中的寄存器比實際CPU的寄存器多,在實現虛擬機時就會佔用處理器大量的時間來用常規存儲器模擬寄存器,這反而會降低虛擬機的效率。針對這種情況,JVM只設置了4個最為常用的寄存器。它們是:
pc程序計數器
optop操作數棧頂指針
frame當前執行環境指針
vars指向當前執行環境中第一個局部變數的指針
所有寄存器均為32位。pc用於記錄程序的執行。optop,frame和vars用於記錄指向Java棧區的指針。

2.3JVM棧結構

作為基於棧結構的計算機,Java棧是JVM存儲信息的主要方法。當JVM得到一個Java位元組碼應用程序後,便為該代碼中一個類的每一個方法創建一個棧框架,以保存該方法的狀態信息。每個棧框架包括以下三類信息:
局部變數
執行環境
操作數棧

局部變數用於存儲一個類的方法中所用到的局部變數。vars寄存器指向該變數表中的第一個局部變數。
執行環境用於保存解釋器對Java位元組碼進行解釋過程中所需的信息。它們是:上次調用的方法、局部變數指針和操作數棧的棧頂和棧底指針。執行環境是一個執行一個方法的控制中心。例如:如果解釋器要執行iadd(整數加法),首先要從frame寄存器中找到當前執行環境,而後便從執行環境中找到操作數棧,從棧頂彈出兩個整數進行加法運算,最後將結果壓入棧頂。
操作數棧用於存儲運算所需操作數及運算的結果。

2.4JVM碎片回收堆

Java類的實例所需的存儲空間是在堆上分配的。解釋器具體承擔為類實例分配空間的工作。解釋器在為一個實例分配完存儲空間後,便開始記錄對該實例所佔用的內存區域的使用。一旦對象使用完畢,便將其回收到堆中。
在Java語言中,除了new語句外沒有其他方法為一對象申請和釋放內存。對內存進行釋放和回收的工作是由Java運行系統承擔的。這允許Java運行系統的設計者自己決定碎片回收的方法。在SUN公司開發的Java解釋器和Hot Java環境中,碎片回收用後台線程的方式來執行。這不但為運行系統提供了良好的性能,而且使程序設計人員擺脫了自己控制內存使用的風險。

2.5JVM存儲區

JVM有兩類存儲區:常量緩沖池和方法區。常量緩沖池用於存儲類名稱、方法和欄位名稱以及串常量。方法區則用於存儲Java方法的位元組碼。對於這兩種存儲區域具體實現方式在JVM規格中沒有明確規定。這使得Java應用程序的存儲布局必須在運行過程中確定,依賴於具體平台的實現方式。

JVM是為Java位元組碼定義的一種獨立於具體平台的規格描述,是Java平台獨立性的基礎。目前的JVM還存在一些限制和不足,有待於進一步的完善,但無論如何,JVM的思想是成功的。

對比分析:如果把Java原程序想像成我們的C++原程序,Java原程序編譯後生成的位元組碼就相當於C++原程序編譯後的80x86的機器碼(二進製程序文件),JVM虛擬機相當於80x86計算機系統,Java解釋器相當於80x86CPU。在80x86CPU上運行的是機器碼,在Java解釋器上運行的是Java位元組碼。

Java解釋器相當於運行Java位元組碼的「CPU」,但該「CPU」不是通過硬體實現的,而是用軟體實現的。Java解釋器實際上就是特定的平台下的一個應用程序。只要實現了特定平台下的解釋器程序,Java位元組碼就能通過解釋器程序在該平台下運行,這是Java跨平台的根本。當前,並不是在所有的平台下都有相應Java解釋器程序,這也是Java並不能在所有的平台下都能運行的原因,它只能在已實現了Java解釋器程序的平台下運行。

⑧ Java什麼情況下強轉型 編譯不報錯,運行會報錯

向下強制轉型——把一個父類(或祖先類)引用強制轉換成一個子類(或孫類)引用,是不會發生編譯錯誤的。

但如果這個父類(或祖先類)引用實際引用(指向)的對象,不是一個子類(或孫類)對象,運行時就會拋出異常。

舉例來說,如果鳥類和狗類都是動物類的子類。

如果有一個動物類的引用a引用了一個鳥類對象,則此時將a強制轉換成狗類引用,就不會報編譯錯誤,但運行時會拋出類型轉換異常。

因為a這個裝動物的籠子,實際上關的是一隻鳥,而需要的動物是一隻狗。

⑨ java語言中什麼叫做編譯錯誤

就是你用javac命令將源代碼(.java)文件翻譯成位元組碼(.class)文件時產生的錯誤。
比如,變數名不符合規定,變數沒定義,關鍵字拼寫錯誤等等。。。
java的編譯器(javac)會根據java語法規定做一些檢查,不符合規定的就不通過編譯。

編譯錯誤,是相對於運行時錯誤而言的。
運行時錯誤,是你用java命令運行時會出現的錯誤,一般會拋出異常。

⑩ Java中編譯錯誤有什麼

在MyEclipse等軟體中編譯出錯,左邊會有紅叉提示,即在編譯時便無法通過,
和它相對應的是運行錯誤,即編譯時通過了,運行時卻出錯了。
一般來說,編譯錯誤有 語法錯誤 ;變數重復 ;括弧未成對 ; 變數未聲明或初始化 ;
方法名稱錯誤 ; 類型無法轉換 ;無法到達的語句 等等。。
希望可以幫助到你~O(∩_∩)O~~

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:647
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:939
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:634
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:823
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:734
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1069
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:302
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:163
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:855
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:765