复习Java第一天
程序员文章站
2022-03-06 08:21:35
...
前言
经过一轮学习之后,已经对Java有了一定的了解。但是,学完框架,学完前端除框架的东西之后,发现对于Java,已经有些模糊了。作为大三的我,马上要实习的我,深深的觉得复习是很有必要的。好了,不说废话了,开始吧。
JDK和JRE
- JDK:Java Development Kit,Java开发工具包。主要包括了Java的一些工具(bin目录下)和各种类库(lib目录下)。除了这些,JDK里面还包含了JRE。
- JRE:Java Runtime Environment,Java运行环境。包含了java虚拟机,java基础类库。
注:JDK是可以用与开发的,因为他的bin目录下有很多工具。像javac、java、jconsole等。而JRE不能进行开发,他只能运行java程序
Java环境变量
- JAVA_HOME:C:\Program Files\Java\jdk1.8.0_74(自己安装的jdk的路径)
- CLASSPATH:.(Java中类的路径,.表示当前路径)
- path:%JAVA_HOME%\bin;(bin目录的路径)
在Linux系统下如何写Java代码并运行
-
创建一个Java文件
首先目录结构是:~/corejava/chap01目录下有两个子目录bin和src,我在src下创建了一个MyTest.java文件 -
编写代码
-
编译
注:-d bin是指定编译之后的.class文件放在bin目录下 -
运行
我能直接java运行是因为我在/etc/profile文件里配置了CLASSPATH=.:bin/
ps:我在测试的时候,把整个CLASSPATH给删了,但也可以直接用java运行,不知道什么原因
如果环境变量中配置的是CLASSPATH=. ,那么运行需要使用-cp bin指定在bin目录下
类加载过程
- 加载:查找并加载类的字节码文件(.class),置于内存的方法区中,在堆区创建一个java.lang.Class对象,用来封装在方法区的数据结构
-
连接:
a.验证
代码和jvm规范是否一致
不能破坏系统的完整性
没有堆栈的上溢和下溢
参数类型是否正确
类型转换是否正确
b.准备
为类的静态变量分配内存,初始化为默认值
c.解析
把类中的符号引用转换为直接引用 - 初始化:将一个类中所有被static关键字标识的代码统一执行一遍,如果执行的是静态变量,那么就会使用用户指定的值覆盖之前在准备阶段设置的初始值;如果执行的是static代码块,那么在初始化阶段,JVM就会执行static代码块中定义的所有操作。
- 使用
- 卸载
变量
一、Java中变量命名规则
- 以字母、下划线、$开头,后跟字母、数字、下划线、$的组合。但不能是Java中的关键字
- 大小写敏感
- 没有长度限制
- 最好见名知意
二、Java中的数据类型
-
基本数据类型
取值范围,举个栗子 -
引用数据类型
类类型
接口类型
数组类型
三、变量的分类及生命周期
-
成员变量:在类中声明,作用域是整个类,有默认值。创建实例时被创建,main方法执行完后被销毁。实例变量,类变量(静态变量)都是成员变量
-
局部变量:在方法中声明,作用域是{}方法内,没有默认值。被调用时创建,调用完后被销毁
注: 非静态方法可以访问静态变量/方法 和 实例变量/方法;静态方法只能访问静态变量/方法,不能直接访问实例变量/方法,要访问的话得通过实例。
类型转换的问题
byte b = 1;
b += 1; //正常
b = b+1; //编译报错
我的理解是:
- b+=1时,jvm明确知道是b自己+1,而且+1之后不会发生溢出
- b=b+1时,jvm不知道b的值是多少,所以不确定它+1之后会不会溢出,就直接编译不通过。比如b=127+1;也会编译报错
- 但神奇的是,b+=127也不会报错,溢出就溢出吧,结果等于-128。那么举一反三,b+=128的结果是多少?首先byte能表示的范围是-128~127,所以它溢出了,那么就会等与-128+1。结果是-127。与byte有相同特性的还有short、char。其他的没有。
高精度的向低精度的进行转换,必须强转,否则编译报错
几个基本的问题
- 除了构造方法,方法名可以和类名相同吗?
可以,无所谓 - main方法可以有多个吗?
可以,main方法虽然是程序的入口,但也是一个方法,所以可以重载 - 一个类中可以有多个public修饰的class吗?
可以的,你得记住有内部类这种东西 - 接口可以继承多个接口吗?
可以,虽然不太清楚为什么
上一篇: Java第一天总结