1.Java安装、配置、编写、理解

第一章【安装、配置、编写、理解】

一、JDK

1、相关名词

SDK:软件开发包

JDK:java程序开发工具包

JRE:java程序运行环境

API:应用程序编程接口

API Documentation:API说明文档

2、jdk安装

3、oracle官方文档中提供的JDK结构图:

image-20210111140532340

4、JDK目录

image-20210111140646901

sun公司程序员--编写基础的代码-->*.java --压缩-- >src.zip --编译--> *.class --归档-->rt.jar

二、面向对象

1、OOP理念

面向对象编程(Object-Oriented Programming,OOP)

面向对象的特征:抽象、封装、继承、多态。

  • 封装是一种对象功能内聚的表现形式,使模块之间耦合度变低,更具有维护性;
  • 继承使子类能够继承父类,获得父类的部分属性和行为,使模块更有复用性;
  • 多态使模块在复用性基础上更加有扩展性,使运行期更有想象空间
  • 抽象是面向对象思想最基础的能力之一,正确而严谨的业务抽象和建模分析能力是后续的封装、继承、多态的基础,是软件大厦的基石。

Java 之父 Gosling 设计的 Object 类,是任何类的默认父类,是对万事万物的抽象。

三、JVM

image-20210111141309832

四、垃圾回收器

java代码中,开辟要使用的内存空间,使用new关键字即可完成,使用完之后,对内存的释放,在JVM中,由垃圾回收器(Garbage Collection,GC)来完成。

五、字节码验证

一个class文件被加载到JVM内存之后,首先要经过字节码验证,主要包含:

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

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

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

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

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

六、编写Java程序

1、书写Java文件的过程

vim Hello.java

2、程序中出现主方法

3、将Java文件编译成class文件

javac Hello.java

4、执行程序

java Hello

参数:

​ -cp:在【本次命令】中【临时指定】类加载器去哪个位置加载我们需要执行的程序

java -cp src Hello

​ -verbose:将JVM启动运行的时候加载的信息输出出来

java -verbose Hello java -verbose Hello > a.txt

​ -d:指定放置生成的类文件的位置

javac -d bin Hello.java

【注意】在书写Java文件的时候的注意事项

1、源文件后缀名必须为.java

2、一个java源文件中可以包含很多个Java类,但是有且只有一个使用public修饰的类,并且使用public修饰的类的类名和源文件名保持一致。

3、一个类要想执行,需要在这个类中出现主函数,否则只能通过调用的方式执行main方法,与类是否使用public没有任何关系,只要想运行就添加public。

七、package

​ 1、定义包结构,将编译过后的class文件需要放在指定的包结构下面

​ 2、Java中定义的包结构实际上在计算机上是以文件夹的形式存在

​ 3、package定义是可添也可不添。包名.类名

​ 4、如果要添加包结构必须放在所有程序的第一行

​ 5、包结构允许出现多层,使用.分割

package com.briup.day2; public class Hello{}

​ 类的全限定名:

com.briup.day2.Hello

​ 6、自动生成包结构

javac -d . Dog.java

​ 7、其他路径下执行程序

java -cp src com.sxu.day2.Dog

​ 8、在src下创建bin目录,将编辑运行的class文件放在bin里面

八、jar

​ 1、使用jar命令将字节码文件压缩成.jar

jar -cvf 打包名.jar *.class

jar -cvf Hello.jar Hello.class

jar -cvf Dog.jar com/sxu/day2/Dog.class

jar -cvf hello.jar -C bin .

​ 2、 修改打包的jar包里面的文件META-INF的MANINFEST.MF,添加以下main方法所在的类

Main-Class: Hello 【注意:冒号后面有空格】

`Main-Class: com.sxu.day2.Dog`

​ 或者vim Hello.jar 点进去MANINFEST.MF,添加 Main-Class: Hello

​ 保存重新压缩,此时jar可用

3、执行压缩文件

java -jar Hello.jar

java -jar Dog.jar

完整版

  1. 在java文件下创建src、bin目录

    mkdir src bin

  2. 进入src文件夹,编写Hello.java文件

    vim Hello.java

    编写代码,包含package

      1 package com.sxu.day2;
      2 
      3 public class Hello{
      4     public static void main(String[] args){
      5         System.out.println("hello world!");
      6     }
      7 }
    
  3. 然后将Hello.java文件编译成Hello.class文件并保存在bin目录下

    javac -d ../bin Hello.java

  4. 返回上级目录,运行程序

    cd ..

    java -cp bin com.sxu.day2.Hello

  5. 把当前目录下的bin文件夹里面的所有文件打到jar包中,但是【不包含】bin目录本身

    jar -cvf hello.jar -C bin .

  6. 此时jar是一个普通的jar,不能直接java -jar的方式进行运行

    【直接运行报错:hello.jar中没有主清单属性】

    原因是因为没有在jar中指定哪一个类中有程序的入口,需要修改jar中的配置

    方式一

    image-20210111162213275 image-20210111162338827 image-20210111162544672

    保存,然后更新压缩包

    image-20210111162634643

    方式二:

    vim hello.jar

    image-20210111170636408

    光标移动到MANINFEST.MF位置,回车,然后i输入,ESC-->:wq!,再次:q退出

    image-20210111170907117

  7. 执行hello.jar包

    java -jar hello.jar

九、import

1、一个类去引入其他类

若要引用的类在同包或java.lang包下面,那么类是可以直接使用;

若要使用的类不在同包也不再java.lang包下面,那么需要import导包。

例子1:同包

vim src/Stu.java 【含主方法,调用Tea】

vim src/Tea.java

javac -d bin src/Tea.java

javac -cp bin -d bin src/Stu.java

java -cp bin com.sxu.day3.Stu

例子2:不同包

vim src/Doc.java

package com.sxu.day3.test;

import com.sxu.day3.test.Doc;

直接将src下所有的java文件编译

javac -d bin src/*.java

十、类加载

  • 启动类加载器 bootstrapClassLoader,非java语言实现 jre/lib/rt.jar
  • 扩展类加载器 ExtClassLoader,java语言实现,是ClassLoader类型的对象 jre/lib/ext/xxx.jar
  • 应用类加载器 AppClassLoader,java语言实现,是ClassLoader类型的对象 CLASSPATH指定

十一、双亲委托机制

例子:现在要加载Hello.class文件中的类

  • 首先加载任务就交给了AppClassLoader

  • 然后AppClassLoader把这个任务委托给自己的父加载器,也就是ExtClassLoader

  • 然后ExtClassLoader把这个任务委托给自己的父加载器,也就是bootstrapClassLoader

  • 然后bootstrapClassLoader就尝试去加载Hello这个类,但是在指定路径下并没有找到

  • 然后任务又交回给了ExtClassLoader,ExtClassLoader尝试加载Hello这个类,但是在指定路径中没找到

  • 然后任务又交回给了AppClassLoader

  • 最后AppClassLoader从CLASSPATH中指定的路径里面找到并加载了这个Hello类,完成类加载的过程

把hello.jar移到/opt/jdk1.8.0_171/jre/lib/ext/

sudo mv hello.jar /opt/jdk1.8.0_171/jre/lib/ext/

在任意路径都可以执行Hello这个类

java com.sxu.day2.Hello

posted @ 2024-04-14 22:43  可乐爱兑姜汁  阅读(6)  评论(0编辑  收藏  举报