溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java基礎知識有哪些

發布時間:2021-07-05 13:35:46 來源:億速云 閱讀:153 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關java基礎知識有哪些的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

    1.java基礎

    1.1Java歷史

    Java:由Sun Microsystems公司于1995年5月推出的Java程序設計語言和Java平臺的總稱。Java語言是一種可以撰寫跨平臺應用軟件的面向對象的程序設計語言,由當時任職太陽微系統的詹姆斯·高斯林(James Gosling)等人于1990年代初開發,它最初被命名為Oak。Java伴隨著互聯網的迅猛發展而發展,逐漸成為重要的網絡編程語言。

    • 1991年4月,由James Gosling博士領導的綠色計劃(Green Project)開始啟動,此計劃的目的是開發一種能夠在各種消費性電子產品(如機頂盒、冰箱、收音機等)上運行的程序架構。這個計劃的產品就是Java語言的前身:Oak(橡樹)。Oak當時在消費品市場上并不算成功,但隨著1995年互聯網潮流的興起,Oak迅速找到了最適合自己發展的市場定位并蛻變成為Java語言。

    • 1995年5月23日,Oak語言改名為Java,并且在SunWorld大會上正式發布Java 1.0版本。Java語言第一次提出了“Write Once,Run Anywhere”的口號。

    • 1996年1月23日,JDK 1.0發布,Java語言有了第一個正式版本的運行環境。JDK 1.0提供了一個純解釋執行的Java虛擬機實現(Sun Classic VM)。JDK 1.0版本的代表技術包括:Java虛擬機、Applet、AWT等。

    • 1996年4月,10個最主要的操作系統供應商申明將在其產品中嵌入Java技術。同年9月,已有大約8.3萬個網頁應用了Java技術來制作。在1996年5月底,Sun公司于美國舊金山舉行了首屆JavaOne大會,從此JavaOne成為全世界數百萬Java語言開發者每年一度的技術盛會。

    • 1997年2月19日,Sun公司發布了JDK 1.1,Java技術的一些最基礎的支撐點(如JDBC等)都是在JDK 1.1版本中發布的,JDK 1.1版的技術代表有:JAR文件格式、JDBC、JavaBeans、RMI。Java語法也有了一定的發展,如內部類(Inner Class)和反射(Reflection)都是在這個時候出現的。

    • 直到1999年4月8日,JDK 1.1一共發布了1.1.0~1.1.8九個版本。從1.1.4之后,每個JDK版本都有一個自己的名字(工程代號),分別為:JDK 1.1.4 - Sparkler(寶石)、JDK 1.1.5 - Pumpkin(南瓜)、JDK 1.1.6 - Abigail(阿比蓋爾,女子名)、JDK 1.1.7 - Brutus(布魯圖,古羅馬政治家和將軍)和JDK 1.1.8 – Chelsea(切爾西,城市名)。

    • 1998年12月4日,JDK迎來了一個里程碑式的版本JDK 1.2,工程代號為Playground(競技場),Sun在這個版本中把Java技術體系拆分為3個方向,分別是面向桌面應用開發的J2SE(Java 2 Platform, Standard Edition)、面向企業級開發的J2EE(Java 2 Platform, Enterprise Edition)和面向手機等移動終端開發的J2ME(Java 2 Platform, Micro Edition)。在這個版本中出現的代表性技術非常多,如EJB、Java Plug-in、Java IDL、Swing等,并且這個版本中Java虛擬機第一次內置了JIT(Just In Time)編譯器(JDK 1.2中曾并存過3個虛擬機,Classic VM、HotSpot VM和Exact VM,其中Exact VM只在Solaris平臺出現過;后面兩個虛擬機都是內置JIT編譯器的,而之前版本所帶的Classic VM只能以外掛的形式使用JIT編譯器)。在語言和API級別上,Java添加了strictfp關鍵字與現在Java編碼之中極為常用的一系列Collections集合類。

    在1999年3月和7月,分別有JDK 1.2.1和JDK 1.2.2兩個小版本發布。

    • 1999年4月27日,HotSpot虛擬機發布,HotSpot最初由一家名為“Longview Technologies”的小公司開發,因為HotSpot的優異表現,這家公司在1997年被Sun公司收購了。HotSpot虛擬機發布時是作為JDK 1.2的附加程序提供的,后來它成為了JDK 1.3及之后所有版本的Sun JDK的默認虛擬機。

    • 2000年5月8日,工程代號為Kestrel(美洲紅隼)的JDK 1.3發布,JDK 1.3相對于JDK 1.2的改進主要表現在一些類庫上(如數學運算和新的Timer API等),JNDI服務從JDK 1.3開始被作為一項平臺級服務提供(以前JNDI僅僅是一項擴展),使用CORBA IIOP來實現RMI的通信協議,等等。這個版本還對Java 2D做了很多改進,提供了大量新的Java 2D API,并且新添加了JavaSound類庫。JDK 1.3有1個修正版本JDK 1.3.1,工程代號為Ladybird(瓢蟲),于2001年5月17日發布。

    自從JDK 1.3開始,Sun維持了一個習慣:大約每隔兩年發布一個JDK的主版本,以動物命名,期間發布的各個修正版本則以昆蟲作為工程名稱。

    • 2002年2月13日,JDK 1.4發布,工程代號為Merlin(灰背隼)。JDK 1.4是Java真正走向成熟的一個版本,Compaq、Fujitsu、SAS、Symbian、IBM等著名公司都有參與甚至實現自己獨立的JDK 1.4。哪怕是在十多年后的今天,仍然有許多主流應用(Spring、Hibernate、Struts等)能直接運行在JDK 1.4之上,或者繼續發布能運行在JDK 1.4上的版本。JDK 1.4同樣發布了很多新的技術特性,如正則表達式、異常鏈、NIO、日志類、XML解析器和XSLT轉換器等。

    JDK 1.4有兩個后續修正版:

    • 2002年9月16日發布的工程代號為Grasshopper(蚱蜢)的JDK 1.4.1

    • 2003年6月26日發布的工程代號為Mantis(螳螂)的JDK 1.4.2。

    • 2002年前后還發生了一件與Java沒有直接關系,但事實上對Java的發展進程影響很大的事件,那就是微軟公司的.NET Framework發布了。這個無論是技術實現上還是目標用戶上都與Java有很多相近之處的技術平臺給Java帶來了很多討論、比較和競爭,.NET平臺和Java平臺之間聲勢浩大的孰優孰劣的論戰到目前為止都在繼續。

    • 2004年9月30日,JDK 1.5發布,工程代號Tiger(老虎)。從JDK 1.2以來,Java在語法層面上的變換一直很小,而JDK 1.5在Java語法易用性上做出了非常大的改進。例如,自動裝箱、泛型、動態注解、枚舉、可變長參數、遍歷循環(foreach循環)等語法特性都是在JDK 1.5中加入的。在虛擬機和API層面上,這個版本改進了Java的內存模型(Java Memory Model,JMM)、提供了java.util.concurrent并發包等。另外,JDK 1.5是官方聲明可以支持Windows 9x平臺的最后一個JDK版本。

    • 2006年12月11日,JDK 1.6發布,工程代號Mustang(野馬)。在這個版本中,Sun終結了從JDK 1.2開始已經有8年歷史的J2EE、J2SE、J2ME的命名方式,啟用Java SE 6、Java EE 6、Java ME 6的命名方式。JDK 1.6的改進包括:提供動態語言支持(通過內置Mozilla Java Rhino引擎實現)、提供編譯API和微型HTTP服務器API等。同時,這個版本對Java虛擬機內部做了大量改進,包括鎖與同步、垃圾收集、類加載等方面的算法都有相當多的改動。

    • 在2006年11月13日的JavaOne大會上,Sun公司宣布最終會將Java開源,并在隨后的一年多時間內,陸續將JDK的各個部分在GPL v2(GNU General Public License v2)協議下公開了源碼,并建立了OpenJDK組織對這些源碼進行獨立管理。除了極少量的產權代碼(Encumbered Code,這部分代碼大多是Sun本身也無權限進行開源處理的)外,OpenJDK幾乎包括了Sun JDK的全部代碼,OpenJDK的質量主管曾經表示,在JDK 1.7中,Sun JDK和OpenJDK除了代碼文件頭的版權注釋之外,代碼基本上完全一樣,所以OpenJDK 7與Sun JDK 1.7本質上就是同一套代碼庫開發的產品。

    JDK 1.6發布以后,由于代碼復雜性的增加、JDK開源、開發JavaFX、經濟危機及Sun收購案等原因,Sun在JDK發展以外的事情上耗費了很多資源,JDK的更新沒有再維持兩年發布一個主版本的發展速度。JDK 1.6到目前為止一共發布了37個Update版本,最新的版本為Java SE 6 Update 37,于2012年10月16日發布。

    • 2009年2月19日,工程代號為Dolphin(海豚)的JDK 1.7完成了其第一個里程碑版本。根據JDK 1.7的功能規劃,一共設置了10個里程碑。最后一個里程碑版本原計劃于2010年9月9日結束,但由于各種原因,JDK 1.7最終無法按計劃完成。

    從JDK 1.7最開始的功能規劃來看,它本應是一個包含許多重要改進的JDK版本,其中的Lambda項目(Lambda表達式、函數式編程)、Jigsaw項目(虛擬機模塊化支持)、動態語言支持、GarbageFirst收集器和Coin項目(語言細節進化)等子項目對于Java業界都會產生深遠的影響。在JDK 1.7開發期間,Sun公司由于相繼在技術競爭和商業競爭中都陷入泥潭,公司的股票市值跌至僅有高峰時期的3%,已無力推動JDK 1.7的研發工作按正常計劃進行。為了盡快結束JDK 1.7長期“跳票”的問題,Oracle公司收購Sun公司后不久便宣布將實行“B計劃”,大幅裁剪了JDK 1.7預定目標,以便保證JDK 1.7的正式版能夠于2011年7月28日準時發布?!癇計劃”把不能按時完成的Lambda項目、Jigsaw項目和Coin項目的部分改進延遲到JDK 1.8之中。最終,JDK 1.7的主要改進包括:提供新的G1收集器(G1在發布時依然處于Experimental狀態,直至2012年4月的Update 4中才正式“轉正”)、加強對非Java語言的調用支持(JSR-292,這項特性到目前為止依然沒有完全實現定型)、升級類加載架構等。

    到目前為止,JDK 1.7已經發布了9個Update版本,最新的Java SE 7 Update 9于2012年10月16日發布。從Java SE 7 Update 4起,Oracle開始支持Mac OS X操作系統,并在Update 6中達到完全支持的程度,同時,在Update 6中還對ARM指令集架構提供了支持。至此,官方提供的JDK可以運行于Windows(不含Windows 9x)、Linux、Solaris和Mac OS平臺上,支持ARM、x86、x64和Sparc指令集架構類型。

    • 2009年4月20日,Oracle公司宣布正式以74億美元的價格收購Sun公司,Java商標從此正式歸Oracle所有(Java語言本身并不屬于哪間公司所有,它由JCP組織進行管理,盡管JCP主要是由Sun公司或者說Oracle公司所領導的)。由于此前Oracle公司已經收購了另外一家大型的中間件企業BEA公司,在完成對Sun公司的收購之后,Oracle公司分別從BEA和Sun中取得了目前三大商業虛擬機的其中兩個:JRockit和HotSpot,Oracle公司宣布在未來1~2年的時間內,將把這兩個優秀的虛擬機互相取長補短,最終合二為一??梢灶A見在不久的將來,Java虛擬機技術將會產生相當巨大的變化。

    • 2011年7月28日,Oracle公司發布Java SE 1.7

    • 2014年3月18日,Oracle公司發表Java SE 1.8

    1.2Java特點

    1.2.1 簡單性

    Java語法是C++語法的一個“純凈版本”。這里沒有頭文件、指針運算(甚至指針語法)、結構、聯合、操作符重載、虛基類等等。不僅如此,Java開發環境遠遠超出大多數其他編程語言的開發環境。

    1.2.2 面向對象

    什么是面向對象? 這里我們用木匠打一個比方,一個“面向對象”的木匠始終關注的是所制作的椅子,第二位才是所使用的工具;而一個“非面向對象的”木匠首先考慮的是所使用的工具。

    在Java的世界里,一切皆對象。

    Java的面向對象特性與C++旗鼓相當,與C++的主要不同點在于多重繼承。在Java中,取而代之的是更簡單的接口概念。而且與C++相比,Java提供了更豐富的運行時自省功能。

    1.2.3 分布式(微服務)

    比特科技Java有豐富的例程庫,用于處理像HTTP和FTP之類的TCP/IP協議。Java應用程序能夠通過URL打開和訪問網絡上的對象,其便捷程度就好像訪問本地文件一樣。

    1.2.4 健壯性

    Java與C++最大的不同在于Java采用的指針模型可以消除重寫內存和損壞數據的可能性(對于曾經花費幾個小時來檢查由于指針bug而引起內存沖突的人來說,一定很喜歡Java的這一特性)。不僅如此,Java編譯器能夠檢測許多在其他語言中僅在運行時才能夠檢測出來的問題。

    1.2.5 安全性

    Java適用于網絡/分布式環境。為了達到這個目標,在安全性方面投入了大量的精力。使用Java可以構建防病毒、防篡改的系統

    從一開始,Java就設計成能夠防范常見的各種攻擊:

    • 運行時堆棧溢出。蠕蟲和病毒常用的攻擊手段。

    • 破壞自己進程空間之外的內存。

    • 經授權讀寫文件

    1.2.6 體系結構中立

    編譯器生成一個體系結構中立的目標文件格式,這是一種編譯過的代碼,只要有Java運行時系統,這些編譯后的代碼就可以在許多處理器上運行。Java編譯器通過生成與特定計算機體系結構無關的字節碼指令來實現這一特性。精心設計的字節碼不僅可以很容易的在任何機器上解釋執行,而且還可以動態地翻譯成本地機器代碼

    1.2.7 可移植性

    與C/C++不同,Java規范中沒有“依賴具體實現的地方”?;緮祿愋偷拇笮∫约坝嘘P運算都做了明確的說明。例如,Java中的int永遠是32位的整數,而在C/C++中,int可能是16位整數、32位整數,也可能是編譯器提供商指定的其他大小。在Java中,數據類型具有固定的大小,這消除了代碼移植時令人頭疼的主要問題。

    1.2.8 高性能

    盡管對解釋后的字節碼性能已經比較滿意,但在有些場合下可能需要更加高效的性能。字節碼可以(在運行時刻)動態的翻譯成對應運行這個應用的特定cpu的機器碼。

    1.2.9多線程

    Java在當時很超前。它是第一個支持并發程序設計的主流語言。多線程可以帶來更好的交互響應和實時行為。并發程序設計絕非易事,但是Java在這方面表現出色,可以很好的管理這個工作。

    1.2.10 動態性

    Java與C/C++相比更加具有動態性。它能夠適應不斷發展的環境。庫中可以自由的添加新方法和實例變量,而對客戶端沒有任何影響。在Java中找出運行時類型信息十分簡單(反射的特性,后續會學到)

    1.3Java基本數據類型

    內置數據類型

    Java語言提供了八種基本類型。六種數字類型(四個整數型,兩個浮點型),一種字符類型,還有一種布爾型。

    byte:

    byte 數據類型是8位、有符號的,以二進制補碼表示的整數;

    最小值是 -128(-2^7);

    最大值是 127(2^7-1);

    默認值是 0;

    byte 類型用在大型數組中節約空間,主要代替整數,因為 byte 變量占用的空間只有 int 類型的四分之一;

    例子:byte a = 100,byte b = -50。

    short:

    short 數據類型是 16 位、有符號的以二進制補碼表示的整數

    最小值是 -32768(-2^15);

    最大值是 32767(2^15 - 1);

    Short 數據類型也可以像 byte 那樣節省空間。一個short變量是int型變量所占空間的二分之一;

    默認值是 0;例子:short s = 1000,short r = -20000。

    int:

    int 數據類型是32位、有符號的以二進制補碼表示的整數;

    最小值是 -2,147,483,648(-2^31);

    最大值是 2,147,483,647(2^31 - 1);

    一般地整型變量默認為 int 類型;

    默認值是 0 ;

    例子:int a = 100000, int b = -200000。

    long:

    long 數據類型是 64 位、有符號的以二進制補碼表示的整數;

    最小值是 -9,223,372,036,854,775,808(-2^63);

    最大值是 9,223,372,036,854,775,807(2^63 -1);

    這種類型主要使用在需要比較大整數的系統上;

    默認值是 0L;

    例子: long a = 100000L,Long b = -200000L。

    "L"理論上不分大小寫,但是若寫成"l"容易與數字"1"混淆,不容易分辯。所以最好大寫。

    float:

    float 數據類型是單精度、32位、符合IEEE 754標準的浮點數;

    float 在儲存大型浮點數組的時候可節省內存空間;

    默認值是 0.0f;

    浮點數不能用來表示精確的值,如貨幣;

    例子:float f1 = 234.5f。

    double:

    double 數據類型是雙精度、64 位、符合IEEE 754標準的浮點數;

    浮點數的默認類型為double類型;

    double類型同樣不能表示精確的值,如貨幣;

    默認值是 0.0d;

    例子:double d1 = 123.4。

    boolean:

    boolean數據類型表示一位的信息;

    只有兩個取值:true 和 false;

    這種類型只作為一種標志來記錄 true/false 情況;

    默認值是 false;

    例子:boolean one = true。

    char:

    char類型是一個單一的 16 位 Unicode 字符;

    最小值是 \u0000(即為 0);

    最大值是 \uffff(即為 65535);

    char 數據類型可以儲存任何字符;

    例子:char letter = ‘A';。

    1.4例子

    public class TestDemo {
    public static void main(String[] args) {
                boolean flg = true;
                boolean flg2 = false;
                //沒有0是假   非0是真
            /*int i = (int)flg;
            flg = (boolean) 10;*/
                //不要嘗試布爾類型和其他數據類型進行轉換
            }
            public static void main8(String[] args) {
                short sh = 10;//2  15
                System.out.println(sh);
            }
            public static void main7(String[] args) {
                byte b = 127;//1   -128 -  127
                int d = 2147483647;
                byte c = 10;
                byte e = 20;
                byte f = (byte)(c+e);// (byte) 強制類型轉換
                //整型提升
                int i = 10;
                i = c;
                long l = 20;
                long i2 = i+l;//整型提升
            }
            //unicode  統一碼
            public static void main6(String[] args) {
                String ch = "abc";
                char ch3 = 'a';//2
                System.out.println(ch3);
                char ch4 = '高';
                System.out.println(ch4);
                char ch5 = 97;
                System.out.println(ch5);
    //        char ch6 = -9;  不能表示負數
    //        System.out.println(ch6);
            }
            public static void main5(String[] args) {
                float f = 12.5f;//4
                System.out.println(f);
            }
            public static void main4(String[] args) {
           /* double d = 12.5;//8  CTR+SHIFT+/
            System.out.println(d);
            System.out.println(Double.MAX_VALUE);
            System.out.println(Double.MIN_VALUE);
            */
                //小數沒有精確的   int a = 10;
                double a = 1.1;
                double b = 1.1;
                System.out.println(a*b);
                int c = 1;
                int d = 2;
                System.out.println(c/d);
            }
            public static void main3(String[] args) {
                long b = 10L;//8  可移植性
                System.out.println(Long.MAX_VALUE);
                System.out.println(Long.MIN_VALUE);
                System.out.println(b);
            }
            /**
             *
             * @param args
             */
            public static void main2(String[] args) {
                int a = 10;//局部變量
                //在Java當中  局部變量定義了之后一定要賦值
                //System.out.println(a);
            }
            public static void main1(String[] args) {
                //整型
                int a = 10;//4個字節
                System.out.println(Integer.MAX_VALUE);
                System.out.println(Integer.MIN_VALUE);
                int b = Integer.MAX_VALUE;
                System.out.println(b+1);
                int c = Integer.MIN_VALUE;
                System.out.println(c-1);
                System.out.println("hello");
            }
    
    }

    1.5基本數據類型的包裝類

    基本數據類型包裝類所占字節
    byteByte1
    shortShort2
    intInteger4
    longLong8
    charCharacter2
    floatFloat4
    doubleDouble8
    boolean只有true和false兩個值

    1.6強制類型轉換

    1.條件是轉換的數據類型必須是兼容的。

    2.格式:(type)value type是要強制類型轉換后的數據類型 實例

    public class QiangZhiZhuanHuan{
        public static void main(String[] args){
            int i1 = 123;
            byte b = (byte)i1;//強制類型轉換為byte
            System.out.println("int強制類型轉換為byte后的值等于"+b);
        }
    }

    int強制類型轉換為byte后的值等于123

    1.7隱含強制類型轉換

    1.整數的默認類型是 int。

    2.浮點型不存在這種情況,因為在定義 float 類型時必須在數字后面跟上 F 或者 f。

    1.8自動類型轉換

    必須滿足轉換前的數據類型的位數要低于轉換后的數據類型,例如: short數據類型的位數為16位,就可以自動轉換位數為32的int類型,同樣float數據類型的位數為32,可以自動轉換為64位的double類型。

    public class ZiDongLeiZhuan{
            public static void main(String[] args){
                char c1='a';//定義一個char類型
                int i1 = c1;//char自動類型轉換為int
                System.out.println("char自動類型轉換為int后的值等于"+i1);
                char c2 = 'A';//定義一個char類型
                int i2 = c2+1;//char 類型和 int 類型計算
                System.out.println("char類型和int計算后的值等于"+i2);
            }
    }
    運行結果為:
    char自動類型轉換為int后的值等于97
    char類型和int計算后的值等于66

    感謝各位的閱讀!關于“java基礎知識有哪些”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女