【Java】快速入门

简介: 【Java】快速入门

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了
}


相关文章
|
6月前
|
固态存储 Java 测试技术
Java快速入门体验
Java快速入门体验
36 0
|
7月前
|
安全 Oracle Java
【Java快速入门】Java语言的课外知识(番外篇)
【Java快速入门】Java语言的课外知识(番外篇)
61 0
|
6月前
|
存储 Java C#
c#快速入门~在java基础上,知道C#和JAVA 的不同即可
c#快速入门~在java基础上,知道C#和JAVA 的不同即可
90 0
|
6天前
|
Java
安装JAVA_JDK快速入门
安装JAVA_JDK快速入门
|
6天前
|
Oracle IDE Java
JAVA快速入门基础指南
Java 是一种强大的、面向对象的编程语言,广泛用于开发企业级应用、Android应用、服务器端应用等。
12 0
|
6天前
|
Java 测试技术 索引
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
【4月更文挑战第3天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
32 1
滚雪球学Java(14):快速入门JavaSE-for循环语句,轻松掌握编程技巧
|
7月前
|
机器学习/深度学习 并行计算 Java
【java】 vector api 快速入门
【java】 vector api 快速入门
351 0
|
9月前
java202304java学习笔记第六十五天-ssm-声明式控制-快速入门1
java202304java学习笔记第六十五天-ssm-声明式控制-快速入门1
17 0
|
8月前
|
存储 设计模式 Java
JAVA快速入门总结
JAVA快速入门总结
32 0
|
9月前
java202304java学习笔记第六十五天-ssm-声明式控制-快速入门2
java202304java学习笔记第六十五天-ssm-声明式控制-快速入门2
28 0