日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java -jar 默认参数_JAVA入门学习指南,建议收藏

發(fā)布時間:2023/12/9 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java -jar 默认参数_JAVA入门学习指南,建议收藏 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果你不懂Java 并且想認(rèn)真學(xué)習(xí)接觸了解一下Java的語法,建議把這篇文章收藏了,多看幾遍,應(yīng)該可以初步掌握J(rèn)ava 大部分基礎(chǔ)的語法 。?

讓我們出發(fā)吧!ps:本文有點長,耐心閱讀 。

〇,編程環(huán)境

工程項目推薦使用IDEA.

入門學(xué)習(xí)推薦使用jupyter notebook.

安裝jupyter notebook的java插件 IJava 的方法如下:

1,下載Java JDK >= 9.建議12

2,下載ijava-1.3.0.zip,并解壓。

3,進(jìn)入解壓后目錄,運(yùn)行 python3 install.py --sys-prefix。

詳情參見:https://github.com/SpencerPark/IJava

也可以在以下網(wǎng)頁鏈接中直接嘗試IJava:

https://mybinder.org/v2/gh/SpencerPark/ijava-binder/master

一,算數(shù)運(yùn)算

二,輸入輸出

輸入:System.in, java.io.InputStreamReader, java.util.Scanner

輸出:System.out.println, ?System.out.printf, ?System.out.print

讀文件:java.io.FileInputStream

寫文件:java.io.FileOutputStream

1,輸入

Scanner掃描輸入,遇到\n結(jié)束。

BufferedReader.read() 逐字符讀取。

BufferedReader.readLine() 逐行讀取。

2,輸出

print不換行,println換行,printf格式化輸出。

3,讀文件

4,寫文件

三,導(dǎo)入Package

java有以下一些導(dǎo)入包的方式:

1,導(dǎo)入包中某個對象:import java.text.SimpleDateFormat

2,導(dǎo)入包中全部對象: import java.util.*

3,導(dǎo)入包中的靜態(tài)字段和方法(較少使用): import static java.lang.System.*

4,默認(rèn)導(dǎo)入: java默認(rèn)導(dǎo)入了java.lang.*?

四,語法規(guī)則

1,標(biāo)識符

標(biāo)識符由字母和數(shù)字組成,遵循駝峰命名規(guī)則。

類的名稱以大寫字母開頭。

方法的名稱以小寫字母開頭。

變量的名稱以小寫字母開頭。

2,注釋

單行注釋用//開頭。

多行注釋用/*開頭,以*/結(jié)尾。

特殊多行注釋,以/**開頭,以*/結(jié)束,如果有多行,每行通常以星號開頭。

這種特殊的多行注釋需要寫在類和方法的定義處,可以用于自動創(chuàng)建文檔。

3,數(shù)據(jù)類型

Java 的數(shù)據(jù)類型有兩大類,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。

基本數(shù)據(jù)類型相對非常底層,基本類型相同值的對象占有同樣的存儲單元,判斷是否相等可以用 ==。

引用數(shù)據(jù)類型本質(zhì)上都是Class,相對抽象,引用類型相同值的對象占用不同的存儲單元,判斷是否相等應(yīng)該用 equals方法。

基本數(shù)據(jù)類型包括:整型(byte,short,int,long),浮點型(float,double),布爾類型(boolean),字符類型(char)

引用數(shù)據(jù)類型包括:包裝類型(Integer,Double,Char,Boolean,……),字符串(String),數(shù)組(Array),以及各種容器類(List,Map,Set,Queue)。

用戶自定義的任何Class都可以看成是一種引用數(shù)據(jù)類型。

4,變量聲明

5,標(biāo)點符號

Java 中常用的標(biāo)點符號用法總結(jié)如下

  • ()表示優(yōu)先級或者函數(shù)參數(shù)列表

  • []用于索引或數(shù)組聲明

  • {}用于作用域

  • <>用于泛型

  • * 用于import包時的通配符

  • @用于注解

五,編譯執(zhí)行

1,程序結(jié)構(gòu)

一個.java程序文件中必須有且只有一個public類,該類必須有一個聲明為main函數(shù)作為程序入口。

并且這個main函數(shù)需要聲明為 public static void 類型,即靜態(tài)的,公開的,返回值為空的函數(shù)類型。

并且這個java程序的文件名必須和這個public類名保持一致。

將以上代碼拷貝到文本文件中,命名為 Main.java。

2,編譯執(zhí)行

Java是一種解釋型語言,其java源碼需要被編譯成class字節(jié)碼運(yùn)行在Java虛擬機(jī)上。

因此,執(zhí)行Java程序分兩步:

(1),使用javac編譯命令將以.java結(jié)束的程序文件編譯成以class結(jié)尾的字節(jié)碼程序文件。

javac Main.java 編譯后得到 Main.class文件

(2),使用java 命令運(yùn)行字節(jié)碼程序。

java -classpath ./ Main 在JVM上執(zhí)行Main.class文件

編譯時,按下面的順序依次查找類:

(1)查找當(dāng)前package是否存在這個class;

(2)查找import的包是否包含這個class;

(3)查找java.lang包是否包含這個class。

如果按照上面的規(guī)則還無法確定類名,則編譯報錯。

3,classpath和jar包

(1) classpath?

classpath是JVM用到的一個環(huán)境變量,它用來指示JVM如何搜索class。

它其實就是一組目錄的集合,它設(shè)置的搜索路徑與操作系統(tǒng)相關(guān)。

例如,在Windows系統(tǒng)上,用;分隔,可能長這樣。

C:\work\project1\bin;C:\shared;"D:\My Documents\project1\bin"

在Linux系統(tǒng)上,用:分隔,可能長這樣。

/usr/shared:/usr/local/bin:/home/liaoxuefeng/bin

如果JVM在某個路徑下找到了對應(yīng)的class文件,就不再往后繼續(xù)搜索。如果所有路徑下都沒有找到,就報錯。

classpath的設(shè)定方法有兩種:

在系統(tǒng)環(huán)境變量中設(shè)置classpath環(huán)境變量,不推薦;

在啟動JVM時設(shè)置classpath變量,推薦。

我們強(qiáng)烈不推薦在系統(tǒng)環(huán)境變量中設(shè)置classpath,那樣會污染整個系統(tǒng)環(huán)境。在啟動JVM時設(shè)置classpath才是推薦的做法。實際上就是給java命令傳入-classpath或-cp參數(shù):

java -classpath .;C:\work\project1\bin;C:\shared abc.xyz.Hello

但通常classpath這個參數(shù)不需要配置,其默認(rèn)值為當(dāng)前目錄 ./一般就夠用了。

(2)?jar包

設(shè)想一下,如果有很多.class文件,散落在各層目錄中,肯定不便于管理。

如果能把目錄打一個包,變成一個文件,就方便多了。

jar包就是用來干這個事的,它可以把package組織的目錄層級,以及各個目錄下的所有文件(包括.class文件和其他文件)都打成一個jar文件,這樣一來,無論是備份,還是發(fā)給客戶,就簡單多了。

jar包實際上就是一個zip格式的壓縮文件,而jar包相當(dāng)于目錄。如果我們要執(zhí)行一個jar包的class,就可以把jar包放到classpath中:

java -cp ./hello.jar abc.xyz.Hello

jar包還可以包含一個特殊的/META-INF/MANIFEST.MF文件,MANIFEST.MF是純文本,可以指定Main-Class和其它信息。JVM會自動讀取這個MANIFEST.MF文件。如果存在Main-Class,我們就不必在命令行指定啟動的類名,而是用更方便的命令:

java -jar hello.jar

jar包還可以包含其它jar包,這個時候,就需要在MANIFEST.MF文件里配置classpath了

4,maven項目管理工具

實際項目開發(fā)中,通常使用maven管理項目,并打成jar包。

maven使用POM文件POM.xml指定項目的依賴和打包方式。

maven安裝后,將會在本地創(chuàng)建~/.m2/repository目錄,集中存放jar包作為本地倉庫。

maven搜索并載入依賴的順序如下:本地倉庫->私人遠(yuǎn)程倉庫->中央倉庫

常見的maven 命令如下:

  • mvn clean? ? ? ? ? 清理編譯打包輸出

  • mvn compile? ? ? 項目編譯

  • mvn package? ? ?項目打包

  • mvn install? ? ? ? ? 安裝到本地倉庫

六,Java數(shù)據(jù)結(jié)構(gòu)概述

Java中常用的數(shù)據(jù)結(jié)構(gòu)主要包括字符串(String),數(shù)組(Array),枚舉(enum), 以及java.util中的各種容器類(通常被稱做集合)。

java.util中的這些容器類分成兩大類,一類是實現(xiàn)了Collection接口,另外一類實現(xiàn)了Map接口。

容器類中常用的數(shù)據(jù)結(jié)構(gòu)包括:列表(List),映射(Map),集合(Set),隊列(Quene),堆棧(Stack)。

當(dāng)然這些數(shù)據(jù)結(jié)構(gòu)也都是接口,通過API封裝了特定的功能,下面還會有多種不同的實現(xiàn)。

可以用統(tǒng)一的Iterator方式對大多數(shù)容器類進(jìn)行遍歷,這種更加抽象的方式優(yōu)于使用下標(biāo)的方式進(jìn)行遍歷。

七,字符串String

Java 中的字符串和Scala中的字符串來源于同一個包,java.lang.String,兩者具有完全相同的方法。

以下為字符串一些常用操作。

八,數(shù)組Array

Java 中的數(shù)組和 C++中的數(shù)組很像,其長度是不可變的,但是數(shù)組中的元素內(nèi)容是可以改變的。

數(shù)組是引用類型,一般是用花括號{}作為數(shù)組范圍標(biāo)識。

java.util.Arrays 類能方便地操作數(shù)組,它提供的所有方法都是靜態(tài)的。

1,創(chuàng)建Array

2,Array的常用操作

九,列表List

Java中的列表List是一種有序數(shù)據(jù)結(jié)構(gòu)的接口。

它有兩種實現(xiàn),一種是ArrayList,另外一種是LinkedList。前者是順序存儲,方便查詢和修改特定元素。后者是鏈表存儲,方便插入和刪除元素。通常情況下我們使用ArrayList更多一些。

和數(shù)組Array不同,List的大小是可以改變的。

List的主要方法如下:(E是元素 e的類型)

  • 在末尾添加一個元素:void add(E e)

  • 在指定索引添加一個元素:void add(int index, E e)

  • 刪除指定索引的元素:int remove(int index)

  • 刪除某個元素:int remove(Object e)

  • 獲取指定索引的元素:E get(int index)

  • 獲取列表大小(包含元素的個數(shù)):int size()

1,創(chuàng)建List

2,List常用操作

十,映射Map

Map是一種無序數(shù)據(jù)結(jié)構(gòu)的接口,存儲鍵值對(key,value)。

Map的常用實現(xiàn)是HashMap, LinkedHashMap, TreeMap。其中TreeMap是一種有序的Map.

Map的常用方法是put和get。如果想查詢某個key是否存在,可以調(diào)用containsKey.

Map中的key是唯一的,作為key的對象必須實現(xiàn)equals和hashCode方法。使用TreeMap時,放入的Key必須實現(xiàn)Comparable接口。

Map通常用來高效地進(jìn)行查找。

1,創(chuàng)建Map

2,Map常用操作

十一,集合Set

Set用于存儲不重復(fù)的元素集合,它主要提供以下幾個方法:

  • 將元素添加進(jìn)Set:boolean add(E e)

  • 將元素從Set刪除:boolean remove(Object e)??

  • 判斷是否包含元素:boolean contains(Object e)

十二,迭代器

Java的容器類都可以使用for each循環(huán),List、Set和Queue會迭代每個元素,Map會迭代每個key。

下面以List和Set的for each遍歷為例。

實際上,Java編譯器并不知道如何遍歷List和Set。

上述代碼能夠編譯通過,只是因為編譯器把for each循環(huán)通過Iterator改寫為了普通的for循環(huán):

Iterator是一種抽象的數(shù)據(jù)訪問模型。使用Iterator模式進(jìn)行迭代的好處有:

  • 對任何容器都采用同一種訪問模型;

  • 調(diào)用者對容器內(nèi)部結(jié)構(gòu)一無所知;

  • 容器類返回的Iterator對象知道如何迭代。

如果我們自己編寫了一個容器類,想要使用for each循環(huán),則該容器類要實現(xiàn)Iterable接口,并返回一個Iterator對象,下面是一個范例。

十三,枚舉類enum

如果有一些相關(guān)的常量,如星期,月份,顏色,可以將其它們定義為枚舉類型。

枚舉類型常用的方法有name和ordinal。

  • name():查看枚舉常量值的名字。

  • ordinal():查看枚舉常量值的序號。

通過enum定義的枚舉類,其實也是一個class,只不過它有以下幾個特點:

  • 定義的enum類型總是繼承自java.lang.Enum,且無法被繼承;

  • 只能定義出enum的實例,而無法通過new操作符創(chuàng)建enum的實例;

  • 定義的每個實例都是引用類型的唯一實例;

  • 可以將enum類型用于switch語句。

因為枚舉類也是class, 所以我們可以定義private的構(gòu)造方法,并且,給每個枚舉常量添加字段。

十四,選擇結(jié)構(gòu)

Java的選擇結(jié)構(gòu)主要有 if 語句和 switch語句。switch語句是多分支結(jié)構(gòu)。

1,if 選擇語句

2,switch多分支結(jié)構(gòu)

使用switch時不要忘記break,不要忘記default。

十五,循環(huán)結(jié)構(gòu)

Java中的循環(huán)結(jié)構(gòu)包括for循環(huán),for each循環(huán),while循環(huán)。

1,for循環(huán)

2,for each循環(huán)

for each循環(huán)可以對數(shù)組,字符串,各種容器類型進(jìn)行遍歷,其背后依賴于Iteratable接口。

3,while循環(huán)

4,流程控制continue、break

十六,異常處理

Java中的異常包括兩種體系:Error和Exception.

Error指的是嚴(yán)重的錯誤,程序一般對此無能為力。如:

  • OutOfMemoryError:內(nèi)存耗盡

  • NoClassDefFoundError:無法加載某個Class

  • StackOverflowError:棧溢出

而Exception則是運(yùn)行時的錯誤,它可以被捕獲并處理。

某些異常是應(yīng)用程序邏輯處理的一部分,應(yīng)該捕獲并處理。例如:

  • NumberFormatException:數(shù)值類型的格式錯誤

  • FileNotFoundException:未找到文件

  • SocketException:讀取網(wǎng)絡(luò)失敗

還有一些異常是程序邏輯編寫不對造成的,應(yīng)該修復(fù)程序本身。例如:

  • NullPointerException:對某個null的對象調(diào)用方法或字段

  • IndexOutOfBoundsException:數(shù)組索引越界

Exception又分為兩大類:

  • RuntimeException以及它的子類;

  • 非RuntimeException(包括IOException、ReflectiveOperationException等等)

Java規(guī)定:

  • 必須捕獲的異常,包括Exception及其子類,但不包括RuntimeException及其子類,這種類型的異常稱為Checked Exception。

  • 不需要捕獲的異常,包括Error及其子類,RuntimeException及其子類。

異常捕獲的語句是 try...catch...finally...此外還可以用throw拋出異常

如:throw new IllegalArgumentException。

十七,類的定義

Java中用關(guān)鍵字class定義普通類, 用enum定義枚舉類,用abstract class定義抽象類,用interface定義接口。

我們先看普通類的定義和實例化。

類的定義中可以用public聲明為公有屬性和公有方法,在類的內(nèi)部和外部都可以被訪問。

可以用private聲明為私有屬性和私有方法,只允許在類的作用域訪問,不允許在類的外部訪問。

可以用protected聲明為受保護(hù)的屬性和方法,只允許在類作用域及其子類作用域中訪問。

不使用作用域關(guān)鍵字聲明的屬性和方法默認(rèn)為為package作用域,在同一個package中的類可以訪問。

十八,構(gòu)造方法

構(gòu)造方法是類的一個特殊的方法,構(gòu)造方法名就是類名。

構(gòu)造方法沒有return返回值,也沒有void聲明。

如果一個類沒有定義任何構(gòu)造方法,那么編譯器會自動為我們生成一個默認(rèn)構(gòu)造方法,它沒有參數(shù),也沒有執(zhí)行語句。

如果我們已經(jīng)定義了構(gòu)造方法,那么編譯器不會生成默認(rèn)構(gòu)造方法。

沒有在構(gòu)造方法中初始化屬性時,引用類型的字段默認(rèn)是null,int類型默認(rèn)值是0,布爾類型默認(rèn)值是false。

我們可以為一個類定義多個構(gòu)造方法,使用時可以根據(jù)參數(shù)類型和數(shù)量自動進(jìn)行匹配。

這叫做構(gòu)造方法的重載。

所有方法都支持方法重載。

十九,靜態(tài)屬性和靜態(tài)方法

通過static修飾的屬性為靜態(tài)屬性,通過static修飾的方法為靜態(tài)方法。

靜態(tài)屬性和靜態(tài)方法屬于類而不屬于特定的實例,在類的實例之間共享。

可以通過類名直接調(diào)用靜態(tài)屬性和靜態(tài)方法,也可以通過實例對象間接調(diào)用。

靜態(tài)方法中不能夠通過this關(guān)鍵字使用實例屬性。

二十,繼承

類和類之間有三種關(guān)系:A is B, A use B, A has B.

其中A is B 就是 繼承關(guān)系。如果A 的屬性中有 B的類型,叫做 A has B.如果A 的方法的參數(shù)中有 B的類型,叫做 A use B.

我們重點介紹繼承關(guān)系。

在Java中使用extends聲明繼承關(guān)系。public, protected聲明的屬性和方法可以被子類繼承,而private聲明的屬性和方法不可以被子類繼承。

二十一,多態(tài)

Java的實例方法調(diào)用是基于運(yùn)行時的實際類型的動態(tài)調(diào)用,而非變量的聲明類型。

這個非常重要的特性在面向?qū)ο缶幊讨蟹Q之為多態(tài)。它的英文拼寫非常復(fù)雜:Polymorphic。

多態(tài)具有一個非常強(qiáng)大的功能,就是允許添加更多類型的子類實現(xiàn)功能擴(kuò)展,卻不需要修改基于父類的代碼。

這就實現(xiàn)了面向?qū)ο缶幊谭浅V拈_閉原則:對擴(kuò)展開放,對修改封閉。

二十二,抽象類

使用abstract聲明的方法為抽象類,抽象類只能夠被繼承,不能夠創(chuàng)建抽象類的實例。

抽象類的方法可以被abstract聲明為抽象方法,抽象方法沒有執(zhí)行語句。

抽象類的作用在于定義簽名規(guī)范,具體的業(yè)務(wù)實現(xiàn)留給子類去做。

二十三,接口

在抽象類中,抽象方法本質(zhì)上是定義接口規(guī)范:即規(guī)定高層類的接口,從而保證所有子類都有相同的接口實現(xiàn),這樣,多態(tài)就能發(fā)揮出威力。

如果一個抽象類沒有字段,所有方法全部都是抽象方法,那么該抽象類就可以被改寫成接口(interface)。

Java 中的 interface具有和 Scala中的 trait相似的功能。

一個class只能繼承自一個父類,但可以繼承自多個接口。

通過關(guān)鍵字 implements 聲明class和interface之間的繼承關(guān)系。

interface和interface之間也可以相互繼承,使用關(guān)鍵字 extends來表示這種擴(kuò)展關(guān)系。

interface不能有實例屬性,但可以有靜態(tài)屬性。

interface中的所有方法都默認(rèn)為抽象方法,因此無需關(guān)鍵字abstract聲明。

interface的非抽象方法用default關(guān)鍵字聲明,叫做default方法。

default方法中不能夠引用實例屬性,但可以調(diào)用抽象方法。

除了default方法和static聲明的靜態(tài)屬性,interface基本上可以看成是一個軀殼。

二十四,反射

通常我們通過類來創(chuàng)建實例,但反射機(jī)制讓我們能夠通過實例來獲取類的信息。

包括類的名字,類的屬性和方法簽名,類的繼承關(guān)系等等。

當(dāng)加載進(jìn)一個class類文件時,JVM會創(chuàng)建一個Class類型的實例來保存類的信息。

1,獲取Class類型實例

2,訪問屬性

  • Field getField(name):根據(jù)字段名獲取某個public的field(包括父類)

  • Field getDeclaredField(name):根據(jù)字段名獲取當(dāng)前類的某個field(不包括父類)

  • Field[] getFields():獲取所有public的field(包括父類)

  • Field[] getDeclaredFields():獲取當(dāng)前類的所有field(不包括父類)

3,調(diào)用方法

  • Method getMethod(name, Class...):獲取某個public的Method(包括父類)

  • Method getDeclaredMethod(name, Class...):獲取當(dāng)前類的某個Method(不包括父類)

  • Method[] getMethods():獲取所有public的Method(包括父類)

  • Method[] getDeclaredMethods():獲取當(dāng)前類的所有Method(不包括父類)

4,調(diào)用構(gòu)造方法

5,獲取繼承關(guān)系

二十五,泛型

泛型就是編寫模板代碼來適應(yīng)任意類型。Java的容器類中大量使用了泛型。

泛型的好處是使用時不必對類型進(jìn)行強(qiáng)制轉(zhuǎn)換,它通過編譯器對類型進(jìn)行檢查。

Java中泛型的實現(xiàn)是使用的擦拭法,編譯器編譯包含泛型的類時將泛型換成Object類型,

編譯器編譯泛型實例化的代碼時根據(jù)泛型的具體類型進(jìn)行安全轉(zhuǎn)型,而JVM虛擬機(jī)對泛型一無所知。

因此泛型的類型不能是int,float,double等基本類型,并且不能夠獲取泛型的反射。

二十六,注解

Java中的注解是放在Java源碼的類、方法、屬性、參數(shù)前的一種特殊"注釋",以@開頭。

注解可以看成用作標(biāo)注的一種"元數(shù)據(jù)"。

Java中有3中不同的注解:

  • SOURCE類型的注解由編譯器使用,在編譯期被丟掉了,如@Override;

  • CLASS類型的注解僅保存在class文件中,這類注解只被一些底層庫使用,它們不會被加載進(jìn)JVM;

  • RUNTIME類型的注解會被加載進(jìn)JVM,并且在運(yùn)行期可以被程序讀取。

Java語言使用@interface語法來定義注解(Annotation),定義注解一般需要用到元注解。

元注解(meta annotation)就是可以用來修飾其它注解的注解。

Java標(biāo)準(zhǔn)庫已經(jīng)定義了一些元注解,我們只需要使用元注解,通常不需要自己去編寫元注解。

注解定義后也是一種class,所有的注解都繼承自java.lang.annotation.Annotation,因此,讀取注解,需要使用反射API。

RUNTIME類型的注解如何使用,完全由程序自己決定。

二十七,Scala和Java對比

Java發(fā)明于1995年,Scala發(fā)明于2003年。

Scala和Java都是JVM語言,兩者的源碼都將編譯成.class字節(jié)碼在JVM虛擬機(jī)上執(zhí)行。

因此Scala和Java可以無縫混編。

Scala在Java基礎(chǔ)上做了重大的改進(jìn),使其兼?zhèn)潇o態(tài)語言和腳本語言的特色。

下面列舉一些比較顯著的差異。

1,Scala比Java更加簡潔

Java 中打印用 System.out.println, 而Scala用 println,類似Python。

Java 許多地方語句中的分號”;“不能省略, 而Scala可以省略,類似Python。

Java 聲明變量時,先聲明類型,再聲明變量名,而Scala則先變量名,必要時用冒號說明類型,類似Python。

Java 定義方法無需關(guān)鍵字,Scala 定義方法用關(guān)鍵字 def,可讀性更強(qiáng),類似Python.?

Scala支持for推導(dǎo)式,類似Python.

Scala 支持類型推斷,Java 在后面的版本才增加了 var 關(guān)鍵字來支持類型推斷。

Scala 支持隱式類型轉(zhuǎn)換和隱式參數(shù)。

2,Scala比Java更加靈活

Java必須先編譯后才能執(zhí)行,Scala解釋器可以直接運(yùn)行Scala腳本。

Java編程風(fēng)格統(tǒng)一為面向?qū)ο?#xff0c;Scala支持面向?qū)ο蠛秃瘮?shù)式編程多種風(fēng)格

Java中的多分支用switch, Scala使用match模式匹配實現(xiàn)多分支。

Java中的類支持靜態(tài)屬性和靜態(tài)方法,Scala用伴生對象和伴生方法概念將靜態(tài)屬性和方法與實例屬性和方法分離。

Java的循環(huán)中支持break和continue關(guān)鍵字,Scala的循環(huán)中不支持。

3,常用標(biāo)點符號差異

Java中導(dǎo)入全部對象用星號作為通配符,Scala中用下劃線作為通配符。

Java中用方括號來取索引,Scala中用圓括號來取索引。

Java中用尖括號來表示泛型,Scala中用方括號來表示泛型。

Java中的數(shù)組用花括號來表示,Scala中一般用工廠方法。

Java中可以用冒號來書寫for each語句,Scala中用

二十八,Java和C++的對比

C++發(fā)明于1983年,而Java發(fā)明于1995年。

C++代碼直接編譯成機(jī)器碼運(yùn)行在裸機(jī)上,而Java代碼編譯成字節(jié)碼運(yùn)行在虛擬機(jī)上。

C++編譯的最終結(jié)果是一個程序生成一個exe文件。Java編譯結(jié)果是一個程序中有多少類就生成多少個與類名相同的class文件。

Java的語法大量借鑒了C++,但和C++相比,Java是一門純面向?qū)ο蟮恼Z言,風(fēng)格更加簡潔統(tǒng)一。

下面列舉一些兩者語法上的差異。

1,C++ 導(dǎo)入package使用 #include, 而 Java使用 import 關(guān)鍵字 。

2,C++ 支持指針直接操控內(nèi)存,而 Java 拋棄了令人困惑的指針功能。

3,C++ 使用析構(gòu)函數(shù)回收垃圾,Java自動回收(GC算法)。

4,C++ 支持直接多繼承性,Java用接口來實現(xiàn)多繼承性。

5,C++ 中可以在類的外部可以定義函數(shù),而Java不允許在類和接口外面直接定義方法。

—?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的java -jar 默认参数_JAVA入门学习指南,建议收藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。