java相关知识点(一)

1.什么是面向对象编程

    以对象为基本单位的程序开发,通过对象间的彼此协同,相互调用,完成程序间的构建。

2.面向对象的三大特性

 1. 封装  私有的成员变量   private   同时提供get/set方法
 2. 继承  父子关系   子类可以继承父类的相关的非私有的属性和方法   
 					子类也可以根据自己的需求来覆盖父类的相关的方法子
 		  好处:绝不是复用父类的功能,继承真正的好处是多态,它为多态进行服务
 4. 多态    
 	1).父类引用指向子类对象
 	2).调用时只能调用父类声明的方法
 	3).运行时会运行子类覆盖的方法

3.集合

 1. 体系结构
      Collection
      Map   ==>HashMap
      Set     ==>HashSet   SoredSet(接口) TreeSet
      List    ==>LinkedList  ArrayList
 2.  List集合   有序  可重复
 	  Set集合   无序    不可重复
 3.  LinkedList 和 ArrayList 的区别
 		链表			数组
 		增删快			查询快
 4.  ArrayList 的底层数组
 	    Onject[] obj = new Object[10];  初始化长度为10(JDK1.7)
 	    String的底层为char的数组
 5.  Set  为不可重复   去重的操作
 	去重的依据取决于用的实现类
 		1.HashSet
	 	    HashCode    int 类型的数字   跟引用的默认格式有关
	 	    					引用的默认格式:类全限定名@hashCode
	 	    Equals  
	 	2.TreeSet     compareTo方法
 6.HashSet 与 HashMap 的关系?
 	HashSet 的底层是由 HashMap 实现
 7.ArrayList 是不是线程安全的
 	线程安全:如果多个线程同时访问一个对象,如果存在问题则不是线程安全的对象
 	线程不安全的可以通过方法改成线程安全的:
 		Collections.synchronizedList();
 		Collections.synchronizedMap();
 		Collections.synchronizedSet();
 8.Collection 与 Collections 的区别?
 	Collection 集合中定义的是一个Set List 的父接口
 	Collections 是sun公司或oracle公司 定义的一个工具类  为集合的访问和操作
 9.(百度)CurrentHashMap 的底层实现
 	HashMap 在JDK1.8的实现

4.接口

 1. 接口与抽象类的区别
 	1).抽象类中可以有实现的方法   接口没有
 	2).接口中的变量都是公开的静态的方法  方法都是公开的
 		抽象类中可以有私有方法,也可以有私有的属性
    3).接口中没有构造方法,抽象类中有构造方法
    4).接口多继承,抽象类单继承
 2. 接口的作用
 	1).用来屏蔽底层实现的差异,提高代码的维护性
 	2).接口的契约型(Servlet中实现的service的方法是tomcat来调用的)完成接口回调

5.异常

 1. 分类:CheckException 已检查异常 Exception的子类  必须处理,否则编译不通过
	RuntimeException 运行时异常 RuntimeException及其子类  可以不处理
 2. 异常处理
	1).try catch
	2).throws
 3. 实战中的异常处理
	1).DAO Service 抛出的 throws
	2).Controller try{}catch(Exception e) 跳转到错误页面  显示错误信息

6.IO

1. 输入流、输出流
   字符流、字节流
   节点流、过滤流(包装流)
2. 字符流  操作文本  String
   .txt   xml   网路协议(http协议)传输的数据
3. 字符集  GBK UTF-8(中文)  ISO-8859-1(tomcat 西欧)
   乱码问题:编解码的字符集不一致(web)
4. IO代码片段  字节流
5. FileUtils 工具类(Struts2中的文件上传下载使用)

7.线程

1.线程的开发方式
	a.继承Thread
	b.实现Runnable接口(常用)
		why 常用?
			Java为单继承的,为了防止还有有可能要继承别的类,所以不用继承的方式
			Runnable接口的方式,可以做到 把线程的资源与代码分离
2.线程安全
	如果一个对象 可以被多线程访问,并且没有多线程访问的问题,就可以认为线程是安全的。
	什么样的对象的线程是安全的?
		a.重量级的资源 (工厂)
		b.如果一个对象没有成员变量,那么这个对象一定是线程安全的
		c.如果一个对象有成员变量,且成员变量是线程安全的,那么它也是线程安全的
		d.如果加入synchronized 那么它也是线程安全的
	线程不安全的: ArrayList  HashSet  HashMap
		用Collections.synchronizedXXX()可以解决
3. 如果出现多线程访问的问题,最基本的解决方式
	synchronized、Lock
	a.方法上  用的锁对象是当前this的
	b.代码块的  用的锁对象 可以指定 Object lock = new Object();
4. 线程通信 wait ()     notify()  解决典型的生产者消费者的问题

8.反射

1. 类加载器
	a. Bootstrap 类加载器  加载的是C或C++相关的代码
	b. ext 加载器  加载jdk的 jre\lib\ext
	c. app 类加载器    加载应用相关类+jar包
2. 反射的基本编码
	Class.forName()     object.getClass()    Connection.class
	//获取类对象
	Class clazz = Class.forName(“全限定名”);
	//获取类的对象
	Object object = clazz.newInstance();
	//获取类的属性
	Field[] de = clazz.getDeclaredFidlds();
	//获取类的方法
	Method[] methods = clazz.getDeclaredMethods();
3.如何打破封装  直接操作  私有的属性和方法
	Field name = clazz.getDeclaredField("属性名”);
	//可以操作私有属性
	name.setAccessible();     //打破封装
4 打破单例的限制
	可以通过反射  在一个类的外部 创建构造函数私有的对象 
5. 反射的效率低
6. 反射创建一个对象 ,需不需要代用这个对象的狗凹函数?
	反射创建对象,一定调用构造函数  默认情况下  调用无参的构造方法

猜你喜欢

转载自blog.csdn.net/qq_41047055/article/details/84239405