10.9日
. 定义与语法
JavaScript:
函数可以使用关键字 function 定义,也可以使用箭头函数(ES6+):
javascript
function myFunction(a, b) {
return a + b;
}
const myArrowFunction = (a, b) => a + b;
Java:
函数是类中定义的方法,必须指定返回类型,并且所有的方法都属于某个类:
java
public class MyClass {
public int myMethod(int a, int b) {
return a + b;
}
}
2. 作用域与闭包
JavaScript:
支持闭包,使得在函数内部定义的函数可以访问外部函数的变量。
Java:
不支持闭包,局部变量的作用域仅限于其定义的代码块。
3. 参数类型与重载
JavaScript:
是动态类型语言,参数无需指定类型,并且函数可以接受可变数量的参数:
javascript
function myFunction(...args) {
return args.reduce((sum, value) => sum + value, 0);
}
Java:
是静态类型语言,函数参数类型必须显式声明,并支持方法重载(可以定义多个同名方法,参数不同):
java
public int myMethod(int a, int b) { ... }
public double myMethod(double a, double b) { ... }
4. 对象与上下文
JavaScript:
函数可以作为对象的属性,并且 this 的值取决于函数的调用方式。
Java:
this 关键词指向当前类的实例,固定于类的上下文。
5. 高阶函数
JavaScript:
非常支持高阶函数(可以接受函数作为参数或返回函数),在函数式编程中具有广泛应用。
Java:
虽然 Java 8 引入了 lambda 表达式,使得函数式编程成为可能,但它仍然主要面向对象。
对象的定义和创建
JavaScript:
JavaScript 中的对象是动态的,可以使用对象字面量创建,且不需要提前定义类。
javascript
const person = {
name: 'Alice',
age: 30
};
Java:
Java 是面向对象的编程语言,必须先定义类,再创建对象。例如:
java
public class Person {
String name;
int age;
}
Person alice = new Person();
alice.name = "Alice";
alice.age = 30;
2. 类型系统
JavaScript:
JavaScript 是动态类型语言,变量的类型可以在运行时改变。
Java:
Java 是静态类型语言,变量的类型在编译时已确定,必须在声明时指定类型。
3. 继承机制
JavaScript:
使用原型继承,不同对象可以共享同一个原型。
javascript
const animal = {
speak: function() {
console.log('Animal speaks');
}
};
const dog = Object.create(animal);
dog.speak(); // 输出: Animal speaks
Java:
使用类的继承,通过关键字 extends 来实现。
java
class Animal {
void speak() {
System.out.println("Animal speaks");
}
}
class Dog extends Animal {
void speak() {
System.out.println("Dog barks");
}
}
4. 构造函数与类
JavaScript:
可以使用构造函数创建对象,也可以使用 ES6 的类语法,语法上更灵活,但基础是原型。
javascript
function Animal(name) {
this.name = name;
}
const dog = new Animal('Dog');
Java:
类中总是有构造器,构造器用于初始化对象的状态。
java
public class Animal {
String name;
public Animal(String name) {
this.name = name;
}
}
Animal dog = new Animal("Dog");
5. 方法定义
JavaScript:
方法可以直接在对象字面量中定义,也可以在构造函数或类中定义,可以是任意值类型。
Java:
方法需在类中定义,且有明确的返回类型。
6. 访问修饰符
JavaScript:
没有传统意义上的访问修饰符,但可以通过命名约定和闭包来模拟私有属性。
Java:
具有严格的访问控制,使用 public、protected 和 private 修饰符来控制对类成员的访问。