杰普04corejava02

一、上一节课复习

1、java三大技术体系:

  • Java SE
  • Java EE
  • Java ME

2.java语言的特点:

1)跨平台

​ 为什么能跨平台?

​ java程序运行在java虚拟机上,各系统对应着相应的虚拟机,虚拟机能把java源代码翻译成各系统的机器指令去执行,有了底层的虚拟机,java便可以跨平台了。

2)面向对象编程语言

java是第三代编程语言。

类:相同特征对象的集合,java中最小的单元。

对象:万物皆对象,可以是虚拟的,类的具体化,java中最小的存储单元

java编程:定义类及其属性行为,通过类的产生的对象相互作用达到想要的效果

3)不需要内存管理、指针管理

jvm自带垃圾回收器,垃圾回收器会自动回收系统中的垃圾

当对象不再被使用时就是垃圾,会被垃圾回收器回收

开发人员不能调用代码让垃圾回收,只能请求垃圾回收器回收(System.gc()😉

4)jdk、jvm、jre

jdk:java development kit java开发工具包/库

jre:java runtime environment java运行环境

jvm:java virtual machine java虚拟机

5)helloworld编写

源程序(.java)---编译-----》字节码文件(.class)

public class A{
	public static void main(String[] args){
		System.out.println("helloworld");
	}
}
6)字节码文件怎么被执行

字节码验证

  • 验证字节码文件的虚拟机版本是否兼容
  • 检查当前代码是否会破会系统完整性
  • 检查当前代码是否有栈溢出的情况
  • 检查当前代码的参数类型是否正确
  • 检查当前代码中的类型转换操作是否正确

字节码文件执行

​ 交由HotSpot虚拟机机制执行

​ 解释器:将字节码文件翻译成机器指令

​ 即时解释器(JIT):JIT热点侦测,将热点代码直接翻译成机器指令

​ pc寄存器:存储下一个即将要执行的指令

二、理解java

理解Java中的一些问题

1)写java代码为啥要先建一个类?

​ Java语言规定:在大多数情况下,java执行的代码需要写到方法中 ,而方法需要写到类中,类是java中组织代码的基本单元.

2)为什么要有main方法?

​ Java规定:main方法是程序执行的入口,方法的编写形式是固定的。

3)System.out.println("hello world");这句代码是什么意思?

​ System是Java SE-API(应用程序编程接口)提供的一个类。

​ out是System类下的一个属性。

​ println是out属性下的一个方法。

​ 通过调用System类下的out属性的println方法来打印出“hello world”这句话。

4)在A.java程序中为什么可以使用System类?

​ System类是java.lang包下的一个类,在java源码中已被编写(src.zip),并被编译成 .class 文件打包到rt.jar中,是启动类加载器加载的一个包,会被自动加载到jvm中,可以不用import直接使用。

5)系统如何找到A.java编译成的A.class字节码文件?

​ 通过环境变量中配置的CLASSPATH来找到 .class 文件的目录。

JAVA_HOME=/home/briup/jdk/jdk1.8.0_152
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.

export JAVA_HOME PATH CLASSPATH

​ 以上是 **Java环境变量在Linux中的配置内容 **,按照上边的环境变量配置, .class文件是生成在.java文件的同一级目录下 。

6) 如何看到类加载内容?

​ java -verbose A

7) 类名和文件名有啥关系?

​ java语言规定:每个 .java文件中只能有一个public类,而且public类的类名应该和文件名是一致的。

三、package java中包的引入

1.包的简介

​ package就是类的命名空间,用来区分相同类(唯一标识)。实质是一层一层的文件夹。

例:假如张三有一个类文件叫hello,李四也有一个类文件叫hello,那么他两的代码合并就会产生冲突,而如果给他两都加上包,(加上包,张三的hello文件在zhangsan的文件夹下,李四的文件在lisi的文件夹下)就能解决这个问题。

没有引入包是这样的(两个文件冲突,正常会被覆盖或文件被重命名图中为被覆盖情况):

引入包后是这样的:

2.包的命名规则

​ 一般情况,公司、组织、社团等,他们包的命名就是把官网域名倒过来(域名全球唯一 )。

如:com.briup.Demo

个人的可以是:com.name.Demo(name是你的名字)

3.类名区分

​ 简单类名:就直接一个类名,如:Hello

​ 全限定名:包名加类,如:com.xiaocheng.Hello

3.使用包的一些注意事项

  • 使用包的类,在编译后必须有和包名对应的文件夹,若文件夹没有存在,则运行时报错:找不到或无法加载主类

    ​ 自动创建包名对应的目录结构:

    ​ java -d . Hello (该命令中.表示在当前目录下创建对应目录)

  • 包和包之间用点( . )隔开

  • 类一旦指定了包,运行时一定要带上包名

  • 如果.class文件和.java文件不在同一个目录下,那么可以使用以下命令:

    java -cp 指定临时classpath变量

    如:java -cp ./bin com.briup.Hello

    四、 jar

    jar:将.class文件打包。

    例:假设A.class文件路径: ./bin/com/briup/day2/A.class 文件包名是com.briup.day2

    jar -cvf A.class -C bin 切换到bin目录下

    注:jar打包需要在jar包中的META-INF文件夹下MANIFEST.MF文件中添加该包主类,加入内容为 :Main-Class: com.briup.day2.A 需要注意加入内容格式,在:后有空格,内容皆为英文输入,若输入错误报错内容如下:

五、类加载

1.什么是类加载

​ 简单地说,类加载就是把类的数据从.class 文件以二进制的形式加载到内存中。

2.类加载器的种类有:
  • 启动类加载器

    ​ 加载路径:./jdk/jre/lib

  • 扩展类加载器

    ​ 加载路径:./jdk/jre/ext

    • 应用类加载器

    • 自定义加载器

posted @ 2021-03-14 21:23  愿半生代码如一生好友  阅读(34)  评论(0)    收藏  举报