1.关于多态编译运行的时候看什么:
class Fu {
int num = 4;
void show() {
System.out.println("Fu show num");
}
}
class Zi extends Fu {
int num = 5;
void show() {
System.out.println("Zi show num");
}
}
class Demo {
public static void main(String[] args) {
Fu f = new Zi();
f.num // 4
f.show(); //Zi show num
}
}
得出结论:
①.多态成员变量
当子父类中出现同名的成员变量时,多态调用该变量时:
编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。
运行时期:也是调用引用型变量所属的类中的成员变量。
简单记:编译和运行都参考等号的左边。编译运行看左边。
②.多态成员方法
编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。
运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。
简而言之:编译看左边,运行看右边。
2.关于构造方法
构造方法,如果没有明写构造方法,则默认会有无参构造方法,若出现构造方法,则系统默认的无参构造方法自动省略,如果有子类继承了父类,①.总体来说,子类构造方法第一行必须要super(参数...)(第一行是父类构造方法),若父类只有无参构造方法(默认的,或者是自己重新的),可以不写,省略,默认是存在的。②若父类含有无参构造,则子类可以不写构造方法(默认还是有无参构造方法的),若父类没有无参构造方法,则子类必须写构造方法(可含参数,也可不含参数),且第一行必须写super(参数)。
3.关于代码块的执行顺序:
public class Fu {
int num =10;
static{
System.out.println("开始执行父类静态代码块");
}
{
System.out.println("开始执行父类代码块");
}
public Fu(/*int x*/){
System.out.println("开始执行父类构造方法");
}
public Fu(int x,int y){
System.out.println("两个参数的父类构造方法");
}
public void show(){
{
int x=1;
System.out.println("父类局部代码块X:"+x);
}
int x =99;
System.out.println("父类局部代码块外x:"+x);
}
}
public class Zi extends Fu {
int num =5;
static{
System.out.println("子类静态代码块");
}
{
System.out.println("子类构造代码块");
}
public Zi(){
System.out.println("子类构造方法");
}
@Override
public void show() {
{
int x=1;
System.out.println("子类局部代码块X:"+x);
}
int x =99;
System.out.println("子类局部代码块外x:"+x);
}
}
public class CodeBlockTest {
public static void main(String[] args) {
Fu f = new Zi();
System.out.println(f.num);
}
}
输出结果:
开始执行父类静态代码块
子类静态代码块
开始执行父类代码块
开始执行父类构造方法
子类构造代码块
子类构造方法
10
得出结论:
执行顺序:静态代码块>构造代码块>构造方法>局部代码块
如果子类继承父类,则①先执行父类静态代码块②子类静态代码块③父类构造代码块④父类构造方法④子类构造代码块⑤子类构造方法。
3.关于String
字符串是常量,它的值在创建之后不能修改:原码如下,用final修饰不可修改
public final class String
implements java.io.Serializable, Comparable, CharSequence{}
https://www.cnblogs.com/zhangyinhua/p/7689974.html
https://blog.csdn.net/qq_34490018/article/details/82110578
4.关于数据结构:
堆栈,采用该结构的集合,对元素的存取有如下的特点:
先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。
栈的入口、出口的都是栈的顶端位置
压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。
弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。
队列,采用该结构的集合,对元素的存取有如下的特点:
数组,采用该结构的集合,对元素的存取有如下的特点:
先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,安检。排成一列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查。
队列的入口、出口各占一侧。例如,下图中的左侧为入口,右侧为出口。
查找元素快:通过索引,可以快速访问指定位置的元素
增删元素慢:
指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。如下图
指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应索引的位置,原数组中指定索引位置元素不复制到新数组中。如下图
链表,采用该结构的集合,对元素的存取有如下的特点:
多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人的左手,依次类推,这样多个人就连在一起了。
查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素
增删元素快:
增加元素:操作如左图,只需要修改连接下个元素的地址即可。
删除元素:操作如右图,只需要修改连接下个元素的地址即可。
哈希表结构(实际上是数组+链表)
①首先会根据存放类对象的hashCode值判断是否有相同的对象,若相同,判断equals方法,若还不相同,将该对象放在和已有类对象hashCode相同的链表上面,若没有相同hashCode对象,则放在下一个数组位置,若相同则重复,不能存放
5.关于集合
List集合:有索引,可以存放重复的元素,可以用for循环遍历
ArrayList:底层是数组,查询和遍历速度快,增删的时候需要重复创建数组速度较慢,线程不安全。
LinkedList:底层是链表,查询,遍历慢,增删速度快,线程不安全。
Vector:底层是数组,线程安全;
Set集合:没有索引,不可以方重复的元素(需要根据hashCode,和equals方法,判断元素是否重复),只能用迭代器和增强for循环遍历
HashSet:底层数据结构是哈希表相当于数组加链表,没有索引,无序,线程不安全,(要保证元素的唯一需要重写hashCode和equals方法),其实是一个HashMap;构造方法源码如下:
LinkedHashSet:底层是哈希表+链表,没有索引,有序,线程不安全
Map集合:
HashMap:
是Map集合的子集合
底层采用哈希表结构
HashMap集合中的key不能重复,通过重写hashCode() 与 equals()方法来保证键的唯一。
不能保证元素存与取的顺序完全一致,线程不安全,可以存放null键,null值
具体数据结构可以参考视频:https://pan.baidu.com/s/1Vs5sQN7IlD_XnbvMrNIq4Q
LinkedHashMap:
是HashMap集合的子集合
底层采用哈希表+链表结构
LinkedHashMap集合中的key不能重复,通过重写hashCode() 与 equals()方法来保证键的唯一。
HashTable基本和hashMap相同,区别,既不能方null键,又不能放null值,线程安全。
V put(K key, V value) 把指定的键与指定的值添加到Map集合中:对于put方法,当已经存入相同键的数据的时候,会覆盖,返回被覆盖的value,否则,没有存入相同键的数据的时候,返回null
6.关于可变参数:同一个方法中只能有一个可变参数,并且该可变参数只能放在方法参数的最后一个
//JDK1.5之后写法
public int add(int...arr){
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
return sum;
}
6.关于异常,以及try/catch块中各种复杂头疼的地方:请参阅:http://www.cnblogs.com/lulipro/p/7504267.html
7.关于分布式和集群的概念:
多台服务器跑的都是一套完整的代码,这就叫集群。
多台服务器合起来跑的才是一套完整代码,这就叫分布式。
未完待续........
基础知识可参考:https://blog.csdn.net/Frank_Adam/article/details/79487873,https://blog.csdn.net/qq_33824460/article/details/57943966该博客