JAVA入门基础知
-
计算机语言发展史:机器语言,汇编语言,高级语言
-
高级语言分类:编译型和解释型
-
Java版本作用
Java SE :标准版,定位在个人计算机(桌面)的应用
Java EE:企业版,定位在服务器端的应用
Java ME:微型版,定位在消费性电子产品的应用
Java版本之间的关系
-
Java的特性和优势:Java的核心优势跨平台(跨平台核心[Java虚拟机]); 安全性;面向对象;简单性;高性能;分布式;多线程;健壮性。
Java跨平台实现的原理
-
Java语言类型:编译型与解释型结合
-
java应用程序运行机制
首先编写java源文件(.java),通过编译器(javac)编译为字节码文件(.class),最后通过虚拟机(解释器)解释执行。
-
JDK、JRE 、JVM关系(子集)
-
Java环境变量
JAVA_HOME:JDK的安装目录
Path:%JAVA_HOME%\bin
测试JDK安装成功:java,javac,java -version -
注释
单行注释://内容
多行注释:/*内容*/
文档注释:/**说明文字+JavaDoc标签(可生成项目API)*/ -
标识符:字母、数字、下划线(_)、美元符号($)
规则:标识符以字母,数字,下划线,美元符号开头
其他部分可以是字母,数字,下划线,美元符号
java大小写敏感,长度无限制
标识符不能为java关建字
使用规范:
类名:每个单词首字母大写
方法、变量:第一个单词小写,从第二个单词开始首字母大写(“驼峰原则”) -
Java关键字
访问控制
private:表示私有字段,或者方法等,只能从类内部访问
protected:表示字段只能通过类或者其子类访问子类或者在同一个包内的其他类
public:表示共有属性或者方法
类,方法和变量修饰符
abstract:抽象方法,抽象类的修饰符
class 定义类
extends:表示一个类是另一个类的子类
final:表示一个值在初始化之后就不能再改变了表示方法不能被重 写,或者一个类不能有子类
implements:表示一个类实现了接口
interface:接口,一种抽象的类型,仅有方法和常量的定义
native:表示方法用非java代码实现
new:分配新的类实例
static:表示在类级别定义,所有实例共享的
strictfp:浮点数比较使用严格的规则
synchronized:表示同一时间只能由一个线程访问的代码块
transient:修饰不要序列化的字段
volatile:标记字段可能会被多个线程同时访问,而不做同步
程序控制
break:跳出循环或者label代码段
continue:不执行循环体剩余部分
return:方法返回值
do:循环语句,循环体至少会执行一次
while:while循环
if:条件语句
else:if条件不成立时执行的分支
for:for循环语句
instanceof: 测试一个对象是否是某个类的实例
switch:选择语句
case:switch语句的一个条件
default:switch语句中的默认分支
错误处理
try:表示代码块要做异常处理或者和finally配合表示是否抛出异常都执行finally中的代码
catch:和try搭配扑捉异常信息
throw: 抛出异常
throws:定义方法可能抛出的异常
包相关
import: 导入类
package:一系列相关类组成一个包
基本类型
byte:8-bit 有符号数据类型
short:16位数字
int: 32位整型数
long:64位整型数
char:16-bit Unicode字符数据类型
float:32-bit单精度浮点数
double: 64-bit双精度浮点数
boolean:布尔数据类型
true:true 关键字表示 boolean 变量的两个合法值中的一个
false:false 关键字代表 boolean 变量的两个合法值之一。
变量引用
super:表示基类
this:表示调用当前实例或者调用另一个构造函数
void:标记方法不返回任何值
保留字
goto:未使用
const:未使用
finally:为了完成执行的代码而设计的,主要是为了程序的健壮性和完整性,无论有没有异常发生都执行代码。
enum:枚举类型
assert: 断言条件是否满足
new:分配新的类实例
null:null 是 Java 的保留字,表示无值; 将 null 赋给非原始变量相当于释放该变量先前所引用的对象; 不能将 null 赋给原始类型(byte、short、int、long、char、float、double、boolean)变量
-
java是强类型的语言
强类型(强制类型定义):要求变量的使用要严格符合定义,所有变量必须先定义后使用 -
变量,常量
定义:代表一个可操作的空间,通过变量名来访问和操纵(增,删,改,查)
变量类型:基本类型和引用类型
1byte = 8bit
基本类型
整型:表示无小数部分的数值,可以为负数,默认为int
整型常量表示:十进制,八进制以0开头,十六进制以0x/0X开头,二进制以0b/0B开头
注意:long类型数值后加l/L(一般加L,易于区分)
进行任意精度的整数计算用java.math包下的BigInteger类
浮点型:表示有小数部分的数值,默认为double
浮点型常量表示:十进制,科学计数法
注意:float型数值后加(f/F),否则默认为double型
进行任意精度的浮点运算用java.math包下的BigDecimal类
字符型(char):用单引号表示字符常量,占2字节,允许有65536个字符(unicode编码,十六进制数)
转义字符
布尔型(boolean):true,false(默认),占1位
一般写为boolean flag;
if(falg)/if(!falg)
引用类型:类,接口,数组等;大小为4字节,记录引用对象地址
变量的分类及区别
成员变量定义未初始化,系统默认初始化值
常量:final定义,一旦被初始化后不能再更改其值
常量名:大写字母和下划线,例:MAX_VALUE -
运算符
算术运算符
一元运算符:++,–(在前,先自增/自减,后运算;在后,先运算后自增/自减)
二元运算符:+,-,*,/,%(取余)
赋值运算符:=
扩展运算符:+=,-=,*=,/=,%=
关系运算符:>,<,>=,<=,==,!=,instanceof
逻辑运算符:&&,||,!,^,&,|
&&,||: 短路与/或,如果运算符左边的操作数能得到结果,则不会继续计算右边
与或非优先级:非>与>或
&,|:与/或,运算符左右两边的操作数都要计算,影响运行效率
位运算符:&,|,^,~(取反),>>,<<,>>>
&,|:boolean型为逻辑运算符,两侧操作数为整数则是位运算符
条件运算符:x?y:z(三目运算符)
字符串连接符:+
运算符优先级:()[小括号为最高级] -
类型转换
自动类型转换(隐式):容量小的数据类型自动转换为容量大的数据类型(容量表示数据类型可表示的数的范围,不超其表数范围可进行自转)
强制类型转换(显式):(type)var,可能丢失信息,造成精度降低或溢出(通过”造型“实现)
注意:不能在boolean型和任何数值类型之间做强制类型转换 -
键盘输入与输出(Scanner类)
Scanner scan = new Scanner(System.in);//获取键盘输入
String name = scan.nextLine();//键盘输入赋值给变量
System.out.println(name);//在控制台输出结果
-
控制语句
顺序结构:从程序开始顺序执行每一条语句直达执行完最后一条语句结束
选择结构:判断给定的条件,根据判断结果来控制流程
if单选择结构
if-else双选择结构
if-else if-else 多选择结构
switch多选择结构
循环语句
当型
while循环
for循环
直到型
do-while循环
嵌套循环:循环语句内嵌套一个或多个循环语句,可任意嵌套多层
死循环:while(true)/for( ; ; ) -
break和continue语句
break:强制退出循环,不再执行后面的语句
continue:结束本次循环,执行下一次循环
带标签的break和continue会中断到存在标签的地方
设置标签的理由:希望在其中嵌套另一个循环 -
语句块
语句块(有时叫做复合语句),是用花括号扩起的任意数量的简单Java语句。
块确定了局部变量的作用域。
块中的程序代码,作为一个整体,是要被一起执行的。
块可以被嵌套在另一个块中,但是不能在两个嵌套的块内声明同名的变量。
语句块可以使用外部的变量,而外部不能使用语句块中定义的变量,因为语句块中定义的变量作用域只限于语句块。 -
方法
方法用于定义该类或该类的实例的行为特征和功能实现。
方法是类和对象行为特征的抽象。
面向对象中,整个程序的基本单位是类,方法是从属于类和对象的。
方法声明格式:
[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表){
Java语句;… … …
}
方法调用的方式:对象名.方法名(实参列表)
形式参数:在方法声明时用于接收外界传入的数据。
实参:调用方法时实际传给方法的数据。
返回值:方法在执行完毕后返还给调用它的环境的数据。
返回值类型:事先约定的返回值的数据类型,如无返回值,必须显示指定为为void。
注意事项
实参的数目、数据类型和次序必须和所调用的方法声明的形式参数列表匹配。
return 语句终止方法的运行并指定要返回的数据。
Java中进行方法调用中传递参数时,遵循值传递的原则(传递的都是数据的副本)
基本类型传递的是该数据值的copy值。
引用类型传递的是该对象引用的copy值,但指向的是同一个对象。
- 方法的重载(overload)
方法的重载是指一个类中可以定义多个方法名相同,但参数不同的方法。 调用时,会根据不同的参数自动匹配对应的方法。
重载的方法,实际是完全不同的方法,只是名称相同而已!
构成方法重载的条件:
不同的含义:形参类型、形参个数、形参顺序不同
public class Test1 {
public static void main(String[] args) {
System.out.println(add(3, 5));// 8
System.out.println(add(3, 5, 10));// 18
System.out.println(add(3.0, 5));// 8.0
System.out.println(add(3, 5.0));// 8.0
// 我们已经见过的方法的重载
System.out.println();// 0个参数
System.out.println(1);// 参数是1个int
System.out.println(3.0);// 参数是1个double
}
/** 求和的方法 */
public static int add(int n1, int n2) {
int sum = n1 + n2;
return sum;
}
// 方法名相同,参数个数不同,构成重载
public static int add(int n1, int n2, int n3) {
int sum = n1 + n2 + n3;
return sum;
}
// 方法名相同,参数类型不同,构成重载
public static double add(double n1, int n2) {
double sum = n1 + n2;
return sum;
}
// 方法名相同,参数顺序不同,构成重载
public static double add(int n1, double n2) {
double sum = n1 + n2;
return sum;
}
//编译错误:只有返回值不同,不构成方法的重载
public static double add(int n1, int n2) {
double sum = n1 + n2;
return sum;
}
//编译错误:只有参数名称不同,不构成方法的重载
public static int add(int n2, int n1) {
double sum = n1 + n2;
return sum;
}
}
- 递归
递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己。
递归结构包括两个部分:定义递归头,递归体
任何能用递归解决的问题也能使用迭代解决。在要求高性能的情况下尽量避免使用递归,递归调用既花时间又耗内存。