一、如何快速学习
- 需要
- 框架
- 细节
二、JDK JRE 是什么(区别)?
JDK
JDk(开发人员使用)= JRE + 开发工具集(eg:Javac,Java 编译工具)
JRE
JRE(仅使用)= JVM + JavaSE 标准类库
编译器 != JVM
三、运行机制
执行流程
.java(源文件) ---编译 javac ---> .class(字节码文件) -----运行 Java -----> 结果
注
:使用Java命令行运行时,注意不写 .class.class 装载到 JVM 机上执行
class 类
四、注意事项
-
pubilc 只能有一个,其他任意数量
-
编译后,每一个类都对应一个 .class
-
文件名与 public 的类名一致,否则编译失败
五、注释
-
文档注释
/** * @author mu * @version 1.0 * ..... */
javadoc -d D:\\\temp(生成的文档的位置)-author -version xxxxx.java
六、规范
-
Tab: 整体后移
-
shift + Tab: 整体前移
-
源文件应为 utf-8 (实际开发中)
七、DOS的基本原理
-
DOS 磁盘操作系统
-
md 创建新目录 rd 删除目录
-
dir 查看当前目录
-
cd 切换为其他盘符 change directory
-
cd /D :c 切换到c盘 /D 为改变驱动器(盘)的当前目录或者当前驱动器
-
-
tree d:
-
cls 清屏
-
exit 退出
-
echo 输入内容到文件
-
move 剪切
八、相对路径绝对路径
-
..\ 父目录(相对路径)..
-
.\ 当前目录 .
-
\ 根目录
九、变量
类型+名称+值
变量表示存储区域
int 4 字节
double 8 字节
运算从左至右:
System.out.println( 100 + 300 + "hello"); //400hello
System.out.println("hello" + 100 + 300); //hello100300
System.out.println(' a ' + 100 ); // 97 + 100
十、数据类型
-
基本数据类型
-
数值型
-
整数类型 :
byte short int(整数默认为int) long(L/l) 1(8bit) 2(16bit) 4(32bit) 8( 64bit) eg:4 -- 占 4 个字节,int 类型
-
-
-
浮点型:
float(F/f) double(默认) 4 8 -
浮点类型 = 符号 + 指数 + 尾数
浮点(陷阱)比较相等时,应使用 if ( math.abs (num1 - num2) < 0.00001 ) "相等" ;
-
字符型 char 2字节
-
使用的是 unicode 码兼容了 Ascall 码,中文英文都是二字节,utf-8 的英文一个字节,中文三个字节
-
GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1。
-
-
-
可以直接 char = 77
-
(此时77不是 int 类型,优先级:先看是否为 Ascll 内的数)
-
(Ascll 码占一个字节,but 只有 128 个字符);
-
char = ‘ \t ’; // 制表位 (转义字符)
-
chart 可以保存 int 的常量值,但是不能保存 int 的变量值。
-
-
‘ ’ 单引号 ----字符
-
” “ 双引号== 字符串 sout(name + "\t");
-
char 的本质时一个整数,在输出时,是Unicode码所对应的字符
-
-
-
布尔型 bool 1 java 只能用 false true 表示 bool 类型 c语言可以用 0 1
基本数据类型转换细节
-
小加大,统一为大 特殊:byte + short = int ;byte + byte = int ; (byte chart short)三者计算时,先转换为int类型。
-
byte b1 = 10; //对 ,优先级 1. 先判断是否在范围内。 2. 若不在,再观察是否类型不匹配
-
b1 = b1 + 10;// 错 byte int 数值看范围,变量看类型
> b1 = (byte)(b1 + 10); // 对
-
int a = 10; byte b2 = a; // 错 如果是变量赋值,要判断类型
-
-
{byte,short} 不与 chart 自动转换
-
bool 不参与转换
-
int n = 1L; //错误
long n2 = 1L;//对
小转大 强转
(int)4.2 * 3.3 = 4 * 3.3 强转符号只对最近的操作数有效。
大专小 隐式转换(不用显示的写)
基本数据类型和 String 类型的转换
-
-
引用数据类型
-
类(class):string
-
接口(interface)
-
数组
-
十一、Java文档
十二、原码 反码 补码
-
最高位 1 -> + 0 -> -
-
整数三码合一
-
负数的反码 = 原码的符号位不变,其它按位取反
-
负数的补码 = 它的反码 + 1(补码把正负数统一起来)
-
0 的反码、补码都是 0
-
Java 没有无符号数
-
计算机运算,使用补码的方式来运算
-
查看结果,在转换回原码
十三、位运算
七个位运算符
算数右移 >> :
-
2 >> 2 0000 0010 ---- 0000 0000 2/2/2
-
-2 >> 2 1000 0010 ---- 1. 补码 1111 1110 2. 右移 1111 1111 3.运算后的原码 1000 0001
-2/2/2 = -1(0) 负数溢出为 -1 正数溢出为 0
1111 1101 (补码) 1111 1100 1000 0011
十四、逻辑运算符
&& 短路与 & 逻辑与
|| 短路或 |逻辑或
!逻辑非 ^ 逻辑异或
十五、类、属性与对象
-
属性 = 成员变量 = 字段 (三种叫法)
-
访问修饰符 属性类型(基本类型、引用类型) 属性名
-
四种访问修饰符: public protected 默认 private(后面详解)
-
-
数组、对象的参数传递是引用传递(本质是地址在传递,共用一个地址),而值传递,地址
-
数组、对象指向堆
-
字符串String = 对象,也是引用类型
-
内存分配机制
-
栈:一般存放基本数据类型(局部变量)
-
堆:存放对象、数组
-
方法区:常量池(常量:字符串等),类加载信息
-
示意图:
-
十六、成员方法
-
定义:
-
访问修饰符 返回数据类型 方法名 (形参列表...){
语句
return 返回值;
}
-
-
方法不能嵌套定义,可以嵌套使用
-
跨类调用方法时,对跨的那个类创建新对象,才能调用其方法
-
执行方法时,开栈
十七、重载(Overload)、可变参数(Variable paramaters)
-
重载优化为可变参数,
-
可变参数放在最后,
-
一个形参列表只能出现一个可变参数。
public int sum(String name, int ... nums){//nums.length nums相当于一个数组 • int result = 0; for(int i = 0; i < nums.length; i++){ result += nums[i]; } }
十八、作用域(scope)
-
全局变量 = 属性
-
全局变量可以不赋值,会有默认值。局部变量必须赋值
-
全局变量和局部变量可以重名,就近原则
-
属性生命周期长,随着对象的创建销毁而创建销毁
-
局部变量的生命周期短,随着方法的调用的创建销毁而创建销毁
-
全局变量可以加修饰符,局部变量不能加修饰符
十九、构造器(constructer)
-
访问修饰符 方法名 (形参列表...){
方法体;
}
-
构造器无返回值
-
方法名和类名必须一样
-
创建对象时,系统会自动调用该类的构造器并完成对对象的属性初始化
-
作用:完成对新对象的初始化
-
Person p1 = new Person("muzi", 90);//直接通过构造器来指定名字和年龄
-
构造器也可以重载
-
构造器时一种特殊的方法
-
若程序员不定义构造器,系统会自动生成一个默认的无参构造器(如果自定义了一个构造器,默认的无参构造器失效,需要手动写一个无参构造器,才能使用。)
二十、对象创建流程
-
加载类的信息,只会加载一次
-
在堆中分配空间(地址)
-
完成对象初始化
3.1 默认初始化
3.2 显式初始化
3.3 构造器的初始化
-
对象在堆中的地址,返回给p(p 是对象名,也可以理解成是对象的引用)
二十一、this
-
public Dog(String name){ //this.name 就是当前对象的属性name • this.name = name; }
-
那个对象调用,this就代表哪个对象
-
-
细节:
-
访问属性:this 用于区分当前类的属性和局部变量
-
this不仅可以用来访问本类的属性,还可以访问其方法、构造器
-
访问方法:this.方法名(参数列表)继承会详细讲
-
访问构造器:this(参数列表);
注:只能在构造器中的第一条语句访问另一个构造器
-
this 只能在类里使用