欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

复习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环境变量

  1. JAVA_HOME:C:\Program Files\Java\jdk1.8.0_74(自己安装的jdk的路径)
  2. CLASSPATH:.(Java中类的路径,.表示当前路径)
  3. path:%JAVA_HOME%\bin;(bin目录的路径)

在Linux系统下如何写Java代码并运行

  1. 创建一个Java文件
    首先目录结构是:~/corejava/chap01目录下有两个子目录bin和src,我在src下创建了一个MyTest.java文件
    复习Java第一天

  2. 编写代码
    复习Java第一天

  3. 编译
    复习Java第一天
    注:-d bin是指定编译之后的.class文件放在bin目录下

  4. 运行

复习Java第一天
我能直接java运行是因为我在/etc/profile文件里配置了CLASSPATH=.:bin/
ps:我在测试的时候,把整个CLASSPATH给删了,但也可以直接用java运行,不知道什么原因
复习Java第一天
如果环境变量中配置的是CLASSPATH=. ,那么运行需要使用-cp bin指定在bin目录下
复习Java第一天

类加载过程

  1. 加载:查找并加载类的字节码文件(.class),置于内存的方法区中,在堆区创建一个java.lang.Class对象,用来封装在方法区的数据结构
  2. 连接
    a.验证
    代码和jvm规范是否一致
    不能破坏系统的完整性
    没有堆栈的上溢和下溢
    参数类型是否正确
    类型转换是否正确
    b.准备
    为类的静态变量分配内存,初始化为默认值
    c.解析
    把类中的符号引用转换为直接引用
  3. 初始化:将一个类中所有被static关键字标识的代码统一执行一遍,如果执行的是静态变量,那么就会使用用户指定的值覆盖之前在准备阶段设置的初始值;如果执行的是static代码块,那么在初始化阶段,JVM就会执行static代码块中定义的所有操作。
  4. 使用
  5. 卸载

变量

一、Java中变量命名规则

  1. 以字母、下划线、$开头,后跟字母、数字、下划线、$的组合。但不能是Java中的关键字
  2. 大小写敏感
  3. 没有长度限制
  4. 最好见名知意

二、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。其他的没有。

高精度的向低精度的进行转换,必须强转,否则编译报错

几个基本的问题

  1. 除了构造方法,方法名可以和类名相同吗?
    可以,无所谓
  2. main方法可以有多个吗?
    可以,main方法虽然是程序的入口,但也是一个方法,所以可以重载
  3. 一个类中可以有多个public修饰的class吗?
    可以的,你得记住有内部类这种东西
  4. 接口可以继承多个接口吗?
    可以,虽然不太清楚为什么