① java構造函數,構造代碼塊和靜態代碼塊的區別
構造函數:執行時間比構造代碼塊時間晚,也是在對象初始化的時候運行。沒有返回值,構造函數名稱和類名一致。
構造代碼塊:執行時間比靜態代碼塊晚,比構造函數早,和構造函數一樣,只在對象初始化的時候運行。沒有名字、參數和返回值。
靜態代碼塊:最早執行,類被載入內存時執行,只執行一次。沒有名字、參數和返回值,有關鍵字static。
靜態代碼塊只會在類被載入內存時載入一次,是最先執行的,然後是構造代碼塊,最後才是構造函數。構造代碼塊和構造函數都是在對象創建的時候執行,有幾個對象就會執行幾次。
② java語言的構造函數有什麼作用構造函數可以重載嗎舉例說明
構造函數是當你創建對象時,由系統調用的;
可以重載
例子
publicClassPerson{
Stringname=null;
publicPerson(){};//無參構造函數
publicPerson(Stringname){//有參構造函數,重載
this.name=name;
}
}
classTest{
publicstaticvoidmain(String[]args){
Personp1=newPerson();//創建名字為null的人對象,調用無參構造函數
Personp2=newPerson("小明");//創建名字為小明的對象,調用有參構造函數
}
}
③ Java中的 static{ …… } 是什麼意思
是靜態修飾符,什麼叫靜態修飾符呢?大家都知道,在程序中任何變數或者代碼都是在編譯時由系統自動分配內存來存儲的,而所謂靜態就是指在編譯後所分配的內存會一直存在,直到程序退出內存才會釋放這個空間,也就是只要程序在運行,那麼這塊內存就會一直存在。這樣做有什麼意義呢?
在Java程序裡面,所有的東西都是對象,而對象的抽象就是類,對於一個類而言,如果要使用他的成員,那麼普通情況下必須先實例化對象後,通過對象的引用才能夠訪問這些成員,但是有種情況例外,就是該成員是用static聲明的(在這里所講排除了類的訪問控制),例如:
未聲明為static
class ClassA{
int b;
public void ex1(){
…
}
}
class ClassB{
void ex2{
int i;
ClassA a = new ClassA();
i = a.b; //這里通過對象引用訪問成員變數b
a.ex1; //這里通過對象引用訪問成員函數ex1
}
}
聲明為static
class ClassA{
static int b;
static void ex1(){
…
}
}
class ClassB{
void ex2{
int i;
i = ClassA.b; //這里通過類名訪問成員變數b
ClassA.ex1; //這里通過類名訪問成員函數ex1
}
}
通過以上兩種比較,就可以知道static用來修飾類成員的主要作用了,在java類庫當中有很多類成員都聲明為static,可以讓用戶不需要實例化對象就可以引用成員,最基本的有Integer.parseInt(),Float.parseFloat()等等用來把對象轉換為所需要的基本數據類型。這樣的變數和方法我們又叫做類變數和類方法。
接下來講一下被static修飾後的變數的值的問題,剛才在前面講過,被static修飾後的成員,在編譯時由內存分配一塊內存空間,直到程序停止運行才會釋放,那麼就是說該類的所有對象都會共享這塊內存空間,看一下下面這個例子:
class TStatic{
static int i;
public TStatic(){
i = 4;
}
public TStatic(int j){
i = j;
}
public static void main(String args[]){
TStatic t = new TStatic(5); //聲明對象引用,並實例化
TStatic tt = new TStatic(); //同上
System.out.println(t.i);
System.out.println(tt.i);
System.out.println(t.i);
}
}
這段代碼裡面Tstatic類有一個static的int變數I,有兩個構造函數,第一個用於初始化I為4,第二個用於初始化i為傳進函數的值,在main中所傳的值是5,程序首先聲明對象的引用t,然後調用帶參數的構造函數實例化對象,此時對象t的成員變數I的值為5,接著聲明對象tt,調用無參數的構造函數,那麼就把對象tt的成員變數i的值初始化為4了,注意了,在這里i是static,那就是說該類的所有對象都共享該內存,那也就是說在實例化對象tt的時候改變了i的值,那麼實際上對象t的i值也變了,因為實際上他們引用的是同一個成員變數。最後列印的結果是三個4。呵呵,寫到這里大家是否明白了呢?不明白就再看看書或者多寫幾個例子印證一下,呵呵。
④ JAVA中構造方法私有化的作用是什麼
將一個類的構造函數私有化,可以使得該類不被實例化,和不能被繼承。要創建這個類的實例,唯一的辦法是提供一個公共靜態方法。這種方式被稱為單例模式。
私有化代碼示例如下:
package test;
class Some{
private Some(){}
public static void dosome(){
System.out.println("dnali");
}
}
public class Singeleton {
public static void main(String[] args) {
//Some s=new Soem();無法實例化Some的對象
Some.dosome();
}
}
(4)static構造函數java擴展閱讀:
java 構造函數的執行過程
類初始化時構造函數調用順序:
(1)、初始化對象的存儲空間為零或null值;
(2)、調用父類構造函數;
(3)、按順序分別調用類成員變數和實例成員變數的初始化表達式;