复习Java第一天

前言

经过一轮学习之后,已经对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. 编写代码
    在这里插入图片描述

  3. 编译
    在这里插入图片描述
    注:-d bin是指定编译之后的.class文件放在bin目录下

  4. 运行

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

类加载过程

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

变量

一、Java中变量命名规则

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

二、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. 接口可以继承多个接口吗?
    可以,虽然不太清楚为什么
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值