一、初识Java与Java程序剖析
1、JDK环境配置
关于JDK环境的配置,前面文章有提到过Android逆向-002.Android开发环境搭建
2、IntelliJ IDEA集成开发环境
IntelliJ IDEA是Java编程语言开发的集成环境。
下载:IntelliJ IDEA
3、Java程序剖析(从HelloWorld说起)
应用程序的主类:一个Java程序的源文件必须包含一个public static void main(String args[])
方法,这个方法被称为应用程序的入口方法,args[]是main方法的参数,是一个字符串类型的数组,用来存储输入的参数。
源文件的命名:源文件名字必须与类的名字相同,扩展为.java,注意:Java区分大小写。
Java一般命名规则:
- 包的命名:全部小写(com.xxx.xx)
- 类的命名:单词首字母大写,如果由多个单词组成则每个单词首字母大写。(HelloWorld)
- 变量/方法的命名:首字母小写,如果由多个单词组成,则除第一个单词外,其余每个单词首字母大写。(getName)
- 常量的命名:全部大写,常加入下划线(MAX_VALUE)
所有命名规则必须遵循以下规则:
- 1.名称只能由字母、数字、下划线、$符号组成。
- 2.不能以数字开头
- 3.名称不能使用Java的关键字。
举例:将以下代码保存为HelloWorld.java
public class HelloWorld{
public static void main(String args[]){
int outValue = 1;
System.out.println("hello world: "+outValue);
}
}
编译:
javac.exe HelloWorld.java
生成:
ls
HelloWorld.class HelloWorld.java
运行:
java HelloWorld
hello world: 1
Java相对于C/C++的优点:支持跨平台、Java有内置的垃圾回收机制、更安全。
Java的跨平台运行机制:
Java语言的源程序->编译成Java字节码->通过JVM虚拟机进行解释执行从而实现跨平台运行
Java关键字:51个使用中,2个保留关键字(const、goto)所以共53个关键字。
访问控制:
- private 私有的、protected 受保护的、public 公开的
类,方法和变量修饰符:
- abstract 声明抽象类、class 类、extends 扩充,继承、final 终极,不可改变的、implements 实现、interface 接口、native 本地、new 创建、static 静态、strictfp 严格,精准、synchronized 线程同步、transient 短暂、volatile 易失
程序控制语句:
- break 跳出循环、continue 继续、return 返回、do 运行、while 循环、if 如果、else 反之、for 循环、instanceof 实例、switch 开关、case 开关的结果、default 默认
错误处理:
- try 捕获异常、catch 处理异常、finally 有没有异常都执行、throw 抛出一个异常对象、throws 声明一个异常可被抛出、assert 断言
包相关:
- import 引入、package 包
基本类型:
- boolean 布尔型、byte 字节型、char 字符型、double 双精度、float 浮点、int 整数、long 长整型、short 短整型、null 空、true 真、false 假、enum 枚举
变量引用:
- super 父类,超类、this 本类、void 无返回值
二、数据类型和基本操作
Java提供了两类数据类型,一类是基本数据类型(原始类型),一类是引用类型。
1、基本数据类型
Java语言中一共有8种基本数据类型,分别是:boolean、byte、short、int、long、float、double、char
分为四大类:
布尔类型:boolean(C/C++中的逻辑类型是bool)
- 常量:true、false
- 变量:使用关键字boolean来声明逻辑变量,声明时可以直接赋初始值。
整数类型:byte,short,int,long
- int:Java中的int型常量可以直接写值:比如120,int型变量需要使用关键字int来声明
- byte:Java中不存在byte类型的常量,但是可以将一定范围内的int型常量赋值给byte型变量,通过byte关键字可以来声明byte型变量
- short:和byte类型一样,Java中不存在short类型常量,但可以把一定范围内的int型常量赋值给short型变量。
字符类型:char
- char:用单引号括起来的unicode表中的字符
浮点类型:float、double
- float:内存分配4个字节的浮点数,占32位
- double:内存分配8个字节的浮点数,占64位
2、变量,常量以及赋值语句
变量:在程序运行过程中可以发生改变的
- 声明语法格式:数据类型 变量名 = 值;
常量:在程序运行过程中不能改变的,程序运行前就被初始化的。
- 常量的语法格式,只需要在变量的语法格式前面添加关键字final即可。常量名必须大写。
- final关键字用于声明常量,方法和类,含义是"这是无法改变的"或"最终状态"
- final 数据类型 常量名 = 值;举例:final double P=3.14;final int MIN_VALUE=0;
- final修饰的常量只能被赋值一次,赋值后值不可以再改变。
- final修饰的方法不能被子类方法重写,但是可以被继承。
- final修饰的类不能被继承,没有子类,final类中所有方法都是final的。
Java的赋值语句是"="号,举例int变量赋值:int a=1;表示声明一个int型变量a,并将1赋值给a。除了可以将数值常量赋值还支持将变量赋值给变量,举例:int b=a;表示声明一个int型变量并将变量a的值赋值给变量b。注意这里的变量a需要与变量b类型一致,类型不一致的变量赋值需要类型转换,别的类型赋值与此类似。
3、数据类型转换
基本类型大小:从小到大
- byte:字节型:占1字节
- boolean:布尔型:占1字节
- char:字符型:占1字节
- short:短整型:占2字节
- int:整型:占4字节
- float:单精度浮点型:占4字节
- long:长整型:占8字节
- double:双精度浮点型:占8字节
自动(隐私)类型转换:自动将小类型转换为大类型,不需要强制转换符
举例:int a = 5;double b = a;
此处将占4字节大小的int类型变量a的值赋值给了占8字节大小的double类型变量b,因为a是小类型转为大类型,所以int类型变量a的值会自动转为double类型并赋值给变量b。
强制类型转换:将大类型转换为小类型,需要通过强制转换符来实现强制转换。
举例:double a = 520.1314;int b = (int)a;
此处将占8字节大小的double类型变量a赋值给占4字节大小的int类型变量b,因为是大类型转为小类型,所以double型变量a需要先强制转为int类型变量才能赋值给int型变量b。
注意:强转可能产生精度丢失,例如double类型变量a值为520.1314,强转成int类型后数值将会变成520,强转导致小数位舍弃产生精度丢失。
4、引用数据类型
在Java中除去基本数据类型的其他类型都是引用类型,包括自定义的class类,引用类型指向一个对象,不是原始的值,指向对象的变量是引用变量。
引用类型常见的有:String、StringBuffer、ArrayList、HashSet、HashMap等。
5、枚举
定义枚举:
使用enum声明枚举类型:
enum名字{
常量列表
}
其中常量列表用逗号分隔的字符序列,称为枚举类型的常量。
示例:
enum Season{
spring,summer,autumn,winter
}
上面声明了名字为Season的枚举类型,该枚举类型有4个常量。
枚举变量:
声明了名字为Season的枚举类型,该枚举类型有4个常量。
声明了一个枚举类型后,就可以用该枚举类型声明一个枚举变量。
示例:
Season x;该枚举变量只能取值枚举类型中的常量。通过使用枚举名和"."运算符来获取枚举类型中的常量。例如:x = Season.spring
6、注释
Java支持三种注释方式:
- 单行注释:以双斜杠"//"标识,只能注释一行内容,用在注释信息较少的是偶。
- 多行注释:以"/*“标识开头,”*/"标识结尾的注释方式,能注释多行内容,
- 文档注释:以"/**“标识开头,”*/"标识结尾的注释方式,一般用在类、方法和变量上面,用来描述其作用。
三、Java运算符及优先级
1、算术运算符:
算符运算符:
- +、-、*、/、%、++、–
2、赋值运算符
赋值运算符:
- 格式:变量=表达式;
- 复合赋值运算法:+=、-=、*=、/=、%=
3、关系运算符
关系运算法:属于二目运算符,用来比较两个值的关系,结果是boolean型,当运算符对应的关系成立时,运算结果是true、否者false。
- >、<、>=、<=、==、!=
4、逻辑运算符
逻辑运算法:
- 逻辑与:&&
- 逻辑或:||
- 逻辑非:!
注意:其中&&、||属于短路运算、也就是如果第一个表达式能决定最终结果则不进行后面的计算。
5、位运算符
位运算法:两个整型数据实施位运算,即对两个整型数据对应的位进行运算得到一个新的整型数据
- 按位与:&
- 按位或:|
- 按位非:~
- 按位异或:^
6、其他运算法
instanceof运算符:instanceof运算符是一个二目运算符,左边的操作元是一个对象,右边是一个类,当左边的对象和右边的类或子类创建的对象时,该运算符运算的结果是true。
7、运算符优先级
Java中的运算符优先级从高到低排序(实际工作用的较少,运算顺序主要用括号控制)
- 圆括号:()
- 逻辑非、自增、自减:!、++、–
- 乘法、除法、取余:*、/、%
- 加法、减法:+、-
- 小于、小于等于、大于、大于等于:<、<=、>、>=
- 等于、不等于:==、!=
- 逻辑与:&&
- 逻辑或:||
- 赋值运算:=、+=、-=、*=、/=、%=
四、Java流程控制
1、条件语句
简单if语句
语法格式:
if(条件){
条件成立时执行的代码
}