JavaSE基础知识总结
1. JAVA的应用领域
- JavaSE:标准版本 桌面应用程序
- JavaEE:企业版本 解决方案的技术的集合
- JavaME: 嵌入式 开发 游戏开发
jdk8下载
Eclipsex下载
达内开发文档服务
2. 配置环境
1) 工作空间
保存java创建的文件的地方叫做工作空间WorkSpace,其实就是个目录
创建D:\java\ws\x目录,不要有中文,不要有空格
手动创建目录,eclipse中选择
2) 配置eclipse环境
- 配置字体大小 : preference/fonts/Text Font/edit)
- 修改工作空间字符集,默认gbk,修改utf-8(中文乱码) : preferences/workspace/encoding/修改UTF-8
- 创建java文件,生成标准作者等参数 : reference/java/code style/templates/code/new java files/edit
3) 配置IDEA环境
- (IDEA)[]
3.JAVA代码规则
- 大小写区分
- java中最小程序是类
- 程序要有入口方法(具有特定功能的代码)
- 语句所有的语句都必须经";"结尾,打印输出的内容要在小括号内.
- 字符串必须用双引号引起来("helloworld")
- 有层次结构或包含关系,被包含的要换行缩近4格
1) 包的命名
格式 : (域名的反写.项目名称.功能名称)
如 com.kuang.study2020.web
注意:所有的包名都必须小写
2) 标识符
类名,变量以及方法名
- 不能使用关键字作为变量名或方法名
- 大小写是敏感,区分的
4.变量与常量
1) 变量
在内存中临时开辟的一段存储空间,用来存储数据
变量声明: 数据类型+变量名
变量命名规范:
- 驼峰原则 : 由多个单词组成时,从第二个单词开始,每个单词首字母大写
- 所有变量,方法,类名:见名知意
- 常量(是一种特殊的变量):全部大写,单词下斜线连接
- 类名:首字母大写,驼峰原则
- 方法名:首字母小写,驼峰原则
2) 常量(constant)
格式:final 常量名 = 值
3) 变量作用域
- 类变量,在类里面,方法外。
- 实例变量:从属于对象,如果不自行初始化,会是默认值。
默认值:“布尔值默认为false,基本类型默认为0,其他默认null” - 局部变量:必须声明和初始化值。如int a = 1;
5.数据类型
1) 基本数据类型
名称 | 中文名称 | 长度 | 范围 | 备注 |
byte | 字节 | 1byte | -128~-127 | 存整 |
short | 短整型 | 2byte | -32768~32767 | 存整 |
int | 整型 | 4byte | 大 | 存整(常用) |
long | 长整型 | 8byte | 很大 | 存整(数后加L) |
[float](离散的, 接近但不等于) | 单精度浮点型 | 4byte | 很大很大 | 存小数(数后加F) |
double | 双精度浮点型 | 8byte | 超大 | 存小数(常用) |
char | 字符 | 2byte | 0~65535 | 存一个字符 |
boolean | 布尔 | 1byte | ture/false | 存ture/false |
2) 引用数据类型
所有的类都是引用数据类型。如(HelloWorld,Demo)
String也是引用类型,String变量定义后不能更改
3) 类型转换
- 分为强制转换和自动转换
强制转换 (数据类型)变量名 高--低 int i = 128; byte b = (byte)i;
自动转换 低--高 int i1 = 128; double b1 = i; - 不能对布尔值进行转换
- 不能把对象类型转换成不相干的类型
- 转换的时候存在内存溢出,或者精度问题
4) 进制
二进制:0b开头 八进制:0开头 十六进制:0x开头
6.流程控制
1) 分支结构
① if语句结构
- if语句
if(布尔表达式){
//如果布尔表达式为true将执行的代码
//if语句可以没有大括号,没有时,仅对紧跟一句有效。
}
- if,else语句
if(布尔表达式){
//如果布尔表达式为true将执行的代码
} else {
//如果布尔表达式为false将执行的代码
}
- else,if语句(多分支)
if(布尔表达式1){
//如果布尔表达式1为true将执行的代码
} else if(布尔表达式2) {
//如果布尔表达式2的值为true将执行的代码
} else(布尔表达式4) {
//如果以上布尔表达式都不为true将执行的代码
}
② switch(多分支)语句结构
switch的实现完全可以用elseif替代,但是switch语句写的更加简洁
switch(n),n支持byte、short、int、String、char类型,不支持long
switch更简洁但更死板,case后不能写"<,>"等。
switch(表达式){
case value(值):
//语句
break;
case value(值):
//语句
break;
defalut :
//语句
}
2) 循环结构
① while循环
while(布尔表达式){
//循环内容
}
② do ... while循环(与while循环相似,不同的时会至少执行一次)
do {
//代码语句
}while(布尔表达式):
③ for循环(常用)
for(初始化;布尔表达式;更新){
//代码语句
}
④ foreach增强for循环
for (数据类型 a : 数组名){
//输出a(每个数组的值)
}
死循环常用 while(true){}
3) 退出循环关键字
break; 跳出循环
continue; 跳过本次循环
return; 结束方法
7.方法
1) 方法重载
在一个类中,有 相同的函数名称,但形参不同的函数
重载规则:
- 方法名必须相同
- 参数列表必须不同(个数、类型、参数排序 等不同)
- 方法的返回类型可以相同也可以不相同
- 仅仅返回类型不同不足以成为方法的重载
2) 可变参数(不定项参数)
规则:
- 方法声明中,在Java指定参数类型后加一个省略号(...)。
- 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数。
- 任何普通参数都必须在它之前声明。
3) 递归(A方法调用A方法 自己调用自己)
递归的能力在于用有限的语句来定义对象的无限集合。
深度越大越慢,尽量不用。
4) 方法的调用
static的方法是和类一起加载的,而非静态方法是类实例化之后才存在的
所以静态(static)方法无法直接调用非静态方法。
static方法体内必须有内容
① main方法中调用
- 调用静态方法: 类名.方法名
- 调用非静态方法: 对象类型 对象名 = new 对象值
8.数组
数组的创建 : int[] 数组名 = new int[数组长度]
赋值 : 数组名[index] = "值";
1) 随机数组:
创建一个数组,将数组里放入随机数
for(int j = 0;j<10;j++) {
arr[j] = new Random().nextInt(100);
}Arrays.sort(arr); //将数组排序。
String[] numbers = (2,6,7,2,8,3)
for(int i = 0;i<numbers.length;i++){
输出numbers[i]
}
增强for循环
for(int x:数组名){
输出x(每个数组的值)
}
2) 稀疏数组(稀疏矩阵)
含义: 记录原始数组的有效值。存进新的数组
结构: 行数为有效数字个数,列数为3,第一行存数组大小和有效数字个数
3) 冒泡排序(八大排序之一)
public static void main(String[] args) {
int[] a = {321,5842,548,12,8421,321,58121,5161};
int[] s = sort(a);
System.out.println(Arrays.toString(s));
}
public static int[] sort(int [] array){
int temV ;
for (int i = 0; i < array.length -1 ; i++) {
for (int j = 0; j <array.length-1-i ; j++) {
if (array[j+1]>array[j]){
temV = array[j];
array[j] = array[j + 1];
array[j + 1] = temV;
}
}
}
return array;
}
9.String
- String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了
- Java 程序中的所有字符串字面值(如
"abc"
)都作为此类的实例实现。
1) 字符串拼接
- 在大量拼串时,推荐使用StringBuilder.append(),(单线程,无人竞争)
- 如果在多线程(抢票),多人同时使用时,程序要进行安全设置,推荐使用StringBuffer
- 少量拼串推荐使用String
- 在执行效率上,StringBuilder > StringBuffer > String
10.方法 (又称函数,过程)
用于封装一段特定的业务逻辑
静态方法必须有方法体
1) 方法的定义
修饰词 返回值类型 方法名(参数列表){
方法体
}
对象实例和数组存在堆
本地方法栈native
局部变量,方法描述存在栈
11.面向对象
① 概念:
以类的方式组织代码,以对象的方式封装数据
② 规范:
一个项目只能有一个main方法
一个类由属性和方法组成
1) 构造器
① 作用:
- 使用new关键字,本质是在调用构造器
- 用来初始化值
② 规则:
- 和类名相同,没有返回值
- 一旦定义了有参构造,无参构造必须显示定义
- 子类的构造过程中,必须先调用父类的构造方法
- 子类可以在自己的构造方法中使用super(参数列表)调用父类的构造方法
(1)可以使用this(参数列表)调用自己这个类的其他的构造方法
调用this的时候也调用了父类的构造方法
(2)如果调用了super,必须写在子类构造方法的第一行
(3)this也必须放在第一行,所以this,super在一个构造方法里无法同时出现
③ 用处:
在构造器内加入参数,当new对象时带上参数,可以给new出来的对象赋一些初始化的值
如果对构造方法进行重载的话,就可以根据不同的参数来构造不同初始值的对象
2) 构造代码块
总结:
- 构造代码块内初始化和赋值一起进行,出了代码块就会被干掉(int a = 10;)
- 构造代码块被执行后类变量被赋值,赋的值一直有效
- 只有执行了构造器,构造代码块才会被执行
- 构造代码块先于构造器执行
3) 核心思想(封装继承多态)
① 封装(目标 : 高内聚,低耦合)
意义:
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 提高系统的可维护性
② 继承
定义:
- 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
- 继承关系的两个类,一个为子类(派生类),一个为父类(基类)。继承父类使用关键字extends。
- 调用子类构造器时,先调用父类的无参构造。如果父类没有无参构造,就通过super调用有参构造。
注意:
- Java中类只有单继承,没有多继承。子类只能有一个父类
③ 多态(方法的多态,属性没有)
要求:
- 需要有继承关系的两个类
- 方法需要重写,父类的引用指向子类
- 父类引用指向子类对象:Father f1 = new Son();
例如:
Father f1 = new Son();
父类调用被子类重写的方法时,运行的是重写后的方法
父类想用子类独有的方法时需要强制转换
((Son)f1).方法();
Son s1 = new Son();
子类可以调用父类的方法
12.super、方法的重写
1) super注意点:
- super();调用父类的构造方法,必须在构造方法的第一句。
- super只能在子类的方法,或构造方法中。
- super();和this();两个构造方法不能同时调用。
2) 方法的重写:
子类重写父类的方法。(Alt + insert; override)
① 要求:
- 需要有继承关系
- 方法名必须相同,参数列表必须相同,方法体不同
- 不能被static,final,private修饰词修饰
- 修饰符:范围可以扩大但不能缩小 public>protected>default>private
- 抛出的异常:范围可以被缩小,但不能扩大
② 作用:
- 父类的功能,子类不一定需要,或者不一定满足。
13.异常
Throwable - 顶级父类
-- Error:系统错误,无法修复
-- Exception:可修复的错误
--RunTimeException
--ClassCastException
--ClassNotFoundException
14.抽象类与接口
1) 特点:
- 接口会为简写形式的变量,自动拼接public static final
- 接口方法会自动拼接public abstract,接口可以存在static方法
- 接口里的资源,默认public
2) 关系:
- 接口与接口间可以多继承。
- 接口与实现类之间可以多实现。
- 类可以同时继承类和实现接口。