1.初时java
JDK、JRE、JVM三者之间的关系
- JDK:java开发工具包,包含JRE、javac、Jconsole、Jstack
- JRE:java运行时环境,包含JVM、java基础类库
- JVM:java虚拟机,运行java代码
2.数据类型与变量
基本数据类型分为四类、八种:
四类:整型、浮点型、字符型、布尔型
八种:
- int占4个字节,long占8个字节
- 整型默认是int,浮点型默认是double
- 8个二进制(bit)为一个字节(byte),1kb=1024byte
- 在给int设置初始值的时候,值的大小不能超过int的表示范围,否则会溢出
- 长整型要在数字后面加个L或者l
- short占2个字节
- byte占1个字节,范围是-128~127
- double占8个字节,是一个近似值,有精度误差
-
对于 short, byte 这种比 4 个字节小的类型 , 会先提升成 4 个字节的 int , 再运算
3.运算符
短路求值
&& 和 || 都遵循短路求值原则。
&& 和 || 与& | 的区别在于,是否满足短路求值原则,即有一部分不满足以后,后面就不执行了。
位运算符
& 都为1才是1
| 有一个为1就是1
~ 0为1,1为0
^ 相同为0,相异为1
<< 最左侧不要了,最右侧补0
>>最右侧不要了,最左侧补符号位,正0负1
>>>最右侧不要了,最左侧补0
- 左移一位 = 原数字 * 2
- 右移一位 = 原数字 / 2
- 位移效率高于乘除
4.程序逻辑控制
输出到控制台
从键盘输入
使用Scanner读取字符串、整数、浮点数
String input = sc.nextLine(); 获取输入的字符串
String input = sc.nextInt(); 获取输入的整数
String input = sc.nextFloat(); 获取输入的浮点数
sc.close();
使用循环来读取
while( sc.hasNextInt( ) ){
int temp = sc.nextInt();
}
sc.close();
6.数组的定义和使用
数组是引用类型,会占据一部分内存。
JVM对内存按照功能进行了不同的划分:
堆(Heap):JVM最大的内存区域,new出来的对象都在堆上。
方法区(Method Area):存储类信息、常量、静态变量,方法编译出的字节码就存在这个区域。
虚拟机栈(JVM Stack):每个方法执行时,都会创建一个栈帧,内部包括局部变量表、操作数表栈、动态链接、返回地址等信息,方法结束即销毁。
本地方法栈(Native Method Stack):与虚拟机栈类似,只不过保存的Native方法的局部变量。
程序计数器(PC Register):保存下一条执行指令的地址。
数组拷贝
Arrays.copyOf ( 原数组,新数组长度 );
Arrays.copyOfRange(原数组,开始下标,结束下标);
7.类和对象
为什么局部变量需要初始化,但是成员变量不用呢?
因为在new关键字背后发生了如下过程:
一般成员变量设置为private,成员方法设置为public
private:同一包中的同一类
public:都可以用
static修饰成员变量
static修饰的成员变量成为静态成员变量,不属于某个具体的类,是所有对象共有的。
static修饰成员方法
static成员变量初始化
代码块概念以及分类
- 普通代码块:定义在方法中的代码块(少用)
- 构造块 :定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量。
- 静态块:使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。
- 同步代码块(后续讲解多线程部分再谈)
内部类
public class OutClass {
// 成员位置定义:未被static修饰 --->实例内部类
public class InnerClass1{
}
// 成员位置定义:被static修饰 ---> 静态内部类
static class InnerClass2{
}
public void method(){
// 方法中也可以定义内部类 ---> 局部内部类:几乎不用
class InnerClass5{
}
}
}