https://www.liaoxuefeng.com/wiki/1252599548343744/1255878730977024
https://www.runoob.com/java/java-basic-syntax.html
https://www.cnblogs.com/fuhongliang/p/4304477.html
main函数必须要带参数(String[] args)吗?
public static void main(String[] args)
,我看所有的main函数声明都写成这样,前面的都好理解,只有这个参数(String[] args)必须要带吗?能不能不带,或者换成其他的参数?这个参数有何用,main函数调用的时候又用不着他,再说也没人给main函数传参呀。
String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数。java 本身不存在不带String args[]的main函数,java程序中去掉String args[]会出现错误。
建个test类 在cmd中运行时输入java test a b c,并且在你的main函数里面加这段话:System.out.println(“arg is”+args[0]+" “+args[1]+” "+args[2])
,然后看看输出是什么?
是不是:
This is a simple Java program arg is a b c test.java*******
Java规定,某个类定义的public static void main(String[] args)
是Java程序的固定入口方法,因此,Java程序总是从main方法开始执行。
注意到Java源码的缩进不是必须的,但是用缩进后,格式好看,很容易看出代码块的开始和结束,缩进一般是4个空格或者一个tab。
最后,当我们把代码保存为文件时,文件名必须是Hello.java,而且文件名也要注意大小写,因为要和我们定义的类名Hello完全保持一致。
为什么我的java类名是public的,其源文件名就一定要和类名一致??
JAVA中只能有一个public类,而且文件名要和这个类的类名相同:
1.在一个文件中,有且只能有一个public类,该类与文件同名
2.在一个文件中,可以不存在public类
3.在一个文件中,可以不存在与文件同名的类(前提是此文件中没有public类)
一个 .java 文件,可以有多个类,但是文件名只能有一个,用哪一个类名来充当文件名呢?
其实文件名是无所谓的,因为将来用 javac 进行编译的时候,最终会生成多个 .class 文件,每一个类对应个 .class 文件。运行时只要运行对应的 .class 文件就可以了,这时 .java 文件就显得没什么用了( 运行时不需要 ),那还管它叫什么名字。
但是当你的类被 public 修饰时,此时文件名必须和该类保持一致(例如 public class A{} 只能放在 A.java 文件中,不然在用 javac 编译时会提示错误:类 A 是公共的,应在名为 A.java 的文件中声明)。
也就是说在同一个 .java 文件中,不应该出现2个或2个以上的 public class 。如果有一个public class类,就应该让文件名和此类名相同;那如果没有呢,即所有的 class 都没有修饰符,那么可以给该文件随便起名字,甚至可以不和任意一个类同名,哪怕是汉字名称都可以,但是后缀还是要有.java 的 ( 哈哈,不信就试试 ) 。
注:有很多初学者 ( 我也是 ) 可能会认为文件名应该也和 main 方法所在类有关系,其实不然。**main 方法只是程序的一个入口,老师讲“一个程序只能有一个入口”,**好象是在说只能有一个 main 方法,其实,只要你高兴,就可以在所有类里都写上 main 方法,给程序提供N多个入口,但是最后你运行程序的时候也只能从其中的一个入口进去,这就是 main 的作用( 程序入口 )。(这也就是为什么你会发现,程序员在做单元测试时,会往自己做的很多类里面添加 main 方法,因为他要为自己做的东西添加运行入口,从而能方便测试。)
public class test { public static void main(String[] args) { System.out.println(“This a java program!”); System.out.println(“arg is”+args[0]+" “+args[1]+” "+args[2]); } } cmd********* C:>javac test.java C:>java test a b c This a java program! arg isa b c
综上,main必须要带String args[]。*
打开文本编辑器,输入以下代码:
public class Hello { public static void main(String[] args) { System.out.println(“Hello, world!”); } }
在一个Java程序中,你总能找到一个类似:
public class Hello { … }
的定义,这个定义被称为class(类),这里的类名是Hello,大小写敏感,class用来定义一个类,public表示这个类是公开的,public、class都是Java的关键字,必须小写,Hello是类的名字,按照习惯,首字母H要大写。而花括号{}中间则是类的定义。
注意到类的定义中,我们定义了一个名为main的方法:
public static void main(String[] args) { ... }
小结
一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致;
使用javac可以将.java源码编译成.class字节码;
使用java可以运行一个已编译的Java程序,参数是类名。
https://www.cnblogs.com/fuhongliang/p/4304477.html
注:有很多初学者 ( 我也是 ) 可能会认为文件名应该也和 main 方法所在类有关系,其实不然。main 方法只是程序的一个入口,老师讲“一个程序只能有一个入口”,好象是在说只能有一个 main 方法,其实,只要你高兴,就可以在所有类里都写上 main 方法,给程序提供N多个入口,但是最后你运行程序的时候也只能从其中的一个入口进去,这就是 main 的作用( 程序入口 )。(这也就是为什么你会发现,程序员在做单元测试时,会往自己做的很多类里面添加 main 方法,因为他要为自己做的东西添加运行入口,从而能方便测试。)
对于一个public类,它是可以被项目中任何一个类所引用的,只需在使用它前import一下它所对应的class文件即可。将类名与文件名一一对应就可以方便虚拟机在相应的路径(包名)中找到相应的类的信息。如果不这么做的话,就很难去找,而且开销也会很大
我们注意到public除了可以修饰class外,也可以修饰方法。而关键字static是另一个修饰符,它表示静态方法,后面我们会讲解方法的类型,目前,我们只需要知道,Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。
方法名也有命名规则,命名和class一样,但是首字母小写:
好的方法命名:
main goodMorning playVR
常量
定义变量的时候,如果加上final修饰符,这个变量就变成了常量:
final double PI = 3.14; // PI是一个常量 double r = 5.0; double area = PI * r * r; PI = 300; // compile error!
var关键字
有些时候,类型的名字太长,写起来比较麻烦。例如:
StringBuilder sb = new StringBuilder();
这个时候,如果想省略变量类型,可以使用var关键字:
var sb = new StringBuilder();
编译器会根据赋值语句自动推断出变量sb的类型是StringBuilder。对编译器来说,语句:
var sb = new StringBuilder();
实际上会自动变成:
StringBuilder sb = new StringBuilder();
因此,使用var定义变量,仅仅是少写了变量类型而已。
移位运算
整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:
NaN表示Not a Number
Infinity表示无穷大
-Infinity表示负无穷大
for each循环
this变量
在方法内部,可以使用一个隐含的变量this,它始终指向当前实例。因此,通过this.field就可以访问当前实例的字段。
如果没有命名冲突,可以省略this。例如:
class Person { private String name; public String getName() { return name; // 相当于this.name }
但是,如果有局部变量和字段重名,那么局部变量优先级更高,就必须加上this:
class Person { private String name; public void setName(String name) { this.name = name; // 前面的this不可少,少了就变成局部变量name了 }