java---入门重点(2)

编译java程序过程:

1.构建后缀名为.java的文件

2.在源文件中写准备类等程序

3.把源文件编译成字节码文件

javac+ 源文件名字

-------> ***.class
eg:
javac hello.java
java hello

字节码文件是运行在jvm虚拟机上的

4.java 运行的字节码文件中的程序名字


1.java特性

1.跨平台:

java能够跨平台指的是一个操作做系统中书写的程序编译成class文件可以拿到其他操作系统中进行的。

为什么java语言可以跨平台?

答:java语言本身不跨平台的

​ jvm:java虚拟机

​ 虚拟出一个你可以能够运行的环境,我们的Java代码是运行在我们的虚拟机里面的,每个操作系统都有相应的虚拟机。

2.java不需要我们管理内存:

java中存在垃圾回收器

垃圾回收器:java中一个特定的线性控制的,每隔一段时间根据算法计算出哪块内存不用,回收掉,我们虽然可以控制调用垃圾回收器,但是垃圾回收器不一定工作。

System.gc(); //启动java垃圾回收器

Runtime.gc();

3.安全:

提供了字节码验证

4.多线程:

语言级别,只需要一个方法开启/关闭线程。

2.java的基本语法

1.类的定义语法

[public]+class 类名{

//属性;方法;构造器;代码块;内部类;静态代码块.

}

2.JVM怎么找到需要运行的类:

环境变量值CLASSPATH找到我们所需要的类,classpath指定在哪,jvm就会去找哪并且加载相应的类。

每次改CLASPATH太麻烦,因此java提供了option 用-cp查找

-cp :指定当前java命令的时候【临时】指明类加载器去哪个位置【加载】我们的程序

3.书写程序时注意事项:
1.java程序和他所在文件之间的关系

一个java源文件中可以包含很多个Java程序但是只能有一个使用public修饰的程序

使用public 修饰的程序,必须保持文件名和类名相同

不加public修饰的程序,文件名和类名就可以不相同

public只能有一个类。

一个源文件中定义了多个类,如果都没有使用PUBLIC ,则文件和类名则没关系

2.java的类和main方法的关系,

main方法可以放在任意一个类中,不管这个类有没有使用public修饰。

如果一个类中没有主方法,但是要想执行则必须在main方法中调用。

3.java源程序中有三个顶级元素:

Class:定义类(必须出现)

package:定义包(可写可不写)

package是为了区分同名的类

//package注意事项:

1.只要出现必须放在程序第一行,要不就不要出现

2.可以出现好几个层级,代表具有层级关系的文件夹,并且使用 . 进行区分例如:com.briup.day2

3.package一旦出现,源码编译过后的class文件必须放在指定package所需要的结构下面,将来确定这个class文件时,

包名+类名作为当前的标识,进行区分!

4.使用 Javac -d path ##.java

编译源文件,默认不会生成包结构

1.如果程序中有package,自动根据package构建相应目录,将编译过后的class放在这个包结构中,将包+class放在指定的位置中.

-d相当于下列三行内容

mkdir -p com/briup/day2

mv person.class com/briup/day2

mv com .

-d的用法:

javac -d path ##.java

java -cp ## //##是程序名字

-cp 就是告诉你path的位置

package 包名;

package:区分同名的类

import:导入包 (可写可不写)

5.加载:

加载程序程序所需要的资源

加载我们需要执行的程序

6.import:

导包;可以出现也可以不出现

在自己的类中使用别人书写的类,如果使用的类不在Java.lang中,同时这个类和你书写的类也不在同一个包下面,这时必须要执行导包操作使用import.

注意:只有使用的类和现在你所在main放的类, 不在一个包中才可以使用import导入外来的包中的类;

import位于package 和class中

3.jar(压缩命令)

根据之前书写的类打一个jar包出来:

1.jar:class变成jar

jar -cvf hello.jar hello.class

1.打包(打包的内容是class)

jar -cvf 名字.jar

2.运行jar

Java -jar hello.jar

3.找到 meta-inf 最后一行添加Main-Class:空格+主程序所在类名

eg:Main-Class: hello

主清单权限

rt.java:就是runtime的缩写,表示运行时环境的意思。

4.执行程序

java -jar ##.jar

制作jar包过程:

vim ##.java 编译成##.class

制作jar包:

jar -cvf ##.jar ##.class

然后继续运行程序:

java -jar ##.jar

有package例外:

4.类加载

:从指定位置将所需要的程序连同需要进行的程序加载到CPU

1.类加载器负责加载类

启动类加载器:jre/lib/#.jar eg: rt.jar 就是启动类加载器加载的

扩展类加载器:jre/lib/ext/#.jar

应用类加载器(本地类加载器):

CLASSPATH指定的位置

-cp 和CLASSPATH 一样,只是对当前的命令【临时】加载去需要加载的内容

2.双亲委托(推卸责任)机制:

由本地类到扩展类再到启动类一层一层地推脱加载。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值