5.20 总结

1.构造方法的特点: (系统默认为无参构造方法)

  1>方法名与类名相同

  2>无返回值类型

  3>可以指定参数

  4>可以没有构造方法,也可以有多个构造方法,构成重载关系

  5>定义有参构造方法,则默认的无参构造方法将自动屏蔽

  6>不能手动调用,在创建类实例的时候,自动调用构造方法

,2.抽象类与抽象方法的特点:

  1.抽象类会有自己的属性,可以重写,多指单继承, 继承速度快.

  2.抽象方法: 1.抽象方法没有体 eg:public abstract void print()

        2.抽象方法必须在抽象类中

        3.抽象方法必须在子类中被实现,除非子类是抽象  

  抽象类可以有多个抽象方法 

  非抽象子类必须重写父类的所有抽象方法

3.方法重载与方法重写以及特点

  1.方法重载: 发生在一个类中

    特点: 1.方法名相同

       2.参数数据类型或参数个数不同

       3.与返回值与访问修饰符无关

  2.方法重写:子类重写父类方法

     特点:1.方法名相同

        2.参数列表相同

        3.返回值类型相同或者是其子类

        4.访问权限不能严于父类

4.使用继承有什么特点?继承的优点?(使用super关键字)

  特点: 1.只支持单继承,即一个子类只允许有一个父类

    2.子类可以拥有父类的属性和方法

    3.子类可以拥有自己的属性与方法

    4.子类可以重写覆盖父类的方法

    5.可以声明父类,创建子类

  优点: 1.代码量减少 2.有利于代码的优化 3.提高程序的可维护性.

5.多态的特点?有什么优点?

  多态: 同一个引用类型,使用不同的实例而执行不同操作

  特点:父类引用指向子类对象

  优点:(减少类中代码量,提高代码的可扩展性和可维护性)

     1.可替换性:多态对已经存在的代码具有可替代性。图形类可以对应圆类,对其他任何                           圆形几何体,如圆环,也同样工作。

     2.可扩充性 :多态对代码增加可扩充性。增加新的子类不影响已经存在类的多态性、继承                         性,以及其他特性的运行。

     3.借口性 :多态是超类通过方法签名,向子类提供一个公共的接口,由子类来完善或者覆                         盖 她而实现。

     4.维护性:有利于后期代码的维护。

6.多态的实现方式是什么?

  1.使用父类作为方法形参实现多态

  2.使用父类作为方法返回值实现多态

7.如何编写接口?(接口一般多用于实现)

  1.修饰符:用于指定接口的访问权限, public

  2.接口名:必选参数,必须是合法的java标识符.一般情况下,要求首字母大写

  3.extend:父接口名列表:可选参数,用于指定要定义的接口继承于哪个父接口。当使用extends关键字时,父接口名为必选参数。父接口可以存在多个,用逗号隔开。

  4.方法:接口中的方法只是定义而没有实现.

8.接口的作用是什么?

  接口的特性: 1.接口不可以被实例化

        2.实现类必须实现接口的所有方法

        3.实现类可以实现多个接口

        4.接口中的变量都是静态常量

9.接口和抽象类有什么异同?  

  相同 : 1.二者都不能实例化

      2.都是引用类型

      3.可以包含抽象方法

      4.用来定义规则

 不同: 1.接口用于多实现(implements),抽象类用于单继承(extends)

   2.抽象类会有自己的属性,可以重写; 接口不可重写

  3.抽象类的继承速度快

  4.抽象类中可以有属性 方法(抽象方法 普通方法)
    接口都是抽象方法 实现=静态常量
    public void int();

10.什么是异常,你是如何理解的?

  异常:是指在程序的运行过程中缩放法的不正常的事件,他会会中断正在运行的程序

11.如何处理异常,异常的关键字是什么?

  java的异常处理是通过五个关键字来实现的:

    try: 执行可能产生异常的代码

    catch:捕获异常

    finally:无论是否发生异常,代码总能执行

    throw(声明异常) 声明方法可能要抛出各种异常   

    throws(抛出异常) 手动抛出异常

12.常见的异常种类有哪些?
 

   InputMismathcExcepition           异常类型
   Exception                   异常层次结构的父类
   ArithmeticException              算术错误情形,如以零作除数
   ArrayIndexOutOfBoundsException         数组下标越界
   NullPointerException             尝试访问 null 对象成员
   ClassNotFoundException           不能加载所需的类
   IllegalArgumentException           方法接收到非法参数
   ClassCastException               对象强制类型转换出错
   NumberFormatException            数字格式转换异常,如把"abc"转换成数字

13.如何使用log4j记录日志?

  1.在项目中加入log4j的JAR文件

  2.创建log4j.properties 

  3.配置日志信息

  4.使用log4j记录日志信息

14.常见的集合有哪些?

  1.collection 接口存储一组不唯一,无序的对象

  2.list接口存储一组不唯一,有序(插入顺序)的对象

  3.set接口存储一组唯一,无序的对象

  4.map接口存储一组键值对对象,提供key到value的映射

15.list,set,map各有什么异同?

  相同:1. 都是可以使用collection.sort()排序的

     2.list与set都是接口,他们各自都有自己的实现类,有无顺序的实现类,也有有顺序的实线类

  不同: 1. list包括arraylist , linkedlist , vector ; 其中vector线程同步 ,linkedlist插删,基本上list都是基于 array的;里边的元素都可以重复

     2.set: hashset,treeset; set不可重复,set基于map的,treeset是排序的

     3.list和set是继承collection接口的,,map不是

     4.map: hashtable,hashmap,treemap;hashtable是线程同步的,map的key不可以,,valu可以

16.和数组类型采用相同结构的是哪个集合?

   java.util.ArrayList和java.util.Vector.都是采用数组形式来实现的。

17.什么是foreach循环?

  foreach是增强for循环

  书写格式: for (元素类型  元素名称  :  遍历数组(集合)(或者能进行迭代的)){

          语句

        }

  区别:1.foreach适用于只是进行集合或数组遍历,for则在较复杂的循环中效更高

     2.foreach不能对数组或集合进行修改(添加删除操作),如果想要修改就要用for循环

18.线程与进程的区别?

  程是资源分配的最小单位,线程是CPU调度的最小单位

  线程在进程下进行 

  一个线程包括多个进程

  不同进程间数据很难共享

  同一进程下不同线程间数据容易共享

  进程要比线程消耗更多的机算计资源

  进程间不会互相影响,一个线程挂掉将导致整个进程挂掉

  进程可以拓展到多机,进程最多适合考核

  进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存

  进程使用的内存地址可以限定使用量

19.实现线程有哪几种方法?

  1.继承Thread类创建线程
  2.实现Runnable接口创建线程
  3.实现Callable接口通过FutureTask包装器来创建Thread线程
  4.使用ExecutorService、Callable、Future实现有返回结果的线程

20.线程的生命周期是什么?

  1.创建状态:: 线程对象被创建后,就进入了新建状态。例如,Thread thread = new Thread()。

   2.就绪状态:也被称为“可执行状态”。线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程。例如,thread.start()。处于就绪状态的线程,随时可能被CPU调度执行。

   3.运行状态:线程获取CPU权限进行执行。需要注意的是,线程只能从就绪状态进入到运行状态

   4.阻塞状态: 阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行。直到线程进入就绪状态,才有机会转到运行状态。

   5.死亡状态:线程执行完了或者因异常退出了run()方法,该线程结束生命周期。

21.简单解释一下线程休眠,线程强制执行,行程礼让。以及他们的实现方法 

  1、休眠可以使一个线程暂缓处理,休眠时间一到程序就会唤醒继续执行,在Thread类中定义的休眠方法如下:
    休眠方法一:public static void sleep(long millis) throws InterruptedException;
    休眠方法二:public static void sleep(long millis,int nanos) throws InterruptedException;
  2.线程中断指的是别人可以打断自己某个线程的休眠,所有正在执行的线程都是被中断的,中断线程必须进行异常的处理。在Thread类中提供有这种中断执行的处理方法:
  判断线程是否被中断:public boolean isInterrupted();
    中断线程执行:public void interrupt();
  中断处理操作分析:
  3.线程强制运行指的是当满足某些于某些条件之后,某一个线程对象可以一直独占资源,一直到该线程的程序执行结束。
  4.线程礼让指的是先将资源让出去让别的线程先执行,但每次礼让执行的时候只礼让一次。使用Thread类中的yield()方法
  礼让:public static void yield();
  5.线程的优先级越高越有可能先执行(越有可能先抢占资源)。处理方法:
    设置优先级:public final void setPriority(int newPriority);
    获取优先级:public final int getPriority();
    最高优先级:public static final int MAX_PRIORITY = 10;
    中等优先级:public static final int NORM_PRIORITY = 5;
    最低优先级:public static final int MIN_PRIORITY = 1;

22.什么情况下需要线程同步?

  当我们有多个线程要同时访问一个变量或对象时,如果这些线程中既有读又有写操作时,就会导致变量值或对象的状态出现混乱,从而导致程序异常。这就需要线程同步

23.什么是流?流的常见种类有哪些?使用流的过程中需要注意哪些问题?
 

  流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinking in Java>
种类
  按功能不同分为 节点流、处理流
  按处理数据单位不同分为 字节流、字符流
  按数据流的方向分为 输入流、输出流
  注意:字节流
    1:
     Outputstream 当流中的文件不存在时,系统默认会创建一个,
     Inputstream 当流中的文件不存在时,系统不会为其创建,直接抛出NotFileException异常.
    2:
      字节流直接操作字节,可以读写任意文本,视频,二进制文件,常应用于文件复制.但是他不可操作目录.
    3:
      Outputstream,Inputstream,
      字节流的父类,为抽象类
      writer,reader  
      字符流的父类,为抽象类.
   4:
    用字节流写中文,存进文本中也是乱码,除非使用getBytes(),如果用了getBytes,当你往出取数据的时候
    就乱码了,所以建议汉子还是用字符流.
    eg: FileOutputstream out = new FileOutputstream("a.txt");
      out.write(97);
      //文本输出a ,这时因为当java虚拟机把数据分解为二进制写入文件中,
    文件用的utf-8编码表将他转换为a,[其实理解为文本用utf-8解码的.]
    out.write('你');
    //这时候虽然编码不报错,但是写进去的数据乱码.
    out.write("你好世界".getBytes());
    //编码不报错,存进取也不乱码,唯一的缺点就是用输入流读出来的数据时乱码的.
    用字节流读数据时,读出来的数据基本上是字节码.
   5:
    字节流的追加,构造方法
    public FileOutputstream(String file , boolean append);
    当 append 为 true 时就是在文件后面追加数据,否则就是覆盖数据.
   6: 字符流可以根据平台上的默认字符集,将编码格式转换.
   7: Properties 属性集 :
   8: 字符流有一个默认的缓冲流,其大小为2kb,
   9: 输出流后面没有设置追加的话,是会把原有的数据覆盖掉.
   10: 其实字节流 和 字符流 底层都是二进制,只不过是字符流可以进行自动编码.而字节需要.

24.线程同步

  同步就是协同步调,按预定的先后次序进行运行。

25。脏读,幻读,不可重复读

    >脏读:所谓的脏读,其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。
    >幻读,是指事务A读取与搜索条件相匹配的若干行。事务B以插入或删除行等方式来修改事务A的结果集,然后再提交。
    >不可重复读:事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。

27.hashmap和hashtable?

    HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。

    Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。  
    Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。
    Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。

猜你喜欢

转载自www.cnblogs.com/Cherry-balls/p/12923934.html
今日推荐