1. 程式人生 > >java中的初始化(建構函式和innt函式)

java中的初始化(建構函式和innt函式)

        先說一下什麼是初始化,就是在最開始給成員變數一個初始的值,這個時候你就會問了,既然後面還要給它賦值為什麼要給它初始化呢,不是多此一舉麼,首先這個初始化是為了防止程式執行時候出現未知的錯誤,或者bug。

        初始化一般在建構函式中進行,它定義了函式的初始值,使程式可以正常執行,在new物件時建構函式就會自動被執行,它只會被執行一次,之後想修改需要自己再新增一個innt(初始化)方法,這個方法時外部的方法不會自動執行,需要手動呼叫。

不多說了上程式碼自己體會:



(1)一般函式是用於定義物件應該具備的功能。而建構函式定義的是,物件在呼叫功能之前,在建立時,應該具備的一些內容。也就是物件的初始化內容。

(2)建構函式是在物件建立時由JVM呼叫給物件初始化。一般函式是物件建立後,當物件呼叫該功能時才會執行。

(3)普通函式可以使用物件多次呼叫,建構函式就在建立物件時呼叫。

(4)建構函式的函式名要與類名一樣,而普通的函式只要符合識別符號的命名規則即可。

(5)建構函式沒有返回值型別。

建構函式要注意的細節:

(1)當類中沒有定義建構函式時,系統會指定給該類加上一個空引數的建構函式。這個是類中預設的建構函式。當類中如果自定義了建構函式,這時預設的建構函式就沒有了。

備註:可以通過javap命令驗證。

(2)在一個類中可以定義多個建構函式,以進行不同的初始化。多個建構函式存在於類中,是以過載的形式體現的。因為建構函式的名稱都相同。


public class Init {
    //建立構造方法的初始化
int a;
    char b;
    short s;
    float f;
    long lo;
    double dou;
    byte e;
    boolean flag;
Object obj;
//這些基本型別都會保證有一個初始的值。
//可見,java會為類的基本型別的變數提供一個初始值,各型別初始值不同,非基本型別初始為null。
//注意,這裡的變數必須是類變數,注意,只會為類變數提供初始化,而區域性變數不會。
//如果區域性變數沒有初始化,會收到一個出錯資訊(方法內定義一個變數要用的話需要給它初始化賦一個值,不然會報錯)。
public static void main(String[] args) { Init init = new Init(); init.print(); } public void print() { System.out.println("int a=" + a + " char b=" + b + " short s=" + s + " float f=" + f + " long lo=" + lo + "\n double dou=" + dou + " byte e=" + e + " boolean flag=" + flag + " Object obj=" + obj); } }

執行結果:

int a=0 char b=  short s=0 float f=0.0 long lo=0

 double dou=0.0 byte e=0 boolean flag=false Object obj=null

public class InitTest {
    //建構函式中的初始化
int i;
Object obj;
    public InitTest(){
        System.out.println("before i="+i+"  obj="+obj);//初始化之前
i = 1;
obj = new Object();
System.out.println("after i="+i+" obj="+obj);//初始化之後
}
//由此可見,不論是基本型別,還是其他的類。java預設的初始化是最先發生的,位於一切方法之前。
public static void main(String [] args){
        InitTest init = new InitTest();
}
}

執行結果:

before i=0  obj=null

after i=1 [email protected]

相關推薦

java的代理靜態代理動態代理

之前本人在設計模式中有寫過靜態代理和動態代理的相關程式碼測試,可以看下。 今天我們主要學一下理論相關知識。 AOP的原理就是動態代理機制。RPC框架也是實現了AOP機制。 靜態代理 靜態代理:在程式碼編譯時就確定了被代理的類是哪一個。 這個靜態代理比較簡單,代理類和被代

java初始建構函式innt函式

        先說一下什麼是初始化,就是在最開始給成員變數一個初始的值,這個時候你就會問了,既然後面還要給它賦值為什麼要給它初始化呢,不是多此一舉麼,首先這個初始化是為了防止程式執行時候出現未知的錯誤,或者bug。        初始化一般在建構函式中進行,它定義了函式的初

c++建構函式初始列表的作用機制

#include <iostream> #include <string> using namespace std; class base { private: int m_i; int m_j; public: base(int i): m_j(i), m_i(m_j){}

java變數,初始快,建構函式的執行順序

對於JAVA中類的初始化是一個很基礎的問題,其中的一些問題也是易被學習者所忽略。當在編寫程式碼的時候碰到時,常被這些問題引發的錯誤,感覺莫名其妙。而且現在許多大公司的面試題,對於這方面的考查也是屢試不爽。不管基於什麼原因,我認為,對於java類中的初始化問題,有必要深入的瞭解

JAVA初始及默認值,包裝類與基本類型

屬於 java val 初始化 成員 als integer 基本數據 lean 當變量作為作為類成員使用時,java才確保給定其初始值,防止程序運行時錯誤 數據類型初始值 byte 0 short 0 int 0 long 0L char ‘u000

JAVA初始ArrayList的三種方式

  下面講一下ArrayList初始化的幾種不同方式。   一、最常用的初始化方式。 1 List<String> list1 = new ArrayList<String>(); 2 list1.add("apple"); 3 lis

Java 初始 List 的五種方法

在 Java 中初始化 List 的五種方法 1.構造 List 後使用 List.add 初始化 2.使用 {{}} 雙括號語法 3.使用 Arrays.asList 4. 使用 Stream (JDK8) 5. 使用 Lists (JDK9)

Java 初始 List 集合的 6 種方式!

List 是 Java 開發中經常會使用的集合,你們知道有哪些方式可以初始化一個 List 嗎?這其中不缺乏一些坑,今天棧長我給大家一一普及一下。 1、常規方式 List<String> languages = new ArrayList<>(); languages.add(&quo

Java 初始 List 集合的 6 種方式!

List 是 Java 開發中經常會使用的集合,你們知道有哪些方式可以初始化一個 List 嗎?這其中不缺乏一些坑,今天棧長我給大家一一普及一下。 如果想學習Java工程化、高效能及分散式、深入淺出。微服務、Spring,MyBatis,Netty原始碼分析的朋友可以加我的Java高階交流:85463013

java併發程式設計--java的鎖Lock介面佇列同步器AQS

public abstract class AbstractQueuedSynchronizer extends AbstractOwnableSynchronizer implements java.io.Serializable { //內部類--節點 static final clas

ALSA音效卡驅動的DAPM詳解之四:在驅動程式初始並註冊widgetroute

前幾篇文章我們從dapm的資料結構入手,瞭解了代表音訊控制元件的widget,代表連線路徑的route以及用於連線兩個widget的path。之前都是一些概念的講解以及對資料結構中各個欄位的說明,從本章開始,我們要從程式碼入手,分析dapm的詳細工作原理: 如何註冊widg

VMWare 安裝VMWareTools Centos系統 Windows 系統

VMWare Tools Centos 系統 Windows系統 VMWare Tools 是VMware虛擬機中自帶的一種增強工具,相當於VirtualBox中的增強功能(Sun VirtualBox Guest Additions),是VMware提供的增強虛擬顯卡和硬盤性能、以及同步

Mybatis之Configuration初始配置檔案.xml的解析

原始碼解讀第一步我覺著應該從Mybatis如何解析配置檔案開始。 1.先不看跟Spring整合如何解析,先看從SqlSessionFactoryBuilder如果解析的。 1 String resouce = "conf.xml"; 2 InputStream is = Resources.getR

phantomjs的使用+Java程式碼+依賴js相容Linuxwindows版本

                1、  在使用phantomjs的時候需要下載phantomjs,網上有window版本和Linux版本。將phantomjs放在Linux上的指定位置之後(如下面的/home/tpl/phantomjs-1.9.7-linux-x86_64/處),2、  按照類似如下命令進行

hadoopslot簡介map slot reduce slot

Slots是Hadoop的一個重要概念。然而在Hadoop相關論文,slots的闡述難以理解。網上關於slots的概念介紹也很少,而對於一個有經驗的Hadoop開發者來說,他們可能腦子裡已經理解了slots的真正含義,但卻難以清楚地表達出來,Hadoop初學者聽了還是雲裡

數字卡號補0加空格

fixInteger (num, length) { let res = (Array(length).join('0') + num).slice(-length) // 補0

Java資料型別轉換自動轉換強制轉換

自動資料型別轉換 自動轉換按從低到高的順序轉換。不同型別資料間的優先關係如下: 低———————————————>高 byte,short,char-> int -> long -> float -> doub

C#二維陣列的定義,初始重在理解兩者的區別

在學習C++基礎知識之後 , 現在學習C#其實簡單很多,但是還是有些不同的,就比如C#中二維陣列的定義、宣告 都 是有所不同的。 下面看看有什麼不同: using System; using System.Collections.Generic; using System

計算機專業經典書籍程式猿大學生必讀

16.《我是一隻IT小小鳥》 l推薦理由 一群IT小小鳥—— 來自十幾所院校,或男生,或女生;或科班,或半路轉行。 分佈在不同的公司,或外企,或國企,或民企,老闆有土有洋。 有失意,有快意;有淚水,有歡笑。在失望中追求希望,在迷茫中辨別方向。 他們用自己的成長故事,告訴在校的師弟師妹們: 青春太寶貴,千萬別浪

Java--Big Number操作BigInteger類BigDecimal類

BigInteger類 java.math.BigInteger 類的使用場景是大整數操作。它提供類似