Java项目类型
- Java可以开发多种类型的项目,每种类型的项目都有特定的应用场景
- Java Application(Java入门程序)是最简单的一种
Java中的标识符
尽量不要用$打头,在Java中美元符一般用于标识内部类生成的.class 文件
其实并不是只能有一个public class
如果把一个public class定义在公有类之内也可以,只是不能在公有类之外再在同一个class文件中定义公有类
main方法
Java中的方法多用于完成某个任务并返回结果信息,一个Java应用程序可以包含一个或多个方法
Java应用程序从main方法开始执行
public static void main(String[] args)
//必须严格这样声明
//void表明main方法不返回任何结果
//把void改成int不能编译不能运行
- 如果JVM找不到main方法会抛出NoSuchMethodError:main异常
- main方法被一个特定的线程“main”运行,程序会一直运行直到main线程结束或者non-daemon线程终止
- 当你看到“Exception in Thread main”如:Excpetion in Thread main:Java.lang.NullPointedException ,意味着异常来自于main线程
- 你可以声明main方法使用java1.5的可变参数的方式如:
public static void main(String… args) - 除了static、void、和public,你可以使用synchronized、和strictfp修饰符在main方法的签名中,如:
public static final synchronized static void main(String[] args) - main方法可以在Java中像其他方法一样被重载,但是JVM只会调用上面这种签名规范的main方法
- 可以使用throws子句在方法签名中,可以抛出任何checked 和unchecked异常
- 静态初始化块在JVM调用main方法前被执行,它们在类被JVM加载到内存的时候就被执行了
- 在static修饰的方法体内不能直接使用非static修饰的成员变量和成员方法
【为什么Java规定作为程序入口点的main()方法是静态的?】
static方法是存储在静态存储区的,可以直接用类名调用,不需要进行实例化,如果不用static,则调用之前必须要实例化,而main是程序的入口程序从这开始,不可能在这之前对main进行实例化,所以使用static可以更方便的直接用类.main()对其调用。
在C/C++中main方法不是属于某个类的,是一个全局的方法,当运行的时候,就能很容易的找到main方法并执行,但Java不一样,Java都是以类组织在一起的,当我们运行某个程序的时候,我们并不知道这个main方法放在哪个类中,也不知道是否要产生一个类的对象,而定义为static之后,在我们执行一个Java代码的时候,比如输入 java Test ,编译器就自动到Test类中去寻找Test类的方法,而不产生Test类的对象
【为什么Java规定作为程序入口点的main()方法是public的?】
因为main方法是公共的,JVM就可以轻松的访问执行它。
【为什么main方法没有返回值?】
因为main返回任何值对程序都没有任何意义。
实例一
Java Application中的输出语句
System.out.println("welcome to java programming!");
- System.out println 打印一个字串
- Java中的字串----由双引号包围的一系列字符
- 字符串中的空白符会被编译器保留
- system是类名,out是这个类的一个字段,system.out 引用Java所提供的“标准输出对象”,println是这一对象所拥有的方法,其功能是——在命令提示符窗口中输出内容
实例二:在一个对话框中显示文本
显示的是这个东东!
写的时候出现了一个问题就是显示莫得这个javax这个包
解决方案
在module-info(你的包里的最下面)的
module ***{
requires java.desktop;requires javafx.graphics; //添加这个【其实点击左侧的红点点然后选择就好】
}
- 大多数Java应用程序使用窗口或对话框
- JOptionPane类允许我们使用对话框来显示一些信息
Package(包)
- 相关的类被放在一起,成为“package”
- JDK预置的所有的包构成“Java标准类库”或“Java应用程序编程接口(Java API)
- JOptionPane在包javax.swing中,此包中有一些可用于”图形界面GUI(Graphical User Interfaces)设计“的类
Java SE API中的2种包
- 核心包(core packages):以“java”开头,由JDK之内提供
- 扩展包(extension packages):以“javax“开头
- 第三方包:通常以”反写“的公司网址开头,这是一种约定,并非强制性的。比如package名为:com.example,它实际上代表一家公司,其网址通常为:http://www.example.com
package的使用
- 使用某类前,需要用import语句来导入它所在的包
import javax.swing.JOptionPane;
import语句供编译器用来识别和定位Java程序中用到的类;上述语句告诉编译器在javax.swing包中装入类JOptionPane 的定义,这样在源程序代码中就可以使用它了。
使用对话框
JOptionPane.showMessageBialog(null,"welcome\nto\njava\nprogramming!");
- 调用类JOptionPane的showMessageDialog方法显示消息框
- 注意方法名开头字母小写,与类名的要求不同
- showMessageDialog是一个静态(static)方法
- 静态方法用”类名.方法名(参数列表)“的形式调用
结束应用程序
System.exit(0);
- 调用静态类System的静态方法exit结束程序
- 参数0表明程序顺利结束,非0表示有❌发生
- 类System属于包java.lang,这是一个核心包,自动被每个Java程序所引入,不需哟import语句就可以直接使用
- System.exit()可用于运行停机钩在节目退出之前。在大型程序中,这是一种处理关闭的方便方法,因为程序的所有部分都不能(也不应该)相互了解。然后,如果有人想退出,他可以打电话System.exit(),关机挂钩(如果设置正确的话)负责执行所有必要的关闭仪式,如关闭文件、释放资源等。
“此方法永远不会正常返回。”这意味着该方法不会返回;一旦线程到达那里,它就不会返回。
另一种可能更常见的退出程序的方法是简单地到达main方法。但是,如果有任何非守护进程线程正在运行,它们将不会被关闭,因此JVM不会退出。因此,如果您有任何这样的非守护进程线程,则需要一些其他方法(关闭钩子除外)来关闭所有非守护进程线程并释放其他资源。如果没有其他非守护进程线程,则从main将关闭JVM并调用关机挂钩。
出于某种原因,关闭钩子似乎是一种被低估和误解的机制,人们正在用各种专有的自定义黑客重新发明轮子,以退出他们的程序
- public static void exit(int status) {
Runtime.getRuntime().exit(status);
}
/*他是System类的一个静态方法,作用是是关掉jvm,status参数是状态参数,0是正常关闭!其他非0为非正常关闭。
在异常里可传递其他非0参数关闭JVM,如:*/
try{
//TODO
}catch(Exception e){
System.exit(1);// abnormal termination.
}
dispose():关闭当前程序,释放资源。而exit不释放内存资源。
实例三:JavaAppArguments.java
- main方法参数是一个字串数组,代表命令行接收的参数,一下代码提取出所有参数并列出其值:
- 指定命令行参数
在run as选项中,有一个Run Configurations…里面的Arguments可以进行命令行参数的选择
- 在终端执行Java步骤
vim helloworld.java//新建一个Java文件,然后可以在vim编辑器里对helloworld进行编写
javac helloworld.java//将.java编译为.class字节码文件
java helloworld//注意这里不要带.java
java class名 参数1 参数2 //要传入的命令行参数之间要用空格隔开
- 上题代码
public class helloworld
{
public static void main(String[] args)
{
System.out.println("hello world!");
int sum=0;
for(String arg:args)
{
sum=sum+Integer.parseInt(arg);
}
System.out.println("sum="+sum);
System.out.println("参数个数="+args.length);
//System.out.println(arg);
}
}
关于String字符转换成可计算数字要调用Integer类中的静态方法Integer.parseInt(String[] str);
⚠️思考问题的时候本题是把String转换成Int,在String类中常用的没找到,考虑能不能在Integer类中找到
String和int互转的方法
- String转换成int(2种)
int i = Integer.parseInt(String);
int i = Integer.valueOf(String).IntValue();
- int转换成String(3种)
String str = String.ValueOf(i);
String str = String.toString(i);
String str = ""+i;