java-day02-理解java

理解java


Linux

  1. vm虚拟机 :快照 :备份 (恢复到快照 : 还原系统)
  2. ssh服务
    • Linux安装 ssh服务器 ( sudo apt-get install openssh-server )
    • 使用xshell、ssh客户端

java

  1. 类是组织代码的基本单元,类是应用程序最小单位。

  2. 类可以放在同一个.java 文件中, 多个类编译时会生成多个.class字节码文件。

  3. main : jvm 自动调用该方法。

  4. 数组 :相当于一个容器

  5. java.lang 下所有类,默认导入

  6. 换行 : 11G

  7. -d : directory , 表示编译时自动生成和包名对应的目录结构.

    -cp : CLASSSPATH , 执行当前java命令的时候,临时指定classpath一次,只生效这一
    次。

  8. javac -d bin src/com/briup/day01/Hello.java : 指定bin路径作为.class字节码文件存放路径

  9. java -cp bin com.briup.day01.Hello : 指定bin路径下搜索字节码文件

  10. javac -d bin -cp bin src/com/briup/day02/Hi.java

    到bin目录中查找Hello.class字节码文件,将编译好的Hi.class存放到 bin目录下

  11. jar cvf hello.jar Hello.class :将字节码文件打包到hello.jar包

    • -c :建立一个压缩文件的参数指令(create 的意思);
    • -v :压缩的过程中显示文件 (view)
    • -f :使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数!(follow)

    jar cvf hello.jar -C bin . : 打包时不包含bin目录【注意 .

    java -jar hello.jar : 运行命令 ( jar包中,打包时不能包含bin目录)

  12. 可以依赖一个jar包中的字节码文件运行。

  13. “*****” : 代表任意的jar包

  14. jvm中通过类加载器实现将.class字节码文件加载到内存

    ​ 启动类加载器 爷 jre/lib/rt.jar 加载路径

    ​ 扩展类加载器 父 jre/lib/ext/*.jar 加载路径

    ​ 应用类加载器 子 $CLASSPATN 设置当前路径

    ​ Hi —> System String Date : boot

    ​ Hi —> ext/hello2.jar : ext

    ​ Hi —> Hello.class : app

    ​ 自定义类加载器

  15. 类加载顺序 : 双亲委托机制(向上请求,向下加载

  16. javap -verbose : 可以输出类加载的详细信息 ( javap -verbose Hello.class )

  17. javap : 反编译 (没有注释,很干净)

  18. System.java文件在src.zip中,编译好的System.class文件在rt.jar中。

    JVM在启动的时候,会自动读取rt.jar中所需要的class文件,当然也包括System.class文件。

  19. JVM是通过CLASSPATH环境变量配置的指定的路径,来查找Hello.class文件的。如果配置的路径不对,那么运行Hello的时候就会报错,告诉我们找不到这个类。


细节

  1. rt.jar中rt就是runtime的缩写,表示运行时环境的意思。

  2. 在程序中, package zhangsan; 对应的是一个名字叫zhangsan的文件夹

  3. package com.briup.demo; ,编译完之后,需要有对应的三个文件夹分别是com/briup/demo 。

  4. 类的名字有俩种:
    简单类名:就是直接一个类名,例如 Hello
    全限定名:包名加类,例如 com.briup.test.Hello

  5. 一个类一旦指定的包,那么在运行它的时候,就一定要带上它的包名

  6. -d表示编译时自动生成和包名对应的目录结构,-d后面的点(.)表示就在当前目录中生
    ( javac -d . Hello.java )

  7. java -cp ./bin com.briup.test.Hello

    -cp参数是-classpath的意思,表示执行当前java命令的时候,临时指定classpath一次,只生效这一次
    另外,./bin 路径中,可以把./去掉,直接写成bin,因为这样默认就可以表示当前路径下的bin目录

  8. jar命令,可以将一个或多个class文件,打包到一个指定的jar文件中(xxx.jar)

  9. 修改jar中的配置,指定了程序的入口类,JVM可以根据这个信息直接运行这个类,这就是一个可执行的jar包了。

  10. java.lang.ClassLoader ,它就表示JVM中的类加载器。

  11. 将之前编写的HelloWrold.java打成jar包并运行。

    vi HelloWorld.java

    javac -d (bin) HelloWorld.java

    jar cvf hello.jar com/briup/test/Hello.class

    修改配置,Main-Class: com.briup.test.Hello

    java -jar hello.jar

  12. 字节码验证的时候验证了什么?

    检查当前class文件的版本和JVM的版本是否兼容

    检查当前代码是会破坏系统的完整性

    检查当前代码是否有栈溢出的情况

    检查当前代码中的参数类型是否正确

    检查当前代码中的类型转换操作是否正确

  13. 双亲委派机制

    现在要加载Hello.class文件中的类
    首先加载任务就交给了AppClassLoader
    然后AppClassLoader把这个任务委托给自己的父加载器,也就是ExtClassLoader
    然后ExtClassLoader把这个任务委托给自己的父加载器,也就是bootstrapClassLoader
    然后bootstrapClassLoader就尝试去加载Hello这个类,但是在指定路径下并没有找到
    然后任务又交回给了ExtClassLoader,ExtClassLoader尝试加载Hello这个类,但是在指定路径中没找到然后任务又交回给了AppClassLoader
    最后AppClassLoader从CLASSPATH中指定的路径里面找到并加载了这个Hello类,完成类加载的过程

  14. 操作系统中包概念 —> 目录形式中文件夹体现


查漏补缺

  1. -d : 存储文件的路径

    -cp : 搜索的路径


加餐

  1. 其中,前面的CA FE BA BE表示当前class是java语言编译而成,这叫魔数,java代码编译成的class文件中,最前面一定是这个值。
    其中,00 00 00 34,这个表示当前class文件是那个版本JDK编译出来的。16进制的34 等于 10进制的52 ,52代表的JDK1.8版本,51就是JDK1.7,依次类推

理解

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ERGB137I-1629103609368)(C:\Users\asus\Desktop\老师笔记\图\双亲委托机制.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AmN8MyQs-1629103609375)(C:\Users\asus\Desktop\我的笔记\思维导图-脑图-总结\理解java.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值