2周突刺
------------恢复内容开始------------
java 程序运行机制
属于编译型和解释型。
源程序(.java文件)—(javac)—》java编译器——》字节码(.class文件)——》类装载器——》字节码校验器——》解释器——》操作系统平台
IDE 集成开发环境
注释
// 单行注释
/* */ 多行注释
/** (每一行都默认*) */ 文档注释——》JavaDoc(它从程序源代码中抽取类、方法、成员等注释形成一个和源代码配套的API帮助文档。是用来生成自己API文档的)才涉及
标识符
Java中所有的组成部分都需要名字。类名变量名以及方法名都被称为标识符。
不能使用关键字作为变量名或者方法名
大小写敏感
注意点:
首字母 都应以字母(A-Z或者a-z),美元符($),或者下划线(-)开始
其余 可以是字母(A-Z或者a-z),美元符($),或者下划线(-)或数字的任何字符组合
数据类型
java(强类型语言)分为两大类
基本类型(primitive type) 引用类型(reference type)
float 和 long 要在最后加首字母 eg:float number = 50.1F;
char 只能存一个字母或者字
整数拓展 进制 前缀 0b二进制,0八进制,0x十六进制 eg:int i3 = 010;即为八进制的10即十进制的8
浮点数扩展 float 舍入误差,只是个约数 最好完全避免使用float进行比较,用BigDecimal (数学工具类)
字符拓展 强制转换 ,char c1 =“a”; int(c1) 所有的字符本质还是数字 Unicode表
转义字符 \t 制表符,一个Tab键四个空格 \n 换行
类型转换
由于java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。
运算中,不同类型的数据先转化为同一类型,然后再进行运算。
小数的优先级高于整数
强制转换 (类型 )变量名 高到低 避免 内存溢出
注意点: 1.不能转换布尔类型
2.不能把对象类型转换为不相干的类型
3.由高转低可能存在内存溢出或者精度问题(eg: (int)23.7==23 (int)-45.89f==-45)
自动转换 无格式,double i=变量名 由低到高
类型转换拓展: jdk7之后新特性,数字之间可以用下划线分割 int money = 10-0000-0000; sout=1000000000
操作比较大的数字的时候,为了避免溢出,先将一方转换为Long类型,所有数值都会自动提升到long类型,就不存在溢出问题;
------------恢复内容结束------------
变量
不进行初始化——布尔类型默认是false,int是0,float是0.0,除了基本类型其余(class,String,interface)默认值都是null
局部变量(方法中的变量)必须声明变量类型和初始值
实例变量(成员变量):类方法外的变量,不需要初始化
类变量(static)从属于类,与类一起消失一起出现 eg:static double salary = 2500;
常量
final修饰,不可变,常量名使用大写字母
修饰符不存在先后顺序 static final double PI =3.14; 等价于 final static double PI =3.14;可直接引用,列如游戏窗口设置
变量命名规范
见名知意
类名 大驼峰
类成员变量,局部变量。方法名 小驼峰
常量 大写字母和下划线
运算符 operator
Math类
ctrl + D 复制当前行到下一行
= 赋值
== 等于
自增自减运算符
b=a++ 先把a的值赋给b,a再+1
c=++a a先加1在赋值给c
位运算符
& 与 同一则一,其余为零
| 或 有一则一,其余为零
^ 异或 一零为一,其余为零
~ 非 相反
a+b+“” 先算a+b “”+a+b 把a和b转为字符串
x ? y:z x为true 则结果为y,否则为z
包机制
一般用公司域名倒置作为包名(防止命名空间重置)
import 导包时在末尾加个 .* 通配符,导入包下所有的类
流程控制
Scanner
next()不能得到带有空格的字符串,返回空格之前的所有字符 ,会以空格作为分隔符或者结束符
nextLine()以enter作为结束符,返回输入回车之前的所有字符,可以获得空白
Scanner sc =new Scanner(System.in); 最后要 sc.close();关闭Scanner,结束后台防止占用资源 sc.hasNextInt 是否有输入的值,有增等价于 true 输入类型以末尾单词判定
equals 判断字符串是否相等 s.equals("hello");
switch 变量类型可以是byte,short,int或者char,javase7开始支持String类型 case标签必须为字符串常量或者字面量。
case穿透,最好每条case语句后用break结束 都没有最后用default 可以不添
反编译 java-----编译完为 class文件 idea能看源码
for 支持迭代的一种通用结构,是最有效,最灵活的循环结构。执行次数在执行前就确定了
快捷键 100.for 直接生成 for(int i = 0; i <100; i ++) { }
for的死循环 for(; ; ){}
方法(小驼峰命名)
修饰符 返回值类型 方法名(参数类型 参数名){ return 返回值;}
static 可以直接调用 void无返回值
是语句的集合,在一起执行一个功能;
方法是解决一类问题的步骤的有序组合;
方法包含于类和对象中;
方法在程序中被创建,在其他地方被引用;
一个方法一个功能(原子性);
return 可以终止方法, return 0;
java只有值传递
方法重载
一个类多个方法,方法名一样,参数(类型,个数,排列顺序)不一样
命令行传参 带包名
可变参数(不定项参数)
在方法声明中,在指定参数类型后加一个省略号...
一个方法中只能指定一个可变参数,他必须是方法的最后一个参数。任何普通参数必须在他之前声明。 eg: psv 变量名(int i ,double...y){}
递归
要有边界值,防止死循环
数组
定义 类型[] 数组名 int[] numbers 声明一个数组不存在,只有new一个才创建而存在 , int[ ] numbers = new int[10]; ——> 这里面可以存放10个int 类型的数字 ,赋值(默认值为0)
使用new操作符来创建数组, 类型[ ] 数组名 = new 类型 [数组名]
同一数组内容类型必须一致
长度 名.length
数组一旦被创建,大小是不能更改的,长度是固定的;
数组变量属于引用类型,通过索引访问,索引越界会报错(一共十个数访问第十一个),
数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
数组对象本身是在堆中的
小结
数组是相同数据类型(数据类型可以是任意类型)的有序集合
数组也是对象。数组元素相当于对象的成员变量
数组长度是确定的,不可变的。如果越界:ArrayIndexOutOfBoundsException 数组下标越界异常!
数组初始化
静态 int [ ] a ={1,2,3};
动态 int [ ] b = new int [ 10 ]; 分配十个空间,通过 b [ i]=数;进行赋值
数组的使用
反转数组 public static int[ ] reverse ( int [ ] arrays ){
int[ ] result = new int[arrays.length];
for(int i = 0 ,j = result.length-1; i < arrays.length; i++,j--){
result[ j] =array[i];
}
return result;
}
调用 psvm{
int[ ] reverse = reverse(arrays);
printINt(reverse); 另写一个遍历打印的方法,数组不能直接被输出。
多维数组
int[ ] [ ] 二维