①封装:指属性私有化,别的类或者方法要访问属性必须通过getter和setter方法,这样可以隐藏具体属性和实现细节,增强安全性
②继承:指将多个相同属性和方法提取出来作为一个父类,一个类只能继承一个父类,且只能继承非private的属性和方法,可以提高代码的复用性
③多态:所谓多态就是指程序中定义的引用变量引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定
值类型(int,char,long,boolean等)中都是用==判断相等性。
对象引用中,判断引用所指的对象是否是同一个。而equals是Object中的方法,在Object实现中是使用来实现的,因此也是判断引用所指对象是否同一个,但是子类可以根据自己的需要重写该方法来实现各自的需要。
public boolean equals(Object obj) { return (this == obj); }
①final
②finally是在异常处理时提供 finally 块来执行任何清除操作
③finalize是个方法名,在垃圾收集器删除对象之前对这个对象调用
①重写
②重载
//1.加载JDBC驱动程序 Class.forName("com.mysql.jdbc.Driver"); //反射 //2.建立连接(书写形式:协议:子协议:数据源标识) Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/数据库名称","用户名称","密码"); //3.创建一个Statement(对数据库发出请求) //执行静态SQL语句。通常通过Statement实例实现 //执行动态SQL语句。通常通过PreparedStatement实例实现 //执行数据库存储过程。通常通过CallableStatement实例实现 String sql="select id,username,pwd from t_user where id>?"; PrepareStatement ps=conn.prepareStatement(sql); ps.setObject(1, 2); //第一个"问号",传入2. -->把id大于2的记录都取出来 rs=ps.executeQuery(); //4.返回查询结果 ResultSet rs=ps.executeQuery(); //执行查询请求,并返回"结果集" //5.关闭链接 if(rs!=null){ //RsultSet rs rs.close(); } if(ps!=null){ //PreparedStatement ps ps.close(); } if(conn!=null){ //connection conn conn.close(); }
MVC是模型(model)-视图(view)-控制器(controller)的缩写,是一个架构模式,它分离了表现与交互。
① List,Set都是继承自Collection接口,但List元素有放入顺序,可重复;Set元素无放入顺序,重复会被覆盖,因此List支持for循环,也就是 通过下标来遍历,也可以用迭代器,但是Set只能用迭代,因为他无序,无法用下标来取得 想要的值
② Set检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变;List和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引 起其他元素位置改变。
List是对象集合,允许对象重复。 Map是键值对的集合,不允许key重复。
Arraylist
优点:ArrayList是实现了基于动态数组的数据结构,因为地址连续,一旦数据存储好了,查询操作效率会比较高(在内存里是连着放的)。
缺点:因为地址连续, ArrayList要移动数据,所以插入和删除操作效率比较低。
LinkedList
优点:LinkedList基于链表的数据结构,地址是任意的,所以在开辟内存空间的时候不需要等 一个连续的地址,对于新增和删除操作add和remove,LinedList比较占优势。LinkedList 适 用于要头尾操作或插入指定位置的场景
缺点:因为LinkedList要移动指针,所以查询操作性能比较低。
适用场景分析
当需要对数据进行对此访问的情况下选用ArrayList,当需要对数据进行多次增加删除修改时 采用LinkedList。
set是线性结构,set中的值不能重复,hashset是set的hash实现,hashset中值不能重复是 用hashmap的key来实现的。
map是键值对映射,可以空键空值。HashMap是Map接口的hash实现,key的唯一性是通过 key值hash值的唯一来确定,value值是则是链表结构。
他们的共同点都是hash算法实现的唯一性,他们都不能持有基本类型,只能持有对象
HashTable里使用的是synchronized关键字,这其实是对对象加锁,锁住的都是对象整体, 当Hashtable的大小增加到一定的时候,性能会急剧下降,因为迭代时需要被锁定很长的时 间。ConcurrentHashMap引入了分割(Segment),把一 个大的Map拆分成N个小的HashTable,在put方法中,会根据hash(paramK.hashCode())来 决定具体存放进哪个Segment,如果查看Segment的put操作,我们会发现内部使用的同步 机制是基于lock操作的,这样就可以对Map的一部分(Segment)进行上锁,这样影响的只 是将要放入同一个Segment的元素的put操作,保证同步的时候,锁住的不是整个 Map(HashTable就是这么做的),相对于HashTable提高了多线程环境下的性能,因此 HashTable已经被淘汰了。
创建线程的三种方式的对比
采用实现Runnable、Callable接口的方式创见多线程时,优势是:线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。劣势是:编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。