main方法
java中执行一个java程序的方式:先将.java文件转换为.class文件,然后调用main方法。
那么,什么是main方法呢?
首先,java需要加载类之后就调用方法,不需要类的实例化,所以方法必须修饰为static
main只是用于调用,所以不需要返回值,所以需要void
main方法需要虚拟机访问,因此必须为public(由虚拟机的特殊性决定的)
因为java规定main方法必须能够传入参数,以便有时在执行时传入参数,所以参数处必须为String数组形式:String[]args
因此,遵循以上原则,main方法需要这样写:
publicstatic void main(String[] args){ }
java的类加载器
一个main方法具体是怎么由java虚拟机执行的呢?
编译器将.java文件编译为.class文件
然后虚拟机登场了,将class文件解析,并且用java.lang.ClassLoader 将其转换为一个Class的对象,然后调用newInstance()方法,就可以把类实例化了,然后再调用这个类的一个名字为main的方法,main方法就可以运行了。
但是,需要注意的是,假如虚拟机发现已经通过ClassLoader加载了一个类之后,就不会再次加载了,但是会再次调用newInstance()方法。这也就是为什么类中的static属性只加载一次的原因。简单来说,main方法的执行就是通过反射机制实现的。
简单的类加载过程模拟:(模拟,并非真正的实现方式)
Classclass1=Class.forName("test.Test1");
Objectobj=class1.newInstance();
Method method1=class1.getMethod("main",new Class[] {String[].class });
method1.invoke(class1,null);//这里null应该为执行class文件时传入的参数
标识符
标识符是什么东西呢?就是咱们自己起的一些名字,比如给类(Class)起的名字,给方法起的名字等等。
标识符有一些规范:
1.肯定的,不能是java的关键字,比如我想给方法 起名为void,然后返回值为int,那么方法写成这样了:
int void(){ }
那么,谁能看懂这个到底是返回什么的吗?而且这样很混乱,不是吗?
2.不能是特殊符号和标点符号,简单来说,只能是数字,字母,下划线。当然中文也可以。原因嘛,规定了。
3.不能是数字开头,因为假如允许数字开头,我可以这样写一个标识符:1。那么请问,我怎么区分这是数字还是标识符呢?
常见标识符规范
包名:全部小写(如:multiplicationtable)
类名:每个单词的首字母大写(如:MultiplicationTable)
变量名:第一个字母小写,以后每个单词的首字母大写(如:multiplicationTable)
常量:全部使用大写字母,单词间用下划线隔开(如:MULTIPLICATION_TABLE)
控制语句
控制语句分为条件型和循环型。
条件型:用于对数据的过滤,只对符合要求的部分进行操作。
循环型:对于一些有规律的变化的程序段,可以用循环来解决,但是有时规律还是挺难找的。
至于swtich,因为只能判断int或者低于int的数字,因此作用范围太小,现实中一般不用,因为if,else足可以替代。