2021年12月31日学习记录 续
关于Java语言的基础语法
1.主方法
在Java语言中,和C语言一样存在着函数,但是在Java中函数也叫方法,其实都是function的不同翻译。在Java中,如果要写一个简单的程序,那么首先至少要创建一个类,当然这个类是逻辑上的概念,在物理上,处于编写阶段的代码都存在于一个Java文件上,类的书写便是在这个Java文件上写的,而若想让一个程序得以运行,那么就要有主方法,主方法是一个程序得以运行的引擎,是所有程序得以展现的窗口,你可能在Java文件中写了很多个方法很多个类,但是他们若想运行起来的话,那必须要写在主方法里调用。
public class Test{
public static void main(String[] stg){
System.out.println("See you cowboy Bebop!");
}
}
如上代码所示,就是一个基本的主方法了,主方法要写在主类中,主类的名称(这里为Test)必须要和其所位于的Java文件同名,在这里运行这段代码便可以在屏幕上显示出“See you cowboy bebop!”的字样。
当然我们所要知道的还有:一个Java文件中允许存在多个类,如:
public class Test{
public static void main(String[] stg){
System.out.println("See you cowboy Bebop!");
}
}
class fair{
public static int flash(int x){
return x + 5;
}
}
然而在编译时,情况就有所不同了,在将Java文件进行编译后,我们会得到class文件,存在有多个class文件的java文件,会被编译成多个独立的class文件,但是除了含有主方法外的class文件,其他class文件并不能运行。
实际上,任何编程语言都是需要主方法作为运行接口的,主方法相比较与其他的方法也是与众不同的,主方法和其他方法的区别在于主方法可以接受外界刺激并且执行,也就是说主方法是整个程序和外界的接口,程序的运行需要主方法作为媒介和窗口,没有主方法的类就是一个等待使用的类。同时在我们构建项目的过程中会写很多程序,然而具有主方法的程序在其中也是独一无二的,具有主方法的程序可以独立运行,在独立运行起来时,就叫做进程,也就是说,一个带有主方法的程序可以自身变为进程。如果是其他进程调用的库,那它就是一个库,而不是进程。依靠自己的主方法启动的程序叫做进程,而被进程调用,自身并不存在主方法的程序在未运行时称为库,在开始运行之后会作为进程中的线程存在。
PS:在主方法的参数栏内,我们发现有一个字符型的数组,这其实是一个外部传参用的形参,他可以存储外部参数,存在数组内并可以在主函数内使用,在命令行中运行时,我们在类名之后可以写上一些参数,这样在运行时这些参数就可以被传入到主函数中去并加以使用,至于其名称,可以是任何字母,这里是stg,但实际上这里写成aaa,bbb都没问题,不影响参数的使用。
2.其他方法
方法存在于类中,按照面向对象的思维理解可以理解成为某一类事物所具备的能力,行为方式,如狗类就可以具备“咬”的方法。主方法通常位于主类,而其他方法则可以根据需求存在于任何位置,主类中也可以存在很多方法。
public class Test{
public static void main(String[] aaaa){
//System.out.println("See you cowboy Bebop!");
int x = 9;
int y = 2*x - 11;
int mm = f(4);
int ww = f(f(mm) - x);
int tt = f(y);
System.out.println(mm);
System.out.println(ww);
System.out.println(tt);
double aa = g(f(6),tt);
double dd = g(f(mm) + 7,6 - x);
double uu = g(f(4) + 1,3);
System.out.println(aa);
System.out.println(dd);
System.out.println(uu);
int ee = kk(10);
System.out.println(ee);
/*设函数kk(x),x属于N,x>=0,kk(x) = {
x, x<=1
kk(x - 1)+kk(x - 2) x > 1}使用递归实现*/
}
public static int f(int x){
return 2*x - 9;
}
public static double g(int x,int y){
if(x > 0){
return 2*x - y +5.6;
}
else if(x<0){
return f(x+5) - y;
}
else{
return f(2*y + 3) - 0.5;
}
}
public static int kk(int x){
if(x<2)
return x;
else{
return kk(x - 1)+kk(x-2);
}
}
}
如上文所示,在主方法之外也可以存在其他的方法,不同的是这些方法并不会自己运行,若想让它们运行,需要在主方法内调用它们。在最后一个函数kk中,这个函数发生了自身调用,这实际上就是方法的递归调用,Java语言同C语言一样也存在递归函数,但是Java语言的递归效率比C语言慢得多,而且更容易内存溢出,因此在使用时应该更加小心谨慎。
说到递归,我们不得不考虑到递归的终止条件,因为递归是函数不断调用自身,如果没个头,那么迟早会发生栈溢出,导致内存不够用,因此每一个递归函数中,都要有一个终止机制,同时终止机制和自身调用必需位于两个条件互斥的判断中,这样整个函数才能保证递归一定有尽头。任何递归方法里边必然有两个互斥条件,一个条件是调用自身,一个条件是终止自身调用,否则会导致栈溢出。斐波那契数列是典型的递归调用。
3.数据类型
在Java中存在很多不同类型的数据,如整数,小数,字符等,这些数据都占据不同的大小,也就是说占不同的内存容量,在计算机中,他们的存储都是用二进制表示的,因此他们的容量计数单位是比特位,一bit就是一个二进制位,整数中有byte,short,int,long几种常用类型,byte占8个比特位,short占16个比特位,int占32个比特位,long占64个比特位;小数通常有float,double两种常用类型,float占32个比特位,double占64个比特位;字符型根据编码决定占多少比特位,通常来说包含的字符类型越多的编码方式,占据的大小越大;布尔型数据仅有boolean型,占据32个比特位。