java基础

数据类型

1.标识符
由字母,数字,下划线,$组成
不能以数字开头
见名知意,严格区分大小写
2.变量
变量类型 变量名=变量值

数据类型的种类
基本类型
byte short int long float double boolean char
引用类型
除了8种基本类型都是引用类型
byte 127----(-128)
short 32767---(-32768)

基本类型的类型转换

大转小--显示转换(强转)
小转大--隐式转换(自动转换)

变量

变量的位置不同,作用和名字都不同
成员变量,,,,类里方法外,,整个类都有效,,有默认值
局部变量,,,,方法里,,方法里有效,,必须手动赋值

方法

被命名的代码块,可以有参数,也可以没有参数
语法:
方法修饰符 方法返回值 方法名(【参数列表。。。】){
方法体
}

方法的重载

一个类的现象,存在多个同名的方法,但是,参数列表不同
(可以个数相同但是类型不同,也可以个数不同)
体现程序的灵活性,对外提供多个同名的方法

数组

概念:用来存储多个数据的容器,
Array,【】存的是多个相同类型的数据
特点
都有下标,从0开始,下标最大值是数组长度-1
数组一旦创建,长度不能改变
int [] a=new int[5];
int [] b=new int[]{1,2,3,4,5};
int [] c={1,2,3,4,5};
数组的工具类 Arrays

OOP

面向对象:是一种思想,相对面向过程而言,相对简单
封装,继承,多态

封装

提供private进行实现封装,提高程序的安全性
可以封装成员变量和成员方法,被private,只能在本类中可见(反射也可以)

构造方法

用来创建对象或者完成对象的初始化
构造方法可以重载
触发的时间节点:创建对象/new/实例化
建议:创建带参构造方法把无参构造方法也创建。

构造代码块和局部代码块

代码块:一段代码被一对花括号包起来的现象
位置不同,作用和意义都不同
类里方法外--构造代码块--提取构造方法的共性
方法里--局部代码块--控制变量的作用范围
this--代表本类对象的引用对象

继承

继承的初衷:提高代码的复用性
特点
extends关键字
子类把父类的功能复制了一份
Java只支持单继承
继承可以传递
不能继承父类的私有成员
继承多用于功能的修改,子类可以拥有父类的功能同时,进行扩展
像是is a的关系
super--代表的是父类对象的一个引用
用来在子类中使用父类的功能

方法的重写

发生在父子类间的现象
子类继承父类后,就可以使用父类的所有功能
子类想要修改父类原有的功能时,就会发生方法的重写
重写的要求
继承关系+在子类中方法的声明/签名必须和父类的一模一样
方法的声明/签名:方法返回值 方法名(参数列表)

static

可以修饰成员变量和成员方法
随着类的加载而加载,优先于对象加载
只加载一次,就会一直存在,不会再开辟新空间
全局唯一,全局共享
可以直接类名点调用
静态只能调用静态,非静态可以随意调用
static不能和this或者super公用,因为有static时可能还没有对象

代码块

静态代码块--成员位置--完成项目的初始化--类加载时
构造代码块--成员位置--抽取构造方法的共性--创建对象时
局部代码块--局部位置--控制变量的作用范围--方法执行时
执行顺序:静态代码块>构造代码块>局部代码块

final

在继承中,父类的功能可以都给子类用,但是当子类想要修改功能时,会发生方法的重写现象,子类想改那个方法都可以重写,如果想要限制不让子类随便重写,可以把父类的功能用final修饰成最终的
final修饰类--不能被继承
final修饰方法--可以被继承,不能被重写
final修饰的是常量,值不能修改

多态

:一个对象有多种形态
为了统一调用标准,父类就是标准,一切向父类看齐
好处:不关心具体的类型,屏蔽子类之间的不同,把子类都会当成父类来看,做出统一的编程,写出通用的代码
特点:
前提:发生继承关系+发生方法重写
口诀:父类引用指向子类对象+编译看左边运行看右边

异常

BUG
继承的结构非常严谨throwable-exception..
Exception,,程序中所有异常的父类
异常处理
1.try{
}catch(){
}
2.抛出 throws

抽象类

只有方法的声明,没有方法体
如果类里有抽象方法,这个类就是一个抽象类
抽象类多用于多态
抽象类不能被实例化
通过abstract
抽象类里有构造函数,为了给子类new对象

接口

接口目的:突破Java单继承的局限性
特点
接口里都是抽象方法
interface
implements
接口--一个特殊的抽象类
接口和类之间可以多实现,接口和接口之间可以多继承
接口是对外暴露的规则,是一套开发规范
提高了程序的功能扩展,降低了耦合性
不能实例化
接口没有构造方法,没有变量都是常量
接口里都是抽象方法
接口的常量可以简写,默认加public static
接口的方法可以简写,默认加public abstract

接口和抽象类的区别

类和类之间的关系:继承
接口和接口之间的关系是继承
类和接口之间的关系是实现
...............
相同
接口和抽象类都是抽象层,一般用来提取共性
都不能被实例化
不同
构造方法:抽象类有,接口没有
成员变量:抽象类有,接口没有,接口都是常量
成员方法:抽象类有普通方法和抽象方法,接口都是抽象方法(jdk1.8后可以有)
接口可以有简写,抽象类没有

IO流

inputstream/outputstream
bufferedinputstream/bufferedoutputstream
filereader/bufferedreader
filewriter/bufferedwriter

泛型

通过泛型的语法定义,约束集合元素的类型,进行安全检查,把错误显示在编译器
是一个语法糖,对jvm运行时的性能说没有任何的影响的
泛型使用位置
类/接口: public class student{}
方法:public void eat(E e){}

集合

collection顶级接口
lisr:arraylist底层数组,linkedlist底层链表
set:hashset,treeset
map--键值对,键不能重复,每个键对应一个值
hashmap:底层维护一个数组,由hashcode计算存储位置
会发生hash冲突,形成链表
jdk1.8链表节点数>8会成为红黑树,节点<6会再次变成链表
list:元素有序,元素有下标,允许重复的元素,允许null
set:元素不能重复,元素没有下标,元素无序
集合工具类:collections

多线程

提高程序的效率
进程:正在运行的程序,最少一个线程支持
线程:操作系统能够调度的最小单位,,
并发和并行的区别
并发:同一时刻,共享资源被多个线程抢占
并行:同一时刻,可以指向多个任务,不发生抢占,
各干各的
线程的生命周期:
刚new出来的线程新建状态
可运行状态,等待cpu调度
运行状态,正式开始执行任务
理想状态,线程进入结束状态
实际情况,线程会以各种方式进入阻塞状态
创建线程2种方式
1.继承thread 2.实现runnable接口

同步锁

synchronized表示同步,
实现同步后,共享数据安全了,
但是效率低了
可以修饰方法,也可以修饰代码块
方法--锁对象是this
代码块--锁对象是任意对象
如果共享资源是静态资源,锁对象必须是class

设计模式

单例设计模式
保证一个类仅有一个实例
私有化构造方法
在类的内部,自己new一个准备好
设置全局访问点
饿汉式/懒汉式(延迟加载+线程安全)

注解

@target 指定注解可以出现的位置
@retention 指定注解的生命周期
可以自定义注解@interface 注解名

反射

反射的定位很重要,jvm和框架的底层都离不开反射
反射的原理:拿到你的class文件里的数据,进行数据的操作
reflection是Java程序开发语言的特征之一
允许运行中的Java程序对自身进行检查,---自省
反射--甚至可以直接操作程序的私有属性。
获取class对象的3种方式
forName(String className)
类名。class
对象.getclass()

内部类

内部类可以直接访问外部类中的成员,包括私有成员
外部类想要访问内部类的成员,必须要建立内部类的对象
匿名内部类
和匿名对象一起使用
通常用来优化内存,对象,或者类,在内存中存储的时间短

你可能感兴趣的:(java)