HelloWorld
-
后缀名 .java
-
编写代码
public class HelloWorld{ public static void main(String[] args){ System.out.println("HelloWorld!"); } }
-
编译javac java文件 生成class文件
-
运行class文件 java class文件 (没有后缀名)
JAVA程序运行机制
-
编译型
-
解释型
-
.java文件 -> java编译器 ->.class文件 -> 类加载器 -> 字节码校验器 -> 解释器 -> 操作平台
注释
//单行注释
/*
多行注释
*/
/**
文档注释
*/
标识符和关键字
数据类型
强类型语言
-
基本类型
-
数值类型
-
整数类型
-
byte 1字节
-
short 2字节
-
int 4字节
-
long 8字节 数字后面加L
-
-
浮点类型
- float 4字节 数字后面加F
- double 8字节
-
字符类型 char 2字节
-
-
boolean类型 true和false 1位
-
-
引用类型
- 类 String类…
- 接口
- 数组
-
什么是字节?
- 位(bit):内部数据最小存储单位
- 字节(byte): 数据处理 基本单位 B
- 1B = 8bit
- 字符: 字母、数字、字、符号
数据类型扩展问题
-
整数扩展 (进制)
- 二进制 0b
- 八进制 0
- 十六进制 0x
-
浮点数数据类型不相等
- 有限 离散 舍入误差 大约 接近不是等于
- 最好避免使用浮点数进行比较
-
字符扩展
-
所有的字符本质都是数字 Unicode编码 2字节
-
new String对象的地址不同 比较不相同
String a = new String("Hello"); String b = new String("Hello"); a != b String c = "Hello"; String d = "Hello"; c == d
-
-
布尔值扩展
boolean flag = true; if (flag){} //Less is more
类型转换
java是强类型语言,有些运算需要进行类型转换
低--------------------------------------------------------->高
byte,short,char,int,long,float,double
- 强制类型转换:高到低 (有内存溢出情况)
- 自由类型转换:低到高
- 注意
注意:
-
布尔值不可以转换
-
不转换不相关类型
-
高容器到地容器需要强制转换
-
转换可能存在溢出,或者精度问题 (先强制转换再运算)
变量
可以变化的量,固定空间存放不同数据(变量名、变量类型、作用域),可以是基本类型和引用类型。
-
作用域
- 局部变量:方法内,属于方法
- 实例变量:方法外,属于对象
- 类变量:属于类(随着类的存在和消亡) static
-
常量:有固定值的变量 final 修饰符不区分前后
-
命名规范
- 所有变量、方法、类名:见名知意
- 类成员变量:首字母小写+驼峰规则
- 局部变量:首字母小写+驼峰规则
- 常量:大写字母+下划线
- 类名:首字母大写+驼峰规则
- 方法名:首字母小写+驼峰规则
运算符
优先级 ()
-
&&:逻辑与计算,两个都为真结果才为真,第一个为假,不用继续计算
-
||:逻辑或运算 有一个为真结果为真,第一个为真,不用继续计算
-
&:都为真才真 位运算
-
|: 有真则为真 位运算
-
<<:左移位运算 *2
-
>>:右移位运算 /2
包机制
公司域名倒置 www.baidu.com com.baodu.www
不同包使用类需要导包 import
javadoc 生成文档
用户交互Scanner
Scanner scanner = new Scanner(System.in);
//获取字符串方法
scanner.next();//不可以使用空格
scanner.nextLine();//回车键结束输入
//判断字符串是否还有输入
scanner.hasNext();
scanner.hasNextLine();
流程控制
-
if
if(条件){ //语句 }else{ //语句 }
- equals :比较字符串是否相同
- == :相同地址才为true
-
Switch
switch(value){ case value: //语句 break; case value: //语句 break; default : //语句 }
- case 中的值为中文,实际上是一个生成一个hashCode
- break 不写 会穿透
-
While
while( 布尔表达式 ){ //循环语句 }
-
for
for(初始化; 布尔表达式; 更新){ //代码语句 }
-
增强for (数组和集合)
for(声明语句 : 表达式){ //代码语句 }
break用于强制退出循环,continue用于终止循环中的某一次
方法
-
修饰符
-
返回值类型
-
方法名
-
参数类型
-
方法体
修饰符 返回值类型 方法名 (参数类型 参数名){ ... 方法体 ... return 返回值 ; }
-
java是值传递
-
方法重载
- 方法名相同
- 参数列表不同
- 方法返回值可以相同也可以不同
-
可变参数 (…)
数组
相同类型的有序集合,通过下标访问
-
声明数组
int[] nums ;//通常使用 int nums[] ; nums = new int[10];//开辟空间 int[0] = 1;//复制 nums.length();//长度
-
内存分析
- 堆:存放new对象和数组,可以被所有线程共享,不会存放别的对象引用
- 栈:存放基本变量类型(回报看这个基本类型的值) 存放引用对象的变量(会存放这个引用在堆里的具体地址)
- 方法:可以被所有线程共享,包含了所有class和static变量
-
初始化
int[] a = {1,2,3,4,5,6,7,8,9,10};//静态初始化 int[] b = new int[10];//动态初始化 //默认初始化空值
-
数组特点
- 长度确定
- 相同类型
- 元素可以是基本类型、引用类型
- 数组变量属于引用类型,数组对象本身是在堆中
-
二维数组
int[][] a = new int[10][10];
-
Arrays类
-
toString() 打印数组
-
sort() 升序
-
equals() 元素值是否相等
…
-
面向对象
抽象一类事物
-
static 静态变量 和类加载同步
-
加载顺序:静态代码块(执行一次)>匿名代码块>构造方法
-
抽象类:abstract
-
接口:interface
-
内部类:可以获得外部类的属性和方法
异常
- 检查性异常
- 运行时异常
- 错误
try{
//抛出异常
throw
}catch(){
}finally{
}
throws //方法上抛出异常