javaScript 和 Java 的语法区别(有前端基础)
目录
一、语法风格
1.变量声明
2.代码块
3.分号
二、面向对象编程
1. 类和对象的定义
2. 方法和属性的访问修饰符
3. 继承方式
三、数据类型和类型转换
1.数据类型
2. 类型转换
四、异常处理
1. 语法结构
2. 异常类型
五、开发工具和生态系统
1.开发工具
2.运行环境
各位前端小伙伴工作中应该能经常看到后端同学的代码,虽然语法有一定的区别,但代码逻辑和思路让我们也能看懂一部分后端代码。如果对Java有兴趣的话,可以看看以下对两者区别的介绍,让你在和后端沟通中更为顺畅。
一、语法风格
1.变量声明
JS:
使用var
、let
、const
声明变量。其中,var
存在变量提升的现象,而let
和const
不存在变量提升,并且const
声明的变量不能被重新赋值.
示例:
var x = 10;
console.log(x); // 10
console.log(y); // undefined
var y = 20;
let a = 30;
const b = 40;
Java:
必须明确指定变量的类型,如int num;
、String str;
等。在 Java 中没有变量提升的概念。
示例:
int num;
num = 10;
2.代码块
JS:
使用大括号{}
来定义代码块,例如函数体、条件语句、循环语句等。
示例:
if (true) {
console.log('This is inside the if block.');
}
Java:
同样使用大括号来定义代码块,但 Java 的代码块结构更加严谨,例如在类、方法、循环等结构中,代码块的作用范围和规则更加明确。
示例:
if (true) {
System.out.println("This is inside the if block.");
}
3.分号
JS:
分号是可选的(可写可不写,不影响程序执行),但为了避免一些潜在的错误,通常建议加上分号。
示例:
let x = 10
let y = 20;
console.log(x + y)
Java:
分号是必须的,用于结束一条语句。
示例:
int num = 10;
System.out.println(num);
二、面向对象编程
1. 类和对象的定义
JS:
在 ES6 中引入了类的概念,但本质上是基于原型的面向对象编程。可以使用class
关键字定义类,通过构造函数和原型链来实现继承。
示例:
class Person {
constructor(name) {
this.name = name;
}
sayHello() {
console.log(`Hello, my name is ${this.name}.`);
}
}
let person = new Person('John');
person.sayHello();
Java:
是纯粹的面向对象编程语言,使用class
关键字定义类,通过类的继承和接口实现多态性。Java 的面向对象编程更加严格和规范。
示例:
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void sayHello() {
System.out.println("Hello, my name is " + this.name + ".");
}
}
Person person = new Person("John");
person.sayHello();
2. 方法和属性的访问修饰符
JS:
没有像 Java 那样严格的访问修饰符。虽然可以通过一些约定来模拟私有属性和方法,但并不是真正的访问限制。
示例:
class Person {
constructor(name) {
this._name = name; // 约定以 _ 开头的为私有属性
}
get name() {
return this._name;
}
set name(newName) {
this._name = newName;
}
}
let person = new Person('John');
console.log(person.name);
person.name = 'Mike';
console.log(person.name);
Java:
有public
、private
、protected
等访问修饰符,可以严格控制类的成员的访问权限。
示例:
class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String newName) {
this.name = newName;
}
}
Person person = new Person("John");
System.out.println(person.getName());
person.setName("Mike");
System.out.println(person.getName());
3. 继承方式
JS:
主要通过原型链和构造函数的方式实现继承,相对比较灵活。
示例:
class Animal {
constructor(name) {
this.name = name;
}
makeSound() {
console.log('Animal makes a sound.');
}
}
class Dog extends Animal {
constructor(name) {
super(name);
}
makeSound() {
console.log('Woof!');
}
}
let dog = new Dog('Buddy');
dog.makeSound();
Java:
支持单继承和多实现,继承关系更加明确和严格 。
示例:
class Animal {
public void makeSound() {
System.out.println("Animal makes a sound.");
}
}
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof!");
}
}
Dog dog = new Dog();
dog.makeSound();
三、数据类型和类型转换
1.数据类型
JS:
是一种弱类型语言,变量的数据类型可以动态改变。有基本数据类型(如number
、string
、boolean
、null
、undefined
等)和引用数据类型(如对象、数组等)。
示例:
let x = 10;
x = 'Hello';
x = true;
Java:
是一种强类型语言,变量在声明时必须指定数据类型,并且不能随意改变。Java 有基本数据类型(如int
、double
、char
等)和引用数据类型(如类、接口、数组等) 。
示例:
int num = 10;
// num = "Hello"; // 编译错误,不能将字符串赋值给整型变量
2. 类型转换
JS:
自动类型转换比较灵活,可能会在一些情况下自动进行类型转换,这可能会导致一些意想不到的结果。例如,"1" + 2
的结果是"12"
,而不是3。
示例:
console.log("1" + 2); // "12"
console.log(1 + "2"); // "12"
console.log(true + 1); // 2
Java:
类型转换相对比较严格,需要显式地进行类型转换,否则会编译错误。例如,将int
类型转换为double
类型需要使用强制类型转换符(double)。
示例:
int num1 = 10;
double num2 = num1; // 自动类型转换,int 转换为 double
int num3 = (int) 10.5; // 强制类型转换,double 转换为 int
四、异常处理
1. 语法结构
JS:
使用try...catch...finally
语句来处理异常。可以捕获同步代码中的异常,但对于异步代码中的异常处理相对比较复杂,需要使用promise
、async/await
等方式来处理。
示例:
try {
// 可能抛出异常的代码
let result = 10 / 0;
} catch (error) {
console.log('An error occurred: ' + error.message);
} finally {
console.log('Finally block executed.');
}
Java:
同样使用try...catch...finally
语句来处理异常。Java 的异常处理机制更加完善,可以捕获各种类型的异常,包括编译时异常和运行时异常。
示例:
try {
// 可能抛出异常的代码
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("An error occurred: " + e.getMessage());
} finally {
System.out.println("Finally block executed.");
}
2. 异常类型
JS:
有一些内置的异常类型,如Error
、TypeError
、ReferenceError
等,但也可以自定义异常。
示例:
function divide(a, b) {
if (b === 0) {
throw new Error('Division by zero is not allowed.');
}
return a / b;
}
try {
let result = divide(10, 0);
} catch (error) {
console.log(error.message);
}
Java:
有丰富的内置异常类型,如IOException
、SQLException
、NullPointerException
等,并且可以自定义异常类来满足特定的需求。
示例:
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
public class Main {
public static void main(String[] args) {
try {
throw new CustomException("This is a custom exception.");
} catch (CustomException e) {
System.out.println(e.getMessage());
}
}
}
五、开发工具和生态系统
1.开发工具
JS:前端开发主要使用文本编辑器(如 Visual Studio Code、Sublime Text 等)和浏览器开发者工具进行调试。也有一些专门的前端框架和工具,如 React、Vue、Angular 等,以及包管理工具 npm 和 yarn。
Java:通常使用集成开发环境(如 IntelliJ IDEA、Eclipse 等)进行开发,这些 IDE 提供了强大的代码编辑、调试、构建和项目管理功能。Java 也有丰富的开发框架和库,如 Spring、MyBatis 等,以及包管理工具 Maven 和 Gradle。
2.运行环境
JS:主要在浏览器和 Node.js 环境中运行。浏览器提供了 DOM 和 BOM 等 API,用于网页开发;Node.js 是一个基于 Chrome V8 引擎的服务器端 JavaScript 运行环境,可以进行服务器端开发。
Java:可以在各种平台上运行,包括服务器、桌面应用、移动设备等。Java 虚拟机(JVM)提供了跨平台的运行环境,使得 Java 程序可以在不同的操作系统上运行。