对象放在哪个位置?
堆内存中
Car c =new Car();c变量存放的是什么?
存储的是对象在堆内存中的地址
成员变量(name,price)的数据放在哪里,存在于哪个位置?
对象中,存在于堆内存中String是什么?可以做什么?
字符串类型,可以定义字符串常量指向字符串对象String是不可变字符串的原因?
string变量每次的修改其实都是产生并指向了新的字符串对象 原来的字符串对象都是没有改变的,所有称为不可变字符串字符串对象的特点
通过new构造器创建的字符串对象,在堆内存中分开存储 双引号创建的字符串对象,在字符串常量池中存储同一个static关键字作用
static是静态的意思,可以修饰成员变量, 表示该成员变量只在内存中只存储一份,可以被共享和修改 同一个类中可以直接访问静态成员变量,类名可以省略 java底层自动加上了工具类
对于一些应用程序中多次需要用到的功能,可以将这些功能封装成静态方法,放在一个类中,这个类就是工具类 工具类的作用:一是方便调用,二是为了代码复用 建议将工具类的构造器私有,不让工具类对外产生对象枚举
枚举类都是继承了枚举类型:java.lang.Enum 枚举都是最终类,不可以被继承 构造器的构造器都是私有的,枚举对外不能创建 枚举类的第一行默认都是罗列枚举对象的名称的枚举做信息标志和分类
代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术.抽象类为什么不能创建对象
类有的成员(成员变量,方法,构造器)抽象类都具备 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类 一个类继承了抽象类必须重写完抽象类的全部抽象方法,否者这个类也必须定义成抽象类 不能使用abstract修饰变量,代码块,构造器final和abstract什么关系
互斥关系 abstract定义的抽象类作为模板让子类继承,final定义的类不能被继承 抽象方法定义通用功能让子类重写,final定义的方法子类不能重写模板方法模式
当系统中出现同一个功能多出在开发,而该功能大部分代码是一样的,只有其中部分可能不同的时候多态中成员访问特点
方法调用:编译看左边,运行看右边 变量调用:编译看左边,运行也看左边匿名内部类
作用:方便创建子类对象,最终目的为了简化代码编写
格式:
new Emplooy(){
方法
}
匿名内部类的特点
匿名内部类是一个没有名字的内部类 匿名内部类写出来就会产生一个匿名内部类的对象Object的equals方法的作用是什么?
默认是与另一个对象比较地址是否一样 让子类重写父类,以便比较两个子类对象的内容是否相同二分查找的实现步骤
定义变量记录左边和右边的位置 使用while循环控制查询(条件是左边位置<=右边位置) 循环内部获取中间元素索引 判断当前要找的元素如果大于中间元素,左边位置=中间索引+1 判断当前要找的元素如果小于中间元素,右边位置=中间索引-1 判断当前要找的元素如果等于中间元素,返回当前中间元素索引函数式接口
就是接口中只有一个方法,称为函数式接口 建议使用函数式接口标记@FunctionalInterfaceLambda表达式的基本作用?
简化函数式接口的匿名内部类的写法Lambda表达式有什么使用前提?
必须式接口的匿名内部类,接口中只能有一个抽象方法Lambda的好处?
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,它可以写出更简洁,更灵活的代码,作为一种更紧凑的代码风格,使java语言表达能力得到了提升Lambda表达式的省略写法
参数类型可以省略不写 如果只有一个参数,参数类型可以省略,同时()也可以省略 如果Lambda表达式的方法体代码只有一行.可以省略大括号不写,同时要省略分号 如果Lambda表达式的方法体代码只有一行.可以省略大括号不写.此时如果这行代码是return语句,必须省略return不写,同时也必须省略";"不写Collection集合特点
List系列集合:添加的元素是有序可重复有索引 ArrayList linkList:有序 可重复 有索引 set集合 添加的元素是无序 不重复 无索引 HsshSet 无序 不重复 无索引 linkedHashSet 有序 不重复 无索引 TreeSet:按照大小默认升序排序 不重复 无索引
数据结构概述
数据结构是计算机底层存储,组织数据的方式.是指数据相互之间是以什么方式排列在一起的. 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率常见的数据结构
栈 队列 数组 链表 二叉树 二叉查找树 平衡二叉树 红黑树
链表的特点
链表的元素是游离存储的,每个元素节点包含数据值和下一个元素的地址 链表查询慢,无论查询哪个数据都是从头开始 链表增删相对快
并发修改异常,哪些遍历存在问题?
迭代器遍历集合直接用集合删除元素的时候可能出现 增强for也会 迭代器遍历集合用迭代器自己的方法删除不会出现
泛型方法的核心思想
把出现泛型变量的地方全部替换成传输的真实数据类型
泛型方法的作用
方法中可以使用泛型接收一切实际类型的参数,方法更具有通用性
泛型接口的概述
使用了泛型定义的接口就是泛型接口
泛型接口的格式 修饰符 inteface 接口名称 <泛型变量>{}
示例: public interface Date {}
作用:泛型接口可以让实现类选择当前功能需要操作的数据类型.
泛型接口可以约束实现类,实现类可以在实现接口的时候传入自己操作的数据类型这样重写的方法都将是针对该类型的操作
泛型上下限
? extends Car :必须是Car或者其子类 泛型上限 ? super Car : 必须是Car或其父类 泛型下限
哈希表的组成
jdk8之前 数组+链表 JDK8之后 数组+链表+红黑树组成
哈希表的详细流程
创建一个默认长度16,默认加载因为0.75的数组,数组名为table 根据元素的哈希值跟数组的长度计算出应存入的位置 判断当前位置是否为null,如果是null直接存入,如果位置不为null,表示有元素,则调用equals方法比较属性值,如果一样,则不存,如果不一样,则存入数组 当数组存满16*0.75=12时,就自动扩容,每次扩容原先的两倍
TreeSet集合默认的规则
对于数值类型:Integer ,Double 官方默认按照大小进行升序排序 对于字符串类型:默认按照首字母的编号升序排序 对于自定义类型,TreeSet无法直接排序 想要TreeSet存储自定义类型,需要制定排序规则
自定义排序规则
让自定义的类实现Comparble接口重写里面的compareTo方法来定制比较规则 TreeSet集合有参数构造器,可以设置Comparator接口对应的比较器对象,来定制比较规则 浮点型建议Double.compare()比较
集合总结
如果希望元素可以重复,又有索引,索引查询要快?
用ArrayList集合,基于数组
如果希望元素可以重复,又有索引,增删首尾操作快?
用linkedList集合,基于链表的
如果希望增删改查都快,但是元素不重复,无序,无索引.
用HashSet,基于哈希表
如果希望增删改查都快,但是元素不重复,有序,无索引
用linkedHashSet集合,基于哈希表和双链表
如果要对对象进行排序
用TreeSet集合,基于红黑树
shift+f6一起改名字
遍历map集合的两种方式HashMap
HashMap的特点和底层原理
由键决定:无序,不重复,无索引.hashMap底层是哈希表结构的 依赖hashCode方法和equals方法保证键的唯一 如果键要存储的是自定义对象,.需要重写hashCode和equals方法 基于哈希表.增删改查的性能都较好
Stream流的常用API
filter() 用于对流中的数据进行过滤 limit() 获取前几个元素 skip 跳过前几个元素 distinct() 去除流中重复的元素.依赖(hashcode方法和equals方法) concat() 合并a和b两个流为一个流
日志级别
TRACE标签的level属性中设置日志级别



