Java和JavaScript的區別
- Java是一種面向對象的編程語言,語法比較嚴格。Java需要在代碼中聲明數據類型,例如“int”、“float”、“double”等。Java的語法是靜態類型檢查的,即編譯器在編譯時檢查代碼的語法和類型。Java的代碼需要被編譯成字節碼才能被JVM(Java虛擬機)執行。
- JavaScript則是一種腳本語言,語法相對寬松。JavaScript的數據類型可以自動轉換,不需要在代碼中聲明數據類型。JavaScript的代碼是動態類型檢查的,即在代碼運行時才進行類型檢查。JavaScript的代碼可以直接在瀏覽器上運行,不需要編譯成字節碼。
特點 | Java | JavaScript |
---|---|---|
面向對象 | 面向對象編程語言 | 基于對象,不完全面向過程。有部分面向對象的特點 |
運行方式 | 編譯型語言,生成中間文件, 不會生成中間文件字節碼解釋型,解釋一部分,再運行一部分。 | 不會再生成中間文件 |
跨平臺 | 安裝虛擬機跨平臺 | 運行在瀏覽器中,只要系統有瀏覽器就可以運行。 |
數據類型 | 強類型語言,不同的數據 | 弱類型,同一個變量可以賦值不同的數據類型。類型嚴格區分 |
大小寫 | 區分大小寫 | 區分大小寫 |
字符與字符串區別
1. Java中單引號只能表示單個字符且不能為空
char val = 'a'; √
char val = '好'; √
char val = '你好'; ×
char val = 'aa'; ×
char val = '' ×;
2. Java中雙引號表示字符串
char val = "a"; √
char val = "好"; √
char val = "你好"; √
char val = "aa" √
char val = "" √
3. JavaScript中單引號和雙引號是一樣的,表示字符串,建議使用單引號,都可以給空字符串
let val = 'a' √
let val = '好'; √
let val = '你好'; √
let val = 'aa' √
let val = '' √
let val = "a"; √
let val = "好"; √
let val = "你好"; √
let val = "aa" √
let val = "" √
變量
Java中變量有明確的類型(byte1,short2,int4,long8,float4,double8,char2,boolean1)
Java變量在使用之前必須聲明類型,而JavaScript不需要。
1. byte
// 取值范圍 -128~127
byte val1 = 10; √
byte val1 = 130; ×
byte val1 = (byte) 130; √ // val取值很有意思,建議自己多測試幾個數值 就理解了
byte val1 = 10.1; ×
byte val1 = (byte) 10.1; √ // val取值為10
2. short
// 取值范圍 -32768~32767
short val2 = 20; √
3. int
// 取值范圍 -2147483648~2147483647
int val3 = 30; √
4. long
// 在數值的后邊需要添加一個L,可以大寫,也可以小寫,建議大寫
// 取值范圍 -9223372036854774808~9223372036854774807
long val4 = 9999999999L; √
long val4 = 9999999999; × // Integer number too large
5. float
// 在數值的后邊需要添加一個F,可以大寫,也可以小寫,建議大寫
// 取值范圍 -3.402823466×10的38次方到3.402823466×10的38次方
// float的精度為7~8位有效數字,7位肯定能保證,8位的值也存在。
float val5 = 99.99F; √
float val5 = 99.99; // 左側是float,右側默認是double,會提示類型錯誤
6. double
// 取值范圍 1.797693e+308~4.9000000e-324(e+308 :乘以10的308次方,e-324:乘以10的負324次方)
// float和double的精確度是按照整體位數來的,并不是只是考慮小數部分
// double的精度為16~17位有效數字
double val6 = 999.99; √
7. boolean
boolean val8 = true; √
boolean val = 1; ×
8. JavaScript中變量則是動態類型, 從定義上來說let = val = const,定義后使用上會有不同
JavaScript五種數據類型
- number 數值型
- boolean 布爾類型:true/false
- string 字符串,沒有字符類型
- object 對象類型:內置對象,自定義對象
- undefined 未定義的類型,沒有賦初值,不知道是什么類型
let val = 100;√
let val = 100.1; √
let val = 99999999999999999; √
let val = true; √
let val = '你好!'; √
let val = 'a'; √
聲明和賦值變量
1. JavaScript聲明和賦值變量
let val = "你好";
2. Java聲明和賦值變量
String var = “你好”;
數組
- Java在定義了一個數組的長度以后就不能再改變了
- 數組只能存儲相同類型的元素
- 不能直觀看見整個數組數據,只能遍歷出來
1. Java數組第一種定義方式
int a[] = new int[2]; // 默認為0,如果是引用數據類型就為null
for (int i = 0; i < a.length; i++) {
System.out.println("【數組第一種定義方式】數據:" + a[i]);
// 輸出結果
// 【數組第一種定義方式】數據:0
// 【數組第一種定義方式】數據:0
}
// 給數組賦值
a[0] = 10;
for (int i = 0; i < a.length; i++) {
System.out.println("【數組第一種定義方式】給數組賦值:" + a[i]);
// 輸出結果
// 【數組第一種定義方式】給數組賦值:10
// 【數組第一種定義方式】給數組賦值:0
}
2. Java數組第二種定義方式
int b[] = new int[] {1,2,3,4,5};
3. Java數組第三種定義方式
int c[] = {1,2,3,4,5};
for (int i = 0; i < c.length; i++) {
System.out.println("【數組第三種定義方式】數據:" + c[i]);
// 輸出結果
// 【數組第三種定義方式】數據:1
// 【數組第三種定義方式】數據:2
// 【數組第三種定義方式】數據:3
// 【數組第三種定義方式】數據:4
// 【數組第三種定義方式】數據:5
}
4. JavaScript定義方式
// 隱式創建
var arr = [值1,值2,值3];
//直接實例化
var arr = new Array(值1,值2,值3);
// 創建數組并指定長度
var arr = new Array(size);
集合
- Java集合的長度是可變的
- 集合可以存儲不同類型的元素
- 集合是一種接口類型,它有許多實現類,例如ArrayList、LinkedList、HashSet、TreeSet等
- 用集合來存儲整數、浮點數、字符、字符串等,聲明的一個集合,不能同時存儲多種類型的數據。例如聲明一個存儲字符串的集合
- 數組的訪問速度比集合快,因為數組中的元素是連續存儲的,而集合中的元素是分散存儲的
1. 集合第一種定義方式; 使用ArrayList類創建List對象
List<String> arrayList = new ArrayList<String>();
// 添加元素 **.add(); **.addAll()
arrayList.add("apple"); // 列表的末尾添加string類型數據
arrayList.add(String.valueOf(true)); // 把boolean類型轉成String
arrayList.add(String.valueOf(123)); // 把int類型轉成String
Collections.addAll(arrayList,"Collections.addAll添加第一個","Collections.addAll添加第二個"); // 添加多個
arrayList.addAll(0, arrayList); // 添加一個集合進來,兩個集合會合并成一個
for (String s : arrayList) {
System.out.println("【集合第一種定義方式】數據:" + s);
}
// 數組大小 size()
System.out.println("【集合第一種定義方式】數組大小:" + arrayList.size()); // 獲取集合中的第1個元素; 結果是:【集合第一種定義方式】查詢元素:10
// 查詢元素 get()
System.out.println("【集合第一種定義方式】查詢元素:" + arrayList.get(0)); // 獲取集合中的第1個元素; 結果是:【集合第一種定義方式】查詢元素:apple
System.out.println("【集合第一種定義方式】查詢元素:" + arrayList.indexOf("apple")); // 查找元素"apple"第一次出現的位置。; 結果是:【集合第一種定義方式】查詢元素:0
// 修改元素 set()
arrayList.set(0, "a");
System.out.println("【集合第一種定義方式】修改元素:" + arrayList.get(0)); // 【集合第一種定義方式】修改元素:a
// 刪除元素 remove() removeAll() retainAll()
arrayList.remove("apple"); // 刪除List中第一個出現的指定元素;
arrayList.removeAll(arrayList); // 刪除List中包含在指定集合中的所有元素;
arrayList.retainAll(arrayList); // 僅保留List中包含在指定集合中的元素;
2. 集合第二種定義方式; 使用LinkedList類創建List對象
List<String> linkList = new LinkedList <String>();
3. 集合第三種定義方式; 創建不可變List對象
List<String> asList = Arrays.asList("a", "b", "c");
4. 集合第四種定義方式; 使用Collections類創建只讀List對象
List<String> list4 = Collections.unmodifiableList(Arrays.asList("a", "b", "c"));
5. 集合第五種定義方式; 使用Vector類創建List對象
Vector是List接口的另一個實現類,與ArrayList類似,但是它是線程安全的。Vector的操作方法與ArrayList相同,但是由于線程同步的額外開銷,它的性能可能較低。
List<String> list5 = new Vector<>();
6. JavaScript集合
JavaScript有是有集合這個東西,但是根本沒用過。
JavaScript中的HTMLCollection對象是類數組的HTML元素列表(集合)。getElementsByTagName()方法返回HTMLCollection對象。
<!DOCTYPE html>
<html>
<body>
<p>Hello!</p>
<p>Hello World!</p>
<p id="demo"></p>
<script>
var myCollection = document.getElementsByTagName("p");
document.getElementById("demo").innerHTML = "你看看吧,有 " + myCollection.length + " 條內容";
</script>
</body>
</html>
// 輸出結果
// Hello!
// Hello World!
// 你看看吧,有 3 條內容
打印/記錄/輸出內容
1. JavaScript打印/記錄/輸出內容
console.log(“快看控制臺”);
2. Java打印/記錄/輸出內容
System.out.println(“快看控制臺”);
方法
1. Java聲明、調用和打印函數/方法的返回值
在Java中,每個方法都需要在一個類內部聲明(在上面的示例中,類為Main)。每個方法的參數都需要有一個數據類型。如果方法返回值,您需要指定返回值的數據類型(void表示不返回任何內容)。每個方法都必須在main方法內部調用(Java編譯器在執行任何其他代碼之前,將尋找main方法)。
public class Main {
static boolean isEven(int num) {
// 對num進行一些操作并返回結果
return (num % 2 == 0) ? true : false;
}
public static void main(String[] args) {
System.out.println(isEven(4));
}
}
2. JavaScript聲明、調用和打印函數/方法的返回值
const isEven = (num) => {
// 對num進行一些操作并返回結果
return (num % 2 === 0) ? true : false;
};
console.log(isEven(4));