java-day3
目录
早上
第一节课
回顾昨天的内容
注意:编译生产的class文件的名字,不是和java文件名字保持一致,而是和java类的名字保持一致, 因为如果一个java类不是pub1ic的,那么这个类的名字是可以和java文件名字不一致的,但是最后编译生产的class文件会和类的名字保持一致。I
注意: 一个java源文件中,可以编写多个java类,他们是平行/并列的关系,也就是说编译一个java源文件,可能同时生产多个class文件,每一个class文件都对应了这个java源文件中的一个java类
注意: 一个java源文件中,可以编写多个java类,但是最多只能有一个类是public的,而且如果这个类是pub1ic的,那么这个类的名字就必须和java源文件的名字保持一致。
一个类中没有声明public类(文件名不用和类名一致)
第二节课
回顾程序入口的知识
使用java命令去运行一个类,其实就是运行这个类中的程序入口(main方法)
把java代码编译成class之后,我们还可以把class文件打成一个jar包
1、jar包本质.上其实就是一个压缩包,使用电脑中的解压缩软件,就可以直接把这个压缩包打开,也可以进行添加、删除和修改等操作。
2、使用jar命令,就可以完成class的打包工作,打包完成只会,jar中不仅有class文件,还有一些对当前jar做出描述的文件 /META-INF目录下生产一个MF文件。
3、默认情况下,这个jar是不能直接运行的,也就是它不是一个可执行jar包,我们可以通过对MF文件的修改,让它变成一个可执行的jar包,前提是这个jar中的class文件里面的类中有程序入口。
修改方式:MF文件中国添加一行内容,格式为key:value
Main-Class: 包.类名
如果没有包,那么就直接写类,但是这个类一定有程序入口
MF文件最后的样子
这样子这个jar包就变成一个可执行jar包,通过java命令直接运行
例如:java -jar Hello.jar
压缩成jar包
修改MF文件
通过java包直接运行可执行jar包
第三节课
jar包的打包方式
jar -cvf hello.jar Hello.class
把当前目录下的Hello.class打到Hello.jar这个jar包当中
把当前目录下的Hello.class Person.class打到hello.jar这个jar包中
jar -cvf hello.jar Hello.class Person.class
把当前目录下的所有的class打到hello.jar这个jar包中
jar -cvf hello.jar *.class
把当前目录下的test文件夹里面的所有文件打到这个jar包中,同时包含test文件夹
jar -cvf hello.jar test/ (/可以不要)
把当前目录下的test文件夹里面的所有文件打到这个jar包中,但是不包含test文件夹
jar -cvf hello.jar -C test.
包含当前文件夹
不包含当前文件夹
maven可以收集各个网站的jar包
https://mvnrepository.com/
下载调用别人的API
下午
第一节课
修改MF文件的时候容易出现的问题
1、单词拼写的错误
错例:Mian-Class
正例:Main-Class
2、中英文输入法切换问题
错例:Main-Class:
正例:Main-Class:
3、MF最后要保留一个空行
错例:
--------------------
Manifest-Version: 1.0
Created-By: 1.8.0_74 (Oracle Corporation)
Main-class: Hello
--------------------
正例:
---------------------
Manifest-Version: 1.0
Created-By: 1.8.0_74 (Oracle Corporation)
Main-class: Hello
---------------------
package对class起到的作用
在程序中要区分一些东西,我们一般会采用【命名空间】的设计方式
在java中,package其实就是class的命名空间,用来唯一标识这个类的
一般情况,这个包是一个公司、组织、社团所在的网站,把网址倒过来写
例如: http://commons.apache.org/这个官网下的项目代码中的包都是以pacakge org.apache.commons开头的。
一个类加上包名,在编译后这个类的包都必须要有对应的文件夹
一个类加上包的编译运行
package com.briup.test;
public class He11o{....}
运行的时候需要加入包名: java com.briup.test.Hello
生成的class文件需要放到和包名对于的目录结构中: com/briup/test/Hello.class
在编译一个带包的类的时候,可以添加命令参数,让编译器自动生成和包对应的目录结构
将两个类都加上包编译运行
//Hello类
package com.xxx;
import org.apache.commons.lang3.math.NumberUtils;
public class Hello{
public static void main(String [] args){
int a=NumberUtils.max(1,2,3);
System.out.println(a);
Person.getA();
}
}
//Person类
package com.xxx;
public class Person {
public static void getA(){
System.out.println("hahaha");
}
}