java程序由一个类声明组成,使用关键字public class声明。在Java中,所有代码都位于类中。
运行的代码在一个名为main的方法中,该方法被声明为public static void main(String[] args)。
我们使用大括号{}表示一段代码的开始和结束。语句必须以分号结束
执行Java程序最常见的方法是通过两个.program的序列运行它。第一个是Java编译器,或javac。第二个是Java解释器(Java)。
Java最重要的特性之一是所有变量和表达式都有一个称为静态类型。
Java变量可以包含这种类型的值,而且只能包含这种类型的值。
此外,变量的类型永远不能改变。
Java编译器的关键特性之一是它执行静态类型检查。
静态类型具有以下优点:
String h = 5 + "horse";
int h = 5 + "horse";
第一个会成功,第二个将给出一个编译器错误。由于Java是强类型的,如果您告诉它h是一个字符串,它可以将元素连接起来并给您一个字符串。但是当h是int型时,它不能把一个数字和一个字符串连接起来然后给你一个数字。
Python不限制类型,也不能假设你想要什么类型。x =5 +“horse”应该是一个数字吗?一个字符串?Python不知道。所以它出错了。
在Python等语言中,函数可以在任何地方声明,甚至可以在函数外部声明。
在java中,不能在外面定义一个函数,所有的函数必须是类的一部分,类中的函数成为方法,所以在java中所有的函数都是方法。
函数的所有参数必须有声明的类型,Java中的函数只能返回一个值
好的编程风格的一些最重要的特征是:
Java中的所有代码都必须是类的一部分(或类似于类的东西,我们将在后面学习)。大多数代码都是在方法内部编写的。
让我们考虑一个例子:
public class Dog {
public static void makeNoise() {
System.out.println("Bark!");
}
}
如果尝试运行Dog类,我们只会得到一条错误消息:
$ java Dog
Error: Main method not found in class Dog, please define the main method as:
public static void main(String[] args)
我们定义的Dog类不做任何事情。我们简单地定义了狗狗可以做的事情,即制造噪音。要实际运行这个类,我们要么需要向Dog类添加一个主方法。或者我们可以创建一个单独的DogLauncher类来运行来自Dog类的方法。例如,
public class DogLauncher {
public static void main(String[] args) {
Dog.makeNoise();
}
}
一些关键的观察和术语:
构造函数,实例化是参数化的,从而节省了我们手动输入许多实例变量赋值的时间和混乱。
public class DogLauncher {
public static void main(String[] args) {
Dog d = new Dog(20);
d.makeNoise();
}
}
Java允许定义两种类型的方法:
实例方法是只能由类的特定实例执行的操作。静态方法是类本身采取的操作。两者在不同的情况下都是有用的。作为静态方法的一个示例,Math类提供了一个sqrt方法。因为它是静态的,我们可以这样调用它:
x = Math.sqrt(100);
如果sqrt是一个实例方法,我们就会得到下面这种的语法。
Math m = new Math();
x = m.sqrt(100);
有时,一个类同时具有实例方法和静态方法是有意义的。例如,假设想要比较两只狗的能力。
一种方法是添加一个静态方法来比较Dogs。
public static Dog maxDog(Dog d1, Dog d2) {
if (d1.weightInPounds > d2.weightInPounds) {
return d1;
}
return d2;
}
//此方法可以通过以下方式调用:
Dog d = new Dog(15);
Dog d2 = new Dog(100);
Dog.maxDog(d, d2);
另一种方法是添加一个非静态方法来比较Dogs。
public Dog maxDog(Dog d2) {
if (this.weightInPounds > d2.weightInPounds) {
return this;
}
return d2;
}
//调用方式:
Dog d = new Dog(15);
Dog d2 = new Dog(100);
d.maxDog(d2);
用类名调用的是静态方法,用具体实例变量调用的是非静态方法
//test
public static Dog maxDog(Dog d1, Dog d2) {
if (weightInPounds > d2.weightInPounds) {
return this;
}
return d2;
}
类拥有静态变量有时是有用的。这些静态属性是类本身固有的,而不是实例固有的。
例如,我们可能会记录狗的学名(或双名)是“Canis familiaris”:
public class Dog {
public int weightInPounds;
public static String binomen = "Canis familiaris";
...
}
静态变量应该使用类的名称来访问,而不是使用特定的实例,例如,你应该使用Dog.binomen, 不是 d.binomen。虽然Java在技术上允许您使用实例名访问静态变量,但这是一种糟糕的风格。
/**
< 10:yip
< 30:
bark
>=30:
woof
*/
public class DogLoop {
public static void main(String[] args) {
Dog smallDog = new Dog(5);
Dog mediumDog = new Dog(25);
Dog hugeDog = new Dog(150);
Dog[] manyDogs = new Dog[4];
manyDogs[0] = smallDog;
manyDogs[1] = hugeDog;
manyDogs[2] = new Dog(130);
int i = 0;
while (i < manyDogs.length) {
Dog.maxDog(manyDogs[i], mediumDog).makeNoise();
i = i + 1;
}
}
}
/**输出:
bark!
woof
woof
错误
*/
有了到目前为止学到的知识,现在是时候揭开我们一直用于main方法的声明的神秘面纱了。把它分成几个部分,