A. 應屆生面試java相關崗位可能會被問到哪些技術問題
常見的Java問題
1.什麼是Java虛擬機?為什麼Java被稱作是「平台無關的編程語言」?
Java虛擬機是一個可以執行Java位元組碼的虛擬機進程。Java源文件被編譯成能被Java虛擬機執行的位元組碼文件。
Java被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java虛擬機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。
2.JDK和JRE的區別是什麼?
Java運行時環境(JRE)是將要執行Java程序的Java虛擬機。它同時也包含了執行applet需要的瀏覽器插件。Java開發工具包(JDK)是完整的Java軟體開發包,包含了JRE,編譯器和其他的工具(比如:JavaDoc,Java調試器),可以讓開發者開發、編譯、執行Java應用程序。
3.」static」關鍵字是什麼意思?Java中是否可以覆蓋(override)一個private或者是static的方法?
「static」關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的實例變數的情況下被訪問。
Java中static方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而static方法是編譯時靜態綁定的。static方法跟類的任何實例都不相關,所以概念上不適用。
4.是否可以在static環境中訪問非static變數?
static變數在Java中是屬於類的,它在所有的實例中的值是一樣的。當類被Java虛擬機載入的時候,會對static變數進行初始化。如果你的代碼嘗試不用實例來訪問非static的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何實例關聯上。
5.Java支持的數據類型有哪些?什麼是自動拆裝箱?
Java語言支持的8中基本數據類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是Java編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把int轉化成Integer,double轉化成double,等等。反之就是自動拆箱。
6.Java中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
7.Java中,什麼是構造函數?什麼是構造函數重載?什麼是復制構造函數?
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java編譯器會為這個類創建一個默認的構造函數。
Java中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java不支持像C++中那樣的復制構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java不會創建默認的復制構造函數。
8.Java支持多繼承么?
不支持,Java不支持多繼承。每個類都只能繼承一個類,但是可以實現多個介面。
9.介面和抽象類的區別是什麼?
Java提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是只能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java介面中聲明的變數默認都是final的。抽象類可以包含非final的變數。
Java介面中的成員函數默認是public的。抽象類的成員函數可以是private,protected或者是public。
介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含main方法的話是可以被調用的。
也可以參考JDK8中抽象類和介面的區別
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
Java線程
B. JAVA的構造函數是怎麼寫的。萬分感謝。路過的請不要嘲笑%>_<%
JAVA的構造函數是:SetLocal EnableDelayedExpansion
set classpath=.
for %%c in (lib*.jar) do set classpath=!classpath!;%%c
set classpath=%classpath%;./classes;
java com.ham.server.Server。
1、無參構造方法
無參構造方法又分為隱式無參構造方法和顯示無參構造方法。
隱式無參構造方法
在定義類的時候,如果沒有給類定義一個構造方法,Java編譯器在編譯時會默認提供一個隱式的構造方法,它沒有任何參數,並且有一個空的方法體。例如,Person類中隱含一個無參構造方法,在main方法中可以通過new關鍵字來調用此默認的構造方法,代碼如下:
C. java基礎面試題有哪些
下面是10道java基礎面試題,後附答案
1.什麼是 Java 虛擬機?為什麼 Java 被稱作是「平台無關的編程語言」?
Java 虛擬機是一個可以執行 Java 位元組碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的位元組碼文件。
Java 被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java 虛擬機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。
2.「static」關鍵字是什麼意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?
「static」關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的實例變數的情況下被訪問。
Java 中 static 方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯時靜態綁定的。static 方法跟類的任何實例都不相關,所以概念上不適用。
3.JDK 和 JRE 的區別是什麼?
Java 運行時環境(JRE)是將要執行 Java 程序的 Java 虛擬機。它同時也包含了執行 applet 需要的瀏覽器插件。Java 開發工具包 (JDK)是完整的 Java 軟體開發包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調試器),可以讓開發者開發、編譯、執行 Java 應用程序。
4.是否可以在 static 環境中訪問非 static 變數?
static 變數在 Java 中是屬於類的,它在所有的實例中的值是一樣的。當類被 Java 虛擬機載入的時候,會對 static 變數進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何實例關聯上。
5.Java 支持的數據類型有哪些?什麼是自動拆裝箱?
Java 語言支持的 8 中基本數據類型是:
byte
short
int
long
float
double
boolean
char
自動裝箱是 Java 編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把 int 轉化成 Integer,double 轉化成 double,等等。反之就是自動拆箱。
6.Java 支持多繼承么?
不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現多個介面。
7.Java 中,什麼是構造函數?什麼是構造函數重載?什麼是復制構造函數?
當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java 編譯器會為這個類創建一個默認的構造函數。
Java 中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。
Java 不支持像 C++中那樣的復制構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java 不會創建默認的復制構造函數。
8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?
Java 中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。
9.介面和抽象類的區別是什麼?
Java 提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:
介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。
類可以實現很多個介面,但是只能繼承一個抽象類
類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。
抽象類可以在不提供介面方法實現的情況下實現介面。
Java 介面中聲明的變數默認都是 final 的。抽象類可以包含非 final 的變數。
Java 介面中的成員函數默認是 public 的。抽象類的成員函數可以是 private, protected 或者是 public。
介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調用的。
10.什麼是值傳遞和引用傳遞?
對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。
對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。
最後祝你面試順利!
D. java怎麼樣構造函數復制一個對象
一、用Object 本身的復制對象的方法, clone()。對象可克隆的類必須實現Cloneable介面,並且clone方法是淺克隆。
二、類實現Serializable,用ObjectOutputStream、ObjectInputStream 來復制對象。
對象克隆有點復雜,尤其是第一種。
關於這個問題你可以搜索:
JAVA深復制(深克隆)與淺復制(淺克隆)
這篇文章看看。
E. Java中什麼叫構造函數.
每創建一個類的實例都去初始化它的所有變數是乏味的。如果一個對象在被創建時就完成了所有的初始工作,將是簡單的和簡潔的。因此,Java在類里提供了一個特殊的成員函數,叫做構造函數(Constructor)。
一個構造函數是對象被創建時初始對象的成員函數。它具有和它所在的類完全一樣的名字。一旦定義好一個構造函數,創建對象時就會自動調用它。構造函數沒有返回類型,即使是void類型也沒有。這是因為一個類的構造函數的返回值的類型就是這個類本身。構造函數的任務是初始化一個對象的內部狀態,所以用new操作符創建一個實例後,立刻就會得到一個清楚、可用的對象。
構造方法是一種特殊的方法,具有以下特點。
(1)構造方法的方法名必須與類名相同。
(2)構造方法沒有返回類型,也不能定義為void,在方法名前面不聲明方法類型。
(3)構造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數傳給對象的域。
(4)構造方法不能由編程人員調用,而要系統調用。
(5)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造器,這個構造器不執行任何代碼。
(6)構造方法可以重載,以參數的個數,類型,或排列順序區分。
F. java中構造方法和拷貝構造方法是什麼意思
構造方法是一種特殊的方法,它是一個與類同名且沒有返回值類型的方法。對象的創建就是通過構造方法來完成,其功能主要是完成對象的初始化。當類實例化一個對象時會自動調用構造方法。構造方法和其他方法一樣也可以重載。
拷貝構造方法就是用一個已經實例化的對象來new另一個對象
給個例子:
publicclassTest{
privateinthour;
privateintminute;
privateintsecond;
//構造方法
publicTest(){
}
//拷貝構造方法
publicTest(Testt){
super();
this.hour=t.hour;
this.minute=t.minute;
this.second=t.second;
}
}
G. 構造函數何時被調用
問題一:4、構造函數何時被調用?( ) D
問題二:一個類的構造函數和析構函數什麼時候被調用 在對象被創建的時候就會調用構造函數,比如 聲明一個類class A{...},當你在main函數中
A a ; 定義一個對象a的時候, 就調用構造函數,默認構造函數都是無參數的 ,構造函數就相當給對象a初始化而已,就相當於c語言中 int a = 3 初始化a的值而已,因為你在類中是不能直接給private中的類成員賦值的,所以就靠構造函數,不過要注意有參構造和無參構造,默認都是無參的,比如你A a(1, 3)這樣的就不對了 除非你在類中寫一個帶參數的構造函數。
當函數調用結束的時候,會自動調用析構函數,比如你在clsaa A { public:Add().....},
當你A a; a.Add();後 就自動調用析構,你可以在類中 ~A{cout。。。},你就會發現調用
a.Add() 後就打出你在析構函數中寫的東西,是自動調用的,析構的作用就是釋放對象佔用的資源。以為默認析構什麼也不列印,所以你不會直觀看出析構函數什麼時候執行,自己在析構中加上列印的語言你就會看到了。希望對你能有所幫助
問題三:C++在什麼時候運行構造函數 創建對象的時候,編譯器會自動調用匹配的構造函數,如果不提供顯式的構造函數,會自閥創建一個無參構造函數
問題四:C++構造函數什麼時候會被調用? Point的構造函數被調唬兩次,你可以這么理解:
當你要構造一個Rect對象的時候,每個Rect對象是不是包含兩個Point對象?
所以這就是為啥構造兩次的原因了。
析構與構造是一樣的,兩次釋放,每個Point分別被析構一次。
問題五:構造函數何時被調用 問法還是有問題的,構造函數包括復制構造函數
對象被創建時構造函數被調用,關鍵詞:創建時,A a; 這種形式,指針類型在new的時候才調用
復制構造函數,也是構造函數,用一個對象作為參數創建另一個對象時,或賦值(同樣關注創建時)
如 A a(b);
A b;
A a = b;
以下的不是調用復制構造函數
A a,b; 默認(無參)構造被調用
a = b; 賦值
問題六:java 構造函數什麼時候被調用執行 在java語言 中,構造函數又稱構造方法。特殊性在於,與普通方法的區別是,他與類名相同,不返回結果也不加void返回值。構造函數的作用是初始化對象,即在創建對象時被系統調用(與普通方法不同,程序不能顯示調用構造函數)。構造函數還能夠被重載,即可以傳入參數,當程序中包含有帶參的構造函數時,系統將不會再提供的無參構造函數。構造函數特點:沒有函數返回值,構造函數名與類名相同;當創建類對象的時候調用其對應的構造方法去創建。每創建一個類的實例都去初始化它的所有變數是乏味的。如果一個對象在被創建時就完成了所有的初始工作,將是簡單的和簡潔的。因此,Java在類里提供了一個特殊的成員函數,叫做構造函數(Constructor)。 一個構造函數是對象被創建時初始對象的成員函數。它具有和它所在的類完全一樣的名字。一旦定義好一個構造函數,創建對象時就會自動調用它。構造函數沒有返回類型,即使是void類型也沒有。這是因為一個類的構造函數的返回值的類型就是這個類本身。構造函數的任務是初始化一個對象的內部狀態,所以用new操作符創建一個實例後,立刻就會得到一個清楚、可用的對象。 構造方法是一種特殊的方法,具有以下特點。 (1)構造方法的方法名必須與類名相同。 (2)構造方法沒有返回類型,也不能定義為void,在方法名前面不聲明方法類型。(3)構造方法的主要作用是完成對象的初始化工作,它能夠把定義對象時的參數傳給對象的域。 (4)構造方法不能由編程人員調用,而要系統調用。 (5)一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造器,這個構造器不執行任何代碼。 (6)構造方法可以重載,以參數的個數,類型,或排列順序區分。
問題七:c++中的構造函數和析構函數是什麼時候被調用的? 構造函數:只在創建對象的時候才會調用,其他情況不允許調用。
析構函數:籠統的說是銷毀對象的時候進行廠用。但是調用的時間不一定一樣,有些時候當退出程序的時候,系統將收回分配的空間,這時就會調用析構函數;有些情況下,在程序進行過程中,使用delete 函數來銷毀動態分配的對象,這時就會調用析構函數來釋放內存空間。
問題八:c++中什麼時候會調用構造函數 構造函數么!顧名思義,就是構造的時候!:)創建類對象的時候調用構造函數。
問題九:c++拷貝構造函數什麼時候被調用 1.當說明一個類的對象時,使用另外一個對象初始化(此時復制構造函數就如同其他構造函數一樣使用)。2,當一個函數返回值為類類型時。3,當一個類類型的實參傳遞給函數中的傳值調用參數時,在這種情況下,復制構造函數決定了參數按照什麼方式傳遞.
H. 為什麼 Java 被稱作是「平台無關的編程語言」
為什麼 Java 被稱作是「平台無關的編程語言」。JAVA語言是跨平台的,可以實現一次編寫,到處運行。這是因為它設計有一個虛擬機的機制,是由虛擬機屏蔽了平台差異。