和C类似,Java的执行也是嵌套的函数调用。JVM执行Java代码时,绝大多数情况下,先调用main
函数来执行代码,通过构造其他对象来调用构造函数,然后调用对象的方法。main
函数返回后,JVM退出程序。
在第一个Java程序里,public static void main(String[] args) {//...;}
就是函数的定义。其中public static
是修饰符(后面会讲,函数可以没有这一部分),void
是函数的返回值的类型,void代表什么都不返回,main
是函数名,(String[] args)
是函数的参数列表,列表的每一项是参数名和对应的类型,被花括号{}
包围的就是可以执行的代码。
下面这个例子里,定义了main
函数和一个名叫power
的函数。类似于数学函数 $f \left (x \right ) = x \cdot x $,这个函数接受一个变量x
,输出变量的平方。将来的专业课里会出现一大堆数学公式(除非你选中了软件工程),数学公式是一种程序,变换数学公式就会得到写法不同但是等价的程序。
public class Main{
public static void main(String[] args) {
System.out.println("power of " + 3 + "is: " + power(3));
}
/** */
public static double power(double x){
return x*x;
}
}
如上所示,调用在主类Main
中定义的函数,只需要写出方法名和参数:
power ( 3 )
//方法名 参数
调用函数的时候,在括号里写出参数,确保这些参数的类型和函数定义相匹配。Java执行函数调用的过程与C类似,在调用函数的时候用参数名(形参)作为变量名,传入的数值或变量(实参)赋给参数名,从而在函数内,根据参数定义创建一系列局部变量。
可以定义同名的不同方法,每个方法有不同的输入参数的类型组合,调用方法时通过传入的参数类型来确定被调用的方法。我们称这种关系为函数的重载。
一个类中可以有多个同名方法,其参数的个数和/或每个参数的类型不同,这种语法特性叫做函数的重载(function overload)
Java的输出函数println
就是被重载的函数。
PrintStream stream = System.out;
stream.println("Hello world");
stream.println(19260817);
stream.println(true);
后面我们还会见到其他的重载函数。
Java语言的运算符与C语言基本相同。
位运算符也与C语言基本相同
Java在Math类中,包含了各种各样的数学函数,我们需要使用时,在程序顶部加上
import static java.lang.Math.*;
简单列举如下:
sqrt(x)
——给x开根号pow(x, a)
——求x的a次幂sin(a)
cos(a)
tan(a)
PI
E
利用泰勒多项式展开,求解sin
函数的值,并与Java
内置的正弦函数比较取值。sin的泰勒展开(在原点处展开,只取前七次导数)为:
\(\sin{x} = x - \frac{x^3}{3!} + \frac{x^5}{5!} - \frac{x^7}{7!}\)
import static java.lang.Math.*;
public class Main{
public static void main(String[] args) {
System.out.println("sin taylor:\t"+sinTaylar(0.4*PI)+"sin system:\t"+sin(0.4*PI));
}
public static double sinTaylar(double x){
return x - pow(x,3)/(3*2*1) + pow(x,5)/(5*4*3*2*1) - pow(x,7)/(7*6*5*4*3*2*1);
}
}
与C语言类似
与C语言类似