目录标题
Java特性
- Java属于静态强类型解释型语言,具有多线程、跨平台、面向对象、自动垃圾回收
- 静态类型:创建变量是需要指定数据类型
- 动态类型:创建变量时不需要指定类型,类型在运行之后赋值时确定
- 强类型:数据类型一旦确定,如果想要修改必须强制类型转换
- 弱类型:会根据程序上下文环境自动修改数据类型
- 编译型:一次编译多次运行,运行效率高,跨平台性能较差
- 解释型:每次运行都需要进行解释,运行效率相对较低,跨平台性能较好
Java运行机制
程序员编写的*.java文件(java源文件)*=>使用javac编译 => 编译生成.class文件(字节码文件)=> **使用java解释执行 =>(特定平台的机器码)
java的注释:
- // 单行注释
- /* */ 多行注释
- /** 带信息 */ (可设置模板)
命名
文件名、文件夹名、类名、变量名等的自定义命名
- 规则;
- 只允许大小写字母,$,数字,_,且数字不能开头,不能使用关键字和保留字(关键字:Java中有特殊含义的单词,保留字:目前版本还未使用但后序版本可能会使用)
- 规范:
- 见名知义
- 驼峰命名
程序入口
public class Text {
public static void main(String[] args) {
System.out.println("hello world");
}
}
位(bit)、字节(byte)、字(word)
1字=2字节,1字节=8位,1字=16位
- byte = 8bit (-27 ~27 -1);-128~127 字节
- short = 16bit (-215 ~215 -1); 短整型
- int = 32bit (-2147483648~2147483647);(-231 ~231 -1) 整型
- long = 64bit (-263 ~263 -1); 长整型
- 1-4总结:都是用于表示整数,取值范围不同
正数存储:按二进制正常存储
负数存储:按二进制补码存储(补码等于反码加一(反码:除去符号位全部取反))
数据类型
- 基本数据类型:
- 整型:
- byte 8bit 字节
- short 16bit 短整型
- int 32bit 整型
- long 63bit 长整型
- 浮点型: (浮点型采用科学计数法进行存储)
- float (单精度浮点型) 后边加f/F,不可省略
- double (双精度浮点型) 后边加d/D,可省略
- 布尔型:
- boolean:(true、flase)
- 字符型:
- char 16bit eg: char c1 = ‘单个字符’; (注意:为单引号)
- 整型:
- 引用数据类型
- 类
- 数组
- 接口
类型转换
- **Boolean不能参与转换 **(
参与的
:byte、short 、int、long、float、double、char) - 低精度到高精度可以自动转换
- 高精度到低精度需要强制类型转换
- float采用科学计数法进行存储,float的32位存储量远大于long的64位(自动转换)
- 自动转换总结:
- byte=>short =>int=>long=>float=>double
- char =>int=>long=>float=>double
- 强制类型转换:高精度到低精度,(类型)变量名 (注意:有可能损失精度,导致数据不正确(可能会是负数,因为高位截取的原因最高位是1的话,负数存储最高位为符号位))
- char没有负数,正数转换char会忽略负数,把负数当正数转化然后对照ASCLL码
混合运算(Boolean不能参与运算)
- 当多类型混合运算时,结果为参与运算的最大类型
- 当混合运算类型只出现了byte、short、int、char四种的一种或多种时,结果一定是int (eg: byte+byte=int)
变量
- 字面量占用临时空间存储,数字默认是int,不能复用,只能临时使用一次,找不到路径所以不能修改
- 常量final修饰,值不能更改,但是可以复用
- 变量可以修改,可以复用
- 变量的声明:
- 数据类型 变量名 = 值;
- 数据类型 变量名,变量名……;
- 数据类型:变量名 =值,变量名=值……;
- 变量的分类:(java中没有全局变量)
- 局部变量:方法中的变量,(参数列表也是)
- 静态变量:在类体中使用static修饰的变量
- 成员变量:在类体中不使用static修饰的变量
- 变量的调用:
- 先声明后使用
- 局部变量只在方法中生效
- 静态变量:类名.变量名;(需要考虑权限修饰符)
- 变量作用域
- {}
- 变量声明不赋值的默认值
- 局部变量不赋值不能使用,没有默认值
- 静态变量和成员变量:有默认值
- int:0
- double:0.0
- Boolean:false
- char:\u0000
- 引用类型默认值为:null
- 变量优先级
- 局部变量可以和静态变量同名(使用(类名.)区分同名的局部变量和静态变量)
- 静态变量不可以和成员变量同名
- 使用this区分局部变量和成员变量
运算符
- 算数运算符:+、-、*、/、%、 ++、 –
- 关系运算符:>、<、>=、<=、!=("=="在比较基本数据类型是比较的是值,比较引用数据类型时比较的时地址)
- 逻辑运算符:
- &、|、! (与或非)
- &&、||和&、|区别:
- &(两边同为真则为真,第一个为假就已经为假,但第二个会执行)、|(同理),&&、||判断出来之后不会执行第二个
- 异或:^ (相异为1,相同为0)
- ‘>>’(带符号右移(正数补零,负数补一))、>>>(不带符号右移(均补0,负数可能变为正数))、<<(左移(非符号位左移,右边补0)) 【均是二进制移动】
- 赋值运算符:
- +=
- 计算过程中自动进行强制类型转换
- 赋值运算 属于右结合 同优先级从右到左计算
- +=
- 三目运算符:
xxx?yyy:zzz
xxx
需要判断的语句 (布尔型)yyy
判断为真时执行的语句zzz
判断为假时执行的语句
字符串
- “”(双引号包裹)
- \ (转义)
- 拼接:+
流程控制、分支结构
- if(){}
- if(){}else{}
- if(){}else if(){}……
- switch(key){ case value1:语句;break;case value2:语句;break;default: 语句;break;} key:int/string型
- 没有break可进行case穿透
循环(三要素:初始值、终止条件、步长)
- for(){} 计数循环
- while(){} 真假循环
- do{}while()
- break:
- 结束循环 (可给外层循环起名来结束外层循环)
- continue:
- 结束本次循环
方法
- 封装特定功能的代码
- 方法的特点:
- 方法的声明;
- 修饰符列表 返回值类型 方法名 (参数列表){方法体}
- 修饰符列表:可以有可以没有,可以有多个,有些不能同时出现
- 返回值类型:运行结果反馈给调用处,11种数据类型的任意一种,不需要就返回void,如果指定返回值,则方法种必须有(return 指定类型)
方法分类
- 静态方法:static修饰的方法
- 成员方法:无static修饰的方法
- 构造方法:
方法调用
- 静态方法:类名.方法名(参数)
- 成员方法:对象.方法名(参数)
方法的重载
- 方法名相同,参数列表不同
- 个数不同
- 类型不同
内存分析
- 静态区/方法区:保存静态资源文件,如变量、方法运行时class文件等
- VM栈:以栈内存结构为模型,创建一块空间,主要用于执行方法(先进后出)
- 堆内存:保存类对象和成员变量及成员方法
递归(死循环会导致栈内存溢出)
- 递归就是自己调用自己(递归和迭代(循环)是等价的,递归消耗内存,效率低)
- 树状结构(如目录遍历)都需要递归完成
- 直接递归:方法自己调用自己
- 间接递归:两个方法相互调用