1.所有程序都运行在内存上
2.八种基本数据类型:byte,short,int,long,float,double,char,boolean
3.堆是先进 先出,栈是后进先出
4.变量规范:变量名见名之意,驼峰命名法(首字母小写其余首字母大写),一般常量在定义时使用下划线
5.等于号左边会根据右边的对象创建相应对象的类型空间,量表示左边的空间
6.++,--,+=,-+,/,%,操作加一使用++,操作加1以上使用+=
7.引用数据类型操作一般使用的都是方法
-
equals和==的区别:
==是用来判断基本数据类型是否相等的,equals()分为object的equals(),和string的equals(),object里面的equals()方法里面就是一个==号,而string里面的equals是重写object之后 的equals()判断两个字符串的内容是否相同,方法底层是利用循环比较两个数组的每一个字符,都相同返回true,有一个不相同返回false;
9.&& || & |
一个的按位,两个的是逻辑,一般使用的都是逻辑
10.常量存储在静态常量池,恒等使用switch,><使用ifelse进行比较
11.循环执行完后,循环内的变量会被回收,数组长度是固定的,通过下标拿东西
12.类里面写的变量叫做属性,把相同功能的方法放在同一个类里
13.一个方法放一个功能,避免代码的耦合,方法是第一次解耦合,类是第二次解耦合
14.类和类之间想要共享需要创建对象,把属性和方法放到一个类里面,使用getter和setter进行访问叫做封装
15.包名+类名=完全限定名
16.抽象类有抽象方法,抽象方法必须在抽象类中,抽象类不能创建对象,抽象类中没有构造方法 继承抽象父类的子类必须重写父类的所有抽象方法
17.接口中所有的方法都叫全局抽象方法,接口中的所有变量叫全局静态常量
实现接口的类需要重写接口的所有抽象方法,抽象类一般规定内部(自己使用)的继承,接口一般规定外部(提供给前端)
父类引用存放一个子类对象,前提有继承或者实现关系
18.异常五个关键字
try catch finally throw throws
try里面写的是正常代码,当代码执行出现异常会被catch捕获,finally无论代码是否异常都会执行,throw是自定义异常,throws是抛出异常,让调用方法的地方去解决异常,(return情况下,finally也会继续执行,遇到return会先挂起,执行完finally里面的代码再去执行return,system.exit(0)不会执行finally)
-
object上帝类,字符串是不可修改的,发生修改会创建一个新的字符串,为了解决这个问题,使用stringbuffer去操作字符串,最后再转换成tostring
每个基本数据类都有对应的包装类
-
arraylist和hashmap的底层使用原理
arrayList是一种线性数据结构,它的底层是用数组实现的,相当于动态数组。与Java中的数组相比,它的容量能动态增长。 当创建一个数组的时候,就必须确定它的大小,系统会在内存中开辟一块连续的空间,用来保存数组,因此数组容量固定且无法动态改变。ArrayList在保留数组可以快速查找的优势的基础上,弥补了数组在创建后,要往数组添加元素的弊端快速查找:在物理内存上采用顺序存储结构,因此可根据索引快速的查找素。
arraylist的自动扩容内存,. 容量动态增长: 当数组容量不够用时,创建一个比原数组容量大的新数组,将数组中的元素“搬”到新数组,再将新的元素也放入新数组,最后将新数组赋给原数组即可。
HashMap底层是哈希表结构,结合数组结构和链表结构的优点,从而实现了查询和修改效率高,插入和删除效率也高的一种数据结构,1)map.put(k,v)实现原理
put()首先把键值对封装到node对象当中,利用键的hashcode()得出hash值,通过哈希算法将hash值转成对应的数组下标,下标位置如果没有元素,就把这个键值对放到这个位置上,如果下标位置上有链表,拿着键链表上的每一个节点进行equals比较,比较完一轮返回的都是false的话,会被添加到链表的末尾,如果有一个equals返回了true,节点的value会被覆盖掉.
get()先调用k的hashCode()方法得出哈希值,并通过哈希算法转换成数组的下标,通过数组鼠标定义到一个位置上,如果这个位置上什么都没有返回null,如果有,则拿着对应的键跟链表上的节点进行equals,如果所有equals都返回false,则get方法返回null;,如果其中一个节点的k和参数k比较返回true,get方法会返回这个要找的value;