JAVASE

halo 现在是在德勤实习的第三个月啦 本人想要开始写点东西 方便以后的技术学习和工作生涯回顾 

先来看看java最基础的javase阶段 因为一些大公司很重视实习学生在校的学习情况 所以面试的时候会问一些很基础的问题 所以javase是不能放下的 毕竟在实际项目中的业务逻辑层跟javase也是息息相关的

javase中 常见的面试问题涉及如 java语言/面向对象语言的特性、java的八大基本数据类型、数组、Object类、String类、Integer类、接口、集合、IO、线程、泛型、反射、static静态修饰符、hashcode哈希值

所以咱就就着以上来细节看看javase的一些知识点

众所周知 java语言是一种面向对象的语言 面向对象语言的特性为多态、继承、封装、抽象

封装:一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法  通过修改属性的可见性来限制对属性的访问(一般限制为private) 再对每个值属性提供对外的公共访问方法 即创建一对赋值取值方法(getter/setter方法)用于对私有属性的访问

继承:子类继承父类的特征和行为 使得子类对象具有父类的实例域和方法 或子类继承父类方法 继承类型分为单继承、多重继承、不同类继承同一个类、多继承(java不支持多继承)关键字为extends、implements、super、this

多态:同一个行为具有多个不同表现形式的能力 同一个事件发生在不同对象上会产生不同的结果 多态就是同一个接口使用不同的实例而执行不同操作 多态存在的三个必要条件为继承、重写、父类引用指向子类对象 多态的实现方式有重写、接口、抽象类和抽象方法

抽象

java语言的三个体系

javase:java语言的基础部分、也是核心部分 也是本文的重点

javaee:主要涉及到java语言框架性的学习 如SSM、SSH、Springboot、Springcloud等

javame:java平台微型版 比较少接触

java基础语法

一个普通的java程序可以认为是一系列对象的集合 这些对象通过调用彼此的方法来协同工作 涉及到面向对象编程中的一些概念包括 对象、类、方法、实例变量

对象:对象是类的一个实例 有状态和行为

类:类是一个模板 描述一类对象的行为和状态

方法:方法就是行为 一个类可以有很多方法

实例变量:每个对象都有独特的实例变量 对象的状态由实例变量的值决定

java基础语法还包括一些概念如 关键字、修饰符、标识符、注释等

java的八大基本数据类型为 byte short int long float double char boolean 

java的引用数据类型为 类class 接口interface 数组

java 数组

数组是一种重要的数据结构 不同语言对数组的处理不尽相同

java中的数组是用来存储固定大小的同类型元素 涉及到java数组的声明、创建、初始化、foreach循环、作函数的参数及返回值、数组遍历、数组异常、数组的转化、数组排序、二维数组、数组在JVM内存区域的划分及相关的后台实现

java语言中的Arrays类(java.util.Arrays)能方便操作数组 它所提供的方法都是静态的 具有功能——

给数组赋值 fill()方法

对数组排序 sort()方法 升序排序

比较数组 equals()方法 比较数组中的元素值是否相等

查找数组元素 binarySearch()方法 对已排序好的数组进行二分查找法操作

Object类

Java类库中的一个特殊类 所有类的父类 位于java.lang包中 任何Java对象都可以调用Object类的方法

 常见方法——toString()、equals()、getClass()

toString()  返回该对象的字符串 当程序输出一个对象或者把某个对象和字符串进行连接运算时 系统会自动调用该对象的toString()方法返回该对象的字符串表示

toString()方法返回“运行时类名@十六进制哈希码”格式的字符串 

哈希码(hashCode)  ==>  每个Java对象都有哈希码属性 可用来标识对象 提高对象在集合操作中的执行效率

equals()  比较两个对象的内容是否相等  通常字符串的比较只是关心内容是否相等 

== 运算符  ==>  比较两个引用变量是否指向同一个实例

 getClass()  返回对象所属的类 是一个Class对象 通过Class对象可以获取该类的各种信息 如类名、父类以及它所实现的接口等

String类

java语言中字符串属于对象,提供了String类来创建和操作字符串

String类有11种构造方法 提供不同的参数来初始化字符串  String类是不可改变的(若要对字符串做多次修改则应选择使用StringBuffer & StringBuilder类

查看字符串长度 length()方法 返回字符串对象包含的字符数

连接字符串 concat() / "xxx" + "yyy" => "xxxyyy" 连接两个字符串

创建格式化字符串 printf() / format() 输出格式化数字

Integer类 

int 的包装类 在对象中包装了一个基本类型int的值  

Integer类提供了多个方法 能在int类型和String类型之间相互转换、处理int类型时非常有用的其他一些常量和方法

Integer类有2个构造方法

Integer类包含4个常量——

MAX_VALUE:值为2*31-1的常量 表示int类型能够表示的最大值

MIN_VALUE:值为-2*31的常量 表示int类型能够表示的最小值

SIZE:用来以二进制补码形式表示int值的比特位数

TYPE:表示基本类型int的Class实例

接口Interface

Java语言中是一个抽象类型 抽象方法的集合 通常以interface来声明 一个类通过继承接口的方式 从而继承接口的抽象方法

接口无法被实例化 但可以被实现 一个实现接口的类 必须实现接口内所描述的所有方法 否则就必须声明为抽象类

抽象类 abstract class

面向对象的概念中 所有对象都是通过类来描绘的 若一个类中没有包含足够的信息来描绘一个具体的对象 那么这样的类称为抽象类 用abstract关键字来修饰

抽象类不能被实例化 即不能用new关键字创建对象

接口和抽象方法的区别——

1、抽象类可以有构造方法 接口中不能有构造方法

2、抽象类中可以有普通成员变量 接口中没有普通成员变量

3、抽象类中可以包含非抽象的普通方法 接口中的所有方法必须都是抽象的 不能有非抽象的普通方法

4、抽象类中的抽象方法的访问类型可以是public、protected 接口中的抽象方法只能是public类型 且默认为public abstract类型

5、抽象类中可以包含静态方法 接口中不能包含静态方法

6、抽象类和接口中都可以包含静态成员变量 抽象类中的静态成员变量的访问类型可以任意 接口中定义的变量只能是public static final 且默认为public static final类型

7、一个类可以实现多个借口 但只能继承一个抽象类

集合框架 Collection/Map

集合框架是一个用来代表和操纵集合的统一架构 位于java.util包中 所有集合框架都包含——

接口 代表集合的抽象数据类型 如Collection、List、Set、Map等 定义多个接口是为了以不同的方式操作集合对象

实现(类) 集合接口的具体实现 从本质上讲 实现类是可重复使用的数据结构 如ArrayList、LinkedList、HashSet、HashMap

算法 实现集合接口的对象里的方法执行的一些有用的计算 如 搜索、排序 

这些算法被称为多态 因为相同的方法可以在相似的接口上有不同的实现

Java集合框架主要包含两种类型的容器 一种是集合Collection——存储一个元素集合 

                                                                另一种是图Map——存储键/值对映射

Collection接口 接口的接口 含3种子类型 List、Set、Queue 接口 再下面是一些抽象类 最后是具体实现类 常用的具体实现类有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等

Map接口 存储的是键/值对 

Stream流 File文件 IO

Stream流 可以理解为一个数据的序列 输入流表示从一个源读取数据 输出流表示向一个目标写数据

File文件 以抽象的方式代表文件名和目录路径名 主要用于文件和目录的创建、文件的查找和文件的删除等 

IO流   

 Java多线程编程

Java给多线程编程提供了内置的支持 一条线程指的是进程中一个单一顺序的控制流 一个进程中可以并发多个线程 每条线程并行执行不同的任务

多线程是多任务的一种特别的形式 多线程使用了更小的资源开销

线程 一个动态执行的过程 有一个从产生到死亡的过程

进程 一个进程包括由操作系统分配的内存空间 包含一个或多个线程

一个线程不能独立存在 它必须是进程中的一部分 一个进程一直运行 直到所有的非守护线程都结束运行后才能结束

多线程能满足程序员编写高效率的程序来达到充分利用CPU的目的

一个线程完整的生命周期——

新建状态 使用new关键字和Thread类或其子类建立一个线程对象后 该线程对象处于新建状态 且保持这个状态直到程序start()此线程

就绪状态 线程对象调用了start()方法后 线程进入就绪状态 就绪状态的线程处于就绪队列中 等待JVM里线程调度器的调度

运行状态 若就绪状态的线程获取CPU资源 可执行run() 此时线程处于运行状态 处于运行状态的线程最为复杂 可以变成阻塞状态、就绪状态和死亡状态

阻塞状态 一个线程执行了sleep(睡眠) suspend(挂起)等方法 失去所占用资源之后

该线程从运行状态进入阻塞状态 睡眠时间已到或获得设备资源后可以重新进入就绪状态 

        等待阻塞:运行状态中的线程执行wait()方法 使线程进入到等待阻塞状态

        同步阻塞:线程在获取synchronized同步锁失败(同步锁被其他线程占用)

        其他阻塞:通过调用线程的sleep()或join()发出I/O请求 线程进入到阻塞状态 sleep()超时 join()等待线程终止或超时 或I/O处理完毕 线程重新转入就绪状态

死亡状态 一个运行状态的线程完成任务或其他终止条件发生时 该线程就切换到终止状态

创建线程的3个方法——

1、通过实现Runnable接口

2、通过继承Thread类

3、通过Callable和Future创建线程

泛型

泛型即“参数化类型”  ---->将类型由原来的具体的类型参数化

泛型的类型参数只能是类类型 不能是简单类型

不能对确切的泛型类型使用instanceof操作

Java中的泛型只在编译阶段有效 编译过程中 正确检验泛型结果后 会将泛型的相关信息擦除 

泛型有三种使用方式 泛型类、泛型接口、泛型方法

泛型类型用于类的定义中 称为泛型类 通过泛型可以完成对一组类的操作对外开放相同的接口 最典型的就是各种容器类 如:List、Set、Map

泛型接口 与泛型类的定义及使用基本相同 常被用在各种类的生产器中

泛型方法 在调用方法的时候指明泛型的具体类型

反射

反射就是在运行状态中 对于任意一个类 都能够知道这个类的所有属性和方法 对于任意一个对象 都能够调用它的任意方法和属性 并且能够改变它的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值