1.JAVA数据类型
基本数据类型 各占多少内存 对应的包装类
引用类型
数据类型转换 小的转大的可以实现自动转换;大转小的需要强制转换;
String.valueof()强制转换
Integer.parseInt()
2.类(class)
属性 方法 成员变量
3.抽象类(abstract)
4.接口(interface)
5.抽象类和接口有什么相同点和不同点?
相同点, 都有抽象方法,都不能被实例化;也都可以非抽象方法(jdk1.8开始) 在接口中用default 关键字可以写非抽象方法;
不同点:接口中不能有属性和成员变量;只能有常量(static final 修饰的成员变量_),抽象类中可有属性和成员变量;接口中没有构造方法, 抽象类中有构造方法(不写的话默认有一个无参的构造方法) 抽象类中的构造方法为子类准备;
一个类能实现多个接口,只能继承一个抽象类;
6.什么情况下用接口什么情况下用抽象类?
由于抽象类中有属性的存在,继承抽象类也就继承了属性,继承抽象类相当于明确了一种身份,而接口中必须要实现抽象方法;也就是相当于表明了,子类子类能干什么,换句话说,明确一个类是什么的时候 用抽象类,明确一个类能干什么的时候用接口;
7.面向对象的三大特性:
封装---继承---多态;
8.怎么理解多态>?
多态是必须要建立在继承的基础之上的:
赋值多态 父类(引用)引用指向子类对象;(父类可以接受子类的对象)
传参多态 当参数类型是一个父类或者接口的时候,所有子类都可以进行传递
9.数组(array)
堆区中创建的一块连续的区域存放数据;可以是任意类型的数组;
冒泡排序,选择排序
10.集合:
ArrayList 底层动态数组可以实现动态添加 每次1.5倍;
HashSet 无序(和添加的顺序不同) 去重复
HashMap 映射(无序通过kay的自然排序)
11.ArrayList和LinkedList的区别>?
ArrayList 底层是数组 读速度快 尾部添加性能稍好 中间添加性能不如Linked
LinkedList 底层是链表 读速度不如Array 尾部添加性能稍差. 中间添加性能稍好
12.HashMap 和HashTable区别?
HashTable 是线程安全 HashMap 非线程安全 后者可以吧nul作为key,但是也只能有一个 ,前者的key中不能有null
13.String 字符串
底层 字符数组 存储位置 字符串常量池(不可变)
StringBuffer 和StringBuilder 动态字符串;
14.String StringBuffer StringBuilder 区别?
String 不可改变,如果拼接,每次都会生成新的字符串 耗费内存;
StringBuffer 动态字符串 线程安全
StringBuilder 动态字符串 非线程安全
15.Date 日期
16.Arrays 数组的工具类
17. equals 和==的区别?
==判断的是变量()或者对象指向的引用地址
equals 判断 判断HashCode计算出的值(如果两个字符串的值相同,那么最后返回的结果为true)
18.String a="abc" String a=new String("abc")有什么区别?
String a="abc"定义一个变量a 将一个变量a指向到字符串常量池中保存字符串abc的位置上
String a= new String("abc");定义一个变量a 堆区中创建一个String 对象,该对象保存的值,指向到字符串常量池中的abc的位置, 变量a指向到堆区中的String对象;
19.IO
File
FileInputStream
FileOutputStream
Reader
Wrider
inputStreamReader
BufferedReader
PrintStream(按行输出)
20.包装类的意义?
在类中定义属性使用包装类;解决基本数据类型有默认值的问题,
泛型中不能使用基本类型, 需要使用包装类代替
包装类如果比较值的话需要,拆箱
21.多线程
重写run();
通过start()启动线程;
sleep()休眠; 放弃对cpu的抢占;
synchronized 锁 并行转穿行
wait()
notify()和notifyAll();
套接字Socket
io流的传输;
22.内存模型和JVM指令;
23.控制台输入和输入
system.out 和system.in
24.脏读, 在一个输出的时候突然另一条进程打断导致读取了不完整的信息
解决办法可以加锁;
马士兵 java se复习
1.jdk 的安装
2 配置环境变量
a, path : .;%JAVA_HOME%\bin;
b, JAVA_HOME : JDK的安装目录;
c, classpath
3.jdk 和jre 和jvm的区别
jdk 开发工具包
jre java运行环境
jvm 虚拟机
JAVA 程序运行过程:(即是编译也是解释型语言)
1编译:吧java源文件编译成class字节码文件
2.运行:运行 class文件
4.变量:
1.局部变量:--定义在方法或者语句块内;从属于方法后者语句块,执行完之后消失
使用之前必须手动初始化
2.成员变量(实例变量 field) 定义在类里面 方法外面 没有用static 修饰的 从属于对象;
如果没有手动初始化成员变量,系统会自动舒适化,初始化的规则如下:
数字 0 布尔 :false char :\u0000 引用类型 :null;
3.静态变量:--类变量--定义在类里面,方法外面,用static修饰 从属于类 初始化规则同成员变量
5.基本数据类型:
byte--1个字节(-128----127) short---2个字节( ) int(4个字节 正负大约21亿) long float double char(2个字节) boolean
引用类型(引用了堆中的一个地址) 类 数组 对象 接口
类型的转换
表达式:
1.类型的自动提升:
如果有long 结果就是long
如果有double 结果就是double;
2.强制类型的转换:
运算符:
1.算数运算符
2.关系运算符
常见错误写法: 1<a<3;
3.逻辑运算符:
&& || ! & |
4.<<(左移一位相当于乘以2,) >>>(右移动一位相当于除以2);
5.扩展运算符:
+= *= /=
6.三目运算符:
(布尔表达式)? a : b;
6.控制语句
1.顺序结构
2.选择结构
if
ifelse
if else if esle
switch 多值选择器 break 跳出
3.循环结构
增强for
while
for
do while
break 强制终止整个循环
continue 结果本次循环 继续下一次;
7.标识符: 给类/方法/变量起名字
1.以字母 下划线 $ 开头
2.其余部分可以是:字母 数字 下划线 数字等;
3.不能为关键字;
8.面向对象基础:
1.对象的进化史;
a---基本数据类型阶段 数据少 无数据管理时代
b---数组 数据多了 将同类型数据放到一起 弱管理
c---结构体 数据多了,复杂了, 将不同类型的数据放到一起 强管理
d---对象 数据多了 类型复杂了 行为复杂了,
2.对象和类
类是抽象的 相当于一个末班, 对象是具体的,是类的实例化.
3.定义类:
class 类名{ //类名要规范
//属性
private 数据类型 属性名 //建议增加相应的get set 方法
//方法
//构造方法
1.方法名必须和类名保持一致
2.无返回类别
3.通过new 来调用
4.无参构造器的问题
a---如果没有手动定义构构造器 系统会自动为我们添加一个无参的
b---如果我们定义了自己的构造器,系统就不会为我们添加无参的
5.构造方法的第一句总是super 调用直接父类的构造方法;
//作用
new对象和初始化属性
}
4.重载 OverLoad
同一个类种 同一个方法名, 参数的类型或者数量不同;
返回值不同 不构成重载;
形参名称不同,不构成重载;
this:
普通方法中:调用本方法的对象
构造方法中: 正要初始化的对象
还可以用来 调用其他的构造方法
super:
static:
用他修饰的变量或者方法 就变成了静态变量或者类变量,从属于类,通过类名既可以调用, 实际存储在方法区中;
package:
必须位于非注释行的第一句
包名:域名写到这
import :
引入外部的类;
final:
修饰变量 :常量;
修饰方法: 不能被重写;
修饰类: 不能被继承;
5.面向对象的三大特性
封装
通过 private / default / pretected/ public 关键字实现属性或者方法的封装
实现 高内聚 低耦合;
继承:
通过extends 两个好处:
代码的重用
通过继承实现对现实世界更加准确的建模
多态:
三个必要条件:
继承 方法的重写 父类引用指向子类对象
动态绑定 静态绑定
抽象类:
包含抽象方法的类,一定是抽象类 抽象方法必须被子类重写
抽象类不能被new
抽象类可以包含 普通方法, 成员变量;
接口:
用interface定义接口
类实现接口:implements 可以实现多个接口
接口可以实现多继承
接口定义了一组规范,实现了现实世界中这样的逻辑,如果你是....则 必须能......
内存机制:
栈:
存放局部变量
不可以被多个线程共享
空间连续,速度快
堆:
存放独享
可以被多个线程共享
空间不连续 速度慢,但是灵活;
方法区:
存放类的信息 代码,静态变量,字符串常量等;
可以被多个线程共享
空间不连续 速度慢,但是灵活
垃圾回收器(GC Garbage Collection)
1.程序员不能调用垃圾回收器 ., 但是可以通过system.gc() 建议回收
2.fianllize:一般需要去调用