Java基础
学习,偷的半日闲。
不是所有的基础内容,只是个人的记录和随想。
1. 计算机
2. Java发展
- javaEE(企业)
- ME(手机,淘汰)
- SE(基础)
- JDK (Java开发者工具)
- JRE(Java运行环境)
- JVM(Java虚拟机)
- JDK8(开发时仅仅需要)
3. jdk卸载和安装(一般jdk里面包括jre)
- 安装
- 下载安装包
- 安装jdk和jre
- 设置环境变量和系统变量(JavaHOME path %java_HOMe%bin、 %java_HOMe%/bin/jre)
- 检测(java -version 、javac)
- 卸载
- 卸载jdk目录
- 删除jdk文件
- 清理系统和环境变量
- 检测(java -version 、javac)
具体可以看其他博主,我这里推荐两位:
4.运行机制
高级语言:
编译型 操作(C、C++)
解释型 网页(速度)
Java拥有两者的特点
源程序(.java)–> Java编译器 -->字节码文件(.class)–>类装载器–>字节码校验器–>解释器–>操作系统平台(JVM)
5. 注释和标识符、关键字
//单行注释
/*多行注释*/
/**
*文档注释
*/
/**
*标识符和关键字
*命名范围:字母+数字+$ +_
*首字母不能是数字,一般不会以$开头
*/
6. 方法
- 重载:方法重载(同名不同形参)
- 重写(Override):重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
- 结构:修饰符 返回值 方法名(形参1,形参2){
} - 若没有集成开发环境,要在src文件夹运行,命令行运行时要加上包名。
- JDK1.5才有可变参数(不定项参数),同类型、一个方法只能一个可变参数,Sum(double… number),必须是最后一个参数。
- 递归思想(不是最优)递归头 、递归体
7. 内存
- 堆
存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用
- 栈
存放基本变量类型(会包含这种基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里面具体地址)
- 方法区
可以被所有的线程共享
包含了所有的class和static类
8. 数组
//数组的声明
//1.默认初始化1,然后赋值
int[] array1 ;
array1 = new int[5] ;
//2.静态初始化
int[] array2 = {1,2,4,5} ;
//3.动态初始化
int[] array3 = new int[5] ;
//4.数组的长度为属性length,
//List长度为方法size(),字符串长度也为方法length()
//快捷键是array2.for(JDK1.5可用)
for(int i=0;i<array2.length;i++){
System.out.println("数组的第" + (i+1) + "个元素为:"array[i]) ;
}
//数组的使用
//foreach
//将数组作为形参
//将数组作为返回值
//5.数组工具类java.util.arrays
/**
都是static方法,通过类,不用通过对象
赋值 fill
排序 sort
对比 equals
查找数组元素 binarySearch(二分法)
*/
//6.稀疏数组(压缩算法后的数组)数组不为0的值存在另一个数组里
9. 冒泡排序
- 相互比较相邻,每次比较减少一次
- 时间复杂度O(n2)
10. 数据类型
-
基本数据类型
- 整数型 byte\short\int\long
1byte=8bit
二进制:0b
八进制:0
十六进制:0X- 浮点型 float(单)\double(双)
float无限接近但不等于
//数字类型可以用下划线分割 int a = 1_000 ;
- 字符型 char
默认值:u00000
- 布尔型 boolean
默认值:false
不能对布尔类型强制类型转换,可能会有溢出或者精度 -
引用数据类型(除了基本数据类型,其他默认值都为null)
- 数组
- 字符串
- 对象数组
11. 变量作用域
- 局部变量
写在方法内,必须初始化
- 全局变量
- 实例变量
类里面,方法外面
12. 运算符
- 算数运算符(±*/%)
- 关系运算符(++ – = > < )
- 逻辑运算符(&& & || | !):短路运算
- 赋值运算符(=)
- 位运算符(&为两1为1 |为两0为0 ~取反,同1异0,>> 二进制/ ,<< 二进制*)
- 扩展符:+字符串连接符,三目运算符?:
13. 输入输出
-
凡是属于IO流都要关掉
-
输入:
-
Scanner.close(); Scanner.next();//不能得到空格 Scanner.nextLine();//以回车符为结束符
-
switch(i)jdk7可以为字符串
-
反编译
.class–>.java//用来看源码
14. 面向对象
-
方法
异常抛出throws -
方法的调用(递归)
static 和类一起加载 -
值传递和引用传递
值传递:只是把值传给形参,
引用传递:对象,本质还是值传递 -
面向对象本质:以类的方式组织代码,以对象来组织封装数据
-
javaME Android
-
2006 Hadoop
-
值传递、引用传递
构造函数:类名相同,没有返回值,注意:一旦定义有参构造,必须显示定义无参构造,
-
new 关键字本质在调用构造器
-
初始化对象的值
-
15. 抽象(abstract )
-
非非,抽象方法只能在抽象类中,非抽象类只能有非抽象方法,不能有抽象方法
-
抽象类(里面的方法必须全部实现,不想全部实现,一般加一个适配模式)
-
不能被 new
-
抽象方法(只能靠子类帮我们实现)
-
接口(制定的规则)架构师
-
方法默认有public abstract
-
属性是常量public static final
-
接口不能被实例化,没有构造方法
-
16. 封装
-
高内聚,低耦合
-
属性私有化get、set
17. 继承与多态
-
java单继承,多实现
-
public protected default private (不可继承)
-
所有类都是直接或间接继承Object类
-
super()调用父类的构造方法,必须在子类构造方法的第一个,不能和this同时调用构造方法。
比较 | 对象 | 前提 | 构造方法 |
---|---|---|---|
this: | 本身 | 没继承可以使用 | 本类构造 |
super(): | 父类 | 只能继承条件下 | 父类构造 |
-
方法重写:(和属性无关,需要有继承关系,修饰符范围可以扩大,抛出的异常可以被缩小)
-
静态和非静态方法区别很大,
-
方法多态(和属性无关,父类和子类有联系,重写和继承,父类的引用可以指向子类)
-
对象执行 的方法看左边的类,
-
static 方法属于类,不属于实例,
-
final:常量
-
private 方法不能继承,没有多态
-
A instanceof B 判断引用类型
-
父类引用指向子类的对象
-
子类转换为父类:向上转型
-
父类转换为子类:向下转型:强制转换
-
static:
-
静态导入包
-
静态变量:多线程
-
静态方法(静静)
-
final 不能继承
-
18. 内部类
- 成员内部类:类中定义一个类
- 静态内部类:类中定义一个静态类
- 局部内部类:方法定义一个类
- 匿名内部类:实现接口的类前面写一个类
19. 异常
- 异常,检查,运行,错误,通过JVM线程结束
- 捕获
try {
//里面可能会有异常,如果有异常则捕获
} catch {
//抛出异常
} finally {
//不管有没有异常,都会执行
}
- throw主动抛出异常,通常在方法中,throws一般在方法上
- 自定义异常:继承Exception
20. 总结
不是全部的Java基础,如果有错误和建议,欢迎大家进行指正。