java基础

学习,偷的半日闲

不是所有的基础内容,只是个人的记录和随想。

1. 计算机

在这里插入图片描述

2. Java发展

  • javaEE(企业)
  • ME(手机,淘汰)
  • SE(基础)
  • JDK (Java开发者工具)
  • JRE(Java运行环境)
  • JVM(Java虚拟机)
  • JDK8(开发时仅仅需要)

3. jdk卸载和安装(一般jdk里面包括jre)

  • 安装
  1. 下载安装包
  2. 安装jdk和jre
  3. 设置环境变量和系统变量(JavaHOME path %java_HOMe%bin、 %java_HOMe%/bin/jre)
  4. 检测(java -version 、javac)
  • 卸载
  1. 卸载jdk目录
  2. 删除jdk文件
  3. 清理系统和环境变量
  4. 检测(java -version 、javac)

具体可以看其他博主,我这里推荐两位:

4.运行机制

高级语言:
编译型 操作(C、C++)
解释型 网页(速度)

Java拥有两者的特点
源程序(*.java)–> Java编译器 –>字节码文件(*.class)–>类装载器–>字节码校验器–>解释器–>操作系统平台(JVM)

5. 注释和标识符、关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
//单行注释

/*多行注释*/

/**
*文档注释
*/

/**
*标识符和关键字
*命名范围:字母+数字+$ +_
*首字母不能是数字,一般不会以$开头
*/

6. 方法

  • 重载:方法重载(同名不同形参)
  • 重写(Override):重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。
  • 结构:修饰符 返回值 方法名(形参1,形参2){
    }
  • 若没有集成开发环境,要在src文件夹运行,命令行运行时要加上包名。
  • JDK1.5才有可变参数(不定项参数),同类型、一个方法只能一个可变参数,Sum(double… number),必须是最后一个参数。
  • 递归思想(不是最优)递归头 、递归体
  • 方法调用:静态方法与类一起加载

7. 内存

存放new的对象和数组
可以被所有的线程共享,不会存放别的对象引用

存放基本变量类型(会包含这种基本类型的具体数值)
引用对象的变量(会存放这个引用在堆里面具体地址)

  • 方法区

可以被所有的线程共享
包含了所有的class和static类

8. 数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//数组的声明 
//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无限接近但不等于

    1
    2
    //数字类型可以用下划线分割
    int a = 1_000 ;
    • 字符型 char

    默认值:u00000

    • 布尔型 boolean

    默认值:false
    不能对布尔类型强制类型转换,可能会有溢出或者精度

  • 引用数据类型(除了基本数据类型,其他默认值都为null)

    • 数组
    • 字符串
    • 对象数组

11. 变量作用域

  1. 局部变量

写在方法内,必须初始化

  1. 全局变量
  2. 实例变量

类里面,方法外面

12. 运算符

  1. 算数运算符(+-*/%)
  2. 关系运算符(++ – = > < )
  3. 逻辑运算符(&& & || | !):短路运算
  4. 赋值运算符(=)
  5. 位运算符(&为两1为1 |为两0为0 ~取反,同1异0,>> 二进制/ ,<< 二进制*)
  6. 扩展符:+字符串连接符,三目运算符?:

13. 输入输出

  1. 凡是属于IO流都要关掉

  2. 输入:

    1
    2
    3
    Scanner.close();
    Scanner.next();//不能得到空格
    Scanner.nextLine();//以回车符为结束符
  3. switch(i)jdk7可以为字符串

  4. 反编译

    .class–>.java//用来看源码

14. 面向对象

  • 方法
    异常抛出throws

  • 方法的调用(递归)
    static 和类一起加载

  • 值传递和引用传递
    值传递:只是把值传给形参,
    引用传递:对象,本质还是值传递

  • 面向对象本质:以类的方式组织代码,以对象来组织封装数据

  • javaME Android

    2006 Hadoop

  • 值传递、引用传递

    构造函数:类名相同,没有返回值,注意:一旦定义有参构造,必须显示定义无参构造,

    1. new 关键字本质在调用构造器

    2. 初始化对象的值

15. 抽象(abstract )

  • 非非,抽象方法只能在抽象类中,非抽象类只能有非抽象方法,不能有抽象方法

  • 抽象类(里面的方法必须全部实现,不想全部实现,一般加一个适配模式)

  • 不能被 new

  • 抽象方法(只能靠子类帮我们实现)

  • 接口(制定的规则)架构师

    • 方法默认有public abstract

    • 属性是常量public static final

    • 接口不能被实例化,没有构造方法

16. 封装

  • 高内聚,低耦合

  • 属性私有化get、set

17. 继承与多态

  • java单继承,多实现

  • public protected default private (不可继承)

  • 所有类都是直接或间接继承Object类

  • super()调用父类的构造方法,必须在子类构造方法的第一个,不能和this同时调用构造方法。

比较 对象 前提 构造方法
this: 本身 没继承可以使用 本类构造
super(): 父类 只能继承条件下 父类构造
  • 方法重写:(和属性无关,需要有继承关系,修饰符范围可以扩大,抛出的异常可以被缩小)

  • 静态和非静态方法区别很大,

  • 方法多态(和属性无关,父类和子类有联系,重写和继承,父类的引用可以指向子类)

  • 对象执行 的方法看左边的类,

  1. static 方法属于类,不属于实例,

  2. final:常量

  3. private 方法不能继承,没有多态

  4. A instanceof B 判断引用类型

  5. 父类引用指向子类的对象

  6. 子类转换为父类:向上转型

  7. 父类转换为子类:向下转型:强制转换

  8. static:

    • 静态导入包

    • 静态变量:多线程

    • 静态方法(静静)

    • final 不能继承

18. 内部类

  • 成员内部类:类中定义一个类
  • 静态内部类:类中定义一个静态类
  • 局部内部类:方法定义一个类
  • 匿名内部类:实现接口的类前面写一个类

19. 异常

  • 异常,检查,运行,错误,通过JVM线程结束
  • 捕获
1
2
3
4
5
6
7
try {
//里面可能会有异常,如果有异常则捕获
} catch {
//抛出异常
} finally {
//不管有没有异常,都会执行
}
  • throw主动抛出异常,通常在方法中,throws一般在方法上
  • 自定义异常:继承Exception

20. 总结

不是全部的Java基础,欢迎大家进行总结。