java基础复习

  1. 强制类型转换为大类型的值除以小类型的变量取值范围,然后取模;

  2. 10/0 编译不报错,运行报错,10.0/0不报错,结果为infinity;

  3. 0.0/0结果为NaN;

  4. 取余运算: 整数取余运算,当右边的操作数为0时,运行时报错,浮点数取余时,右边的为0,结果为NaN;
    5.java.lang.Math类中提供方法帮助执行基本数学函数的运算;Math类的属性和方法都是静态的,并且Math类不可以创建对象;

  5. case语句:
    case (条件表达式){
    case 表达式: 所执行的代码序列;
    … } (条件表达式必须时基本类型的表达式或者枚举类型的)

  6. 数组是一组相同类型的便量或对象的集合;

  7. java中复合数据类型有两种,一种是数组,另一种的类和接口;
    9.java中使用new运算符法为数组分配内存空间;

  8. 在数组使用new运算符分配了内存空间之后,如果没有对元素进行赋值,系统会为数组覆默认初始值;

  9. 数组被申明成final时,意味着该数组的引用在初始化后,不能再修改,并不是其中的元素;

  10. 二分查找必须是按某种顺序有序的数据;
    13.Arrays.sort()是对原数组进行的排序,
    14.成员变量有时也称为实类便量;

  11. 方法和成员是属于对象的,用空应用调用时,编译不会报错,但运行时会报引用为空异常;

  12. 基本变量系统是不会为其分配初始值,运行时会报错;
    17.声明一个未初始化的变量是合法的,只要不使用这个变量即可;
    18.变长参数:数据类型 … 参数名;(一个方法中只能有一个变长参数,并且为最后一个,底层是通过数组实现的)

  13. 访问修饰符: 类前面什么都不写,表示是默认的,表示在这个包中都可以使用;

  14. 封装:隐藏类的属性和实现细节,仅仅对外公开访问接口;
    21.封装程度越高,其独立性就越高;
    22.static修饰的代码块表示静态代码块,当java虚拟机加载类时,就会执行该代码块;而构造函数是在类的实类化时才执行的;

  15. 包的作用:更好的组织类、减少类名的冲突、对包中的类起了一定的保护作用;

  16. java.lang包总是被默认引用;

  17. 类与类之间的关系是:用到了、拥有、继承;

  18. 所有的类直接或间接的继承自java.lang.Object类;

  19. 继承使用extends关键字;

  20. 成员变量的隐藏:当子类中拥有和父类中相同的变量时,直接调用该变量时,调用的是该子类中的变量;使用super.变量 调用父类中的变量;

  21. 父类的引用变量可以指向由其派生出的直接或间接子类的对象;

  22. 引用只能调用其所在的类具有的成员,不能调用子类特有的成员; (将子类对象赋值给父类对象的引用;)

  23. 类型的比较:不同类型之间的比较,其中一个类型必须是派生自另一个类的,否则编译会报错;

  24. 如果想将父类赋值给子类,必须进行强制的类型转换;

  25. 重写:子类中的方法名和参数列表与父类中的方法名和参数列表必须相同;(重写是基于继承的)

  26. 静态方法可以被继承但是不能被重写,当子类有一个和父类中完全相同的方法时,叫方法的覆盖 ;

  27. 隐藏是针对父类中的成员变量和静态方法而言;

  28. 方法的重载是是指在同一个类中,有两个或两个以上相同名称、不同参数序列的方法;

  29. 在方法的匹配中:若参数是基本类型,首先选择直接匹配的方式,如果没有,则将参数进行提升转换换后再进行匹配的方法;引用类型也是一样;会尽可能的找最兼容的该参数的方法;

  30. 用final修饰的类,其该类不能再分配子类;

  31. 用final修饰的方法,子类稚只能使用,而不能进行重写;

  32. 通常定义的的类,仅能使用公共的和默认的这两种访问控制符;
    第九章

  33. 接口一定是抽象的;

  34. 接口允许多继承;

  35. 接口中的成员变量隐含是public static final修饰的;如果不写,编译时会自动的为其加上的;必须为其赋值,并且不能是等到在类加载完毕之后;

  36. 接口中的方法修饰符只能是public 和 abstrct;隐式的为其加上,可以写也可以不写;

  37. 接口可以直接或间接的指向实现该接口中的所有类的对象;

  38. 子接口引用可以直接赋值给父接口引用,父接口引用赋值给子接口时要进行强制类型的转换;

  39. 一个接口可以继承自另一个接口;

  40. 类引用赋值给接口不需要进行转换,若将接口引用赋值给类引用,需要进行强制类型的转换;

  41. <引用>instanceof<类或接口类型>用于检查指定的对象是否为指定的类型;

  42. 将父类强制看成子类时,需要强制类型的转换;

  43. 构造器的级联调用;

  44. 如果没有在构造器中明确的调用父类的构造器,默认调用的是父类的无参构造器,若指定的调用父类的构造器,需要使用super(参数)进行调用,必须为第一行;

  45. 调用兄弟构造器(兄弟构造器是指重载的构造器)使用this(参数):

  46. 调用兄弟构造器,也必须写在构造器中的第一句,因此调用了兄弟构造器,就不能在显示的调用父类的构造器了;

  47. 单列模式:某个类在同一时刻只允许有一个对象;

  48. 所谓的封装类是指将基本类型的数据封装在对象中,通过方法进行创建或访问的类;

  49. 所有的封装类都提供了静态的valueOf(string)把给定的string转换成对应的封装类型;

  50. 字符串转换成基本数据类型的方法(都是封装类类的静态方法):封装类对象.pase基本类型(string);例如:int a = Integer.parseInt(“89”);

  51. 封装类转换成对应的简单类型:封装对象.简单类型Value(),(注意:简单类型的首字母应该是大写);

  52. Float类和Double类有一个特殊的方法isNaN();

  53. Object的equals()用来检测两个对象的内容是否相等(其实检测的是对象的引用是否为同一个);

  54. 在封装类中对equals、toString方法进行了重写:封装类对象.valueOf();(将封装在对象中的基本变量值转换成String类型)

  55. 自动打包、解包;(jdk版本必须为1.5以上才不会报错;) 注意:这里会报错;
    第十二章、异常的处理

  56. finally语句最多只有一个,也可以没有; (不管啥情况都会执行的代码块,只是方法中有return关键字;)

  57. try、catch以及fianlly块中间不能有其他的任何代码;

  58. catch和finally不能同时省略;,无catch时finally必须紧跟catch;

  59. Throwable是所有异常类的父类;

  60. 异常的抛出:某个方法可能会抛出异常时,在定义方法时在方法体中使用throws将其抛出(此时为隐形的抛出),调用该方法的方法(例如main方法)会去处理该异常,如果不处理,可以继续再抛出,最终如果不处理,程序就会报错;

  61. 重写的方法一定不能抛出新的异常或者比原方法的异常范围更广的异常;
    第十三章、字符串的应用

  62. 堆中存放的是创建的对象,而栈中存放的是方法调用过程中的局部变量或引用;

  63. 字符串对象:直接创建或者使用new关键字创建;

  64. 若想让字符串达到内容发生变化的效果,只能让其指向别的对象;

  65. 开发中没有必要使用new来创建对象,这样可以节省内存,提高比较的效率;

  66. java中创建一个新的对象要比修改一个已经存在的对象耗时的多;

  67. String内存机制:
    java在设计字符串对象时:堆中本来就是存储的是对象,但java在堆中又开启了一个小空间,叫字符串常量池,专门用来存储 String对象;
    1.使用简单类型创建:String s1 = “你好”;String s2 = “你好”;当使用简单类型时,先去字符串常量池中,查找有没有 相同内容的字符串对象,若有,直接让该引用指向即可;若没有,再在池中创建;

    1. 使用new创建时,先是在堆中创建一个字符串对象,再去常量池中查看有和该对象内容相同的对象没,若有,将两个对象联 系起来,若没有,再在常量池中创建一个对象,将两个联系起来;
  68. StringBuffer是线程安全的;

     	第十四章
    
  69. 继承自Object类的equals(),比较的是两个对象的内存地址是否一致;
    1.所有ordered的接口类都是属于列表家族的;

  70. 数组实现list,使用ArrayList类,该对象的默认初始容量是10,也可以自己设置;该对象对元素的访问快,增删慢;
    3.即可框架的类大多都在java.util包中;

  71. 集合框架中都存储的对象的引用;
    5.Vector和ArrayList差不多,只不过多线程是安全的;

  72. LinkedList和ArrayList差不多,是线程不安全的;

  73. 将数组转换陈List。Arrays.asList(数组对象);返回类型为List;

  74. ArrayList和Vector都可以指定初始容量大小,而LinkedList不可以指定大小;

  75. TreeSet也不可以指定初始大小;HasnSet、LinkedHashSet可以;

  76. 插入到sorted中元素必须由天然的顺序,若想将自己写的类的对象插入,需实现Comparable接口,并重写comparaTo方法;

  77. 实现了comparator接口的类,并重写compare方法得类,为比较器;

  78. 所由实现了collection接口的集合,通过迭代器取出来的元素都为object类型;

  79. for(object a : 集合引用);

  80. Hashtable和HashMap功能差不多,只不过Hashtable是线程安全的;、

  81. LinkedHashMap是一个Ordered的,可以指定初始容量;TreeMap不可以,HashMap、Hashtable也不可以;

  82. 向Map接口中添加元素使用put方法;

  83. 添加进Sorted接口中元素必须有可比性,类型因该为一致的;

  84. 重写equals方法:自反性、对称性、传递性、一致型、任何null的为false;

  85. HashSet和LinkedHashSet初始容量为16,也可以自己设置初始容量;

  86. TreeSet不可以设置初始容量;

  87. LinkedHashMap插入、删除比HashMap略差,但遍历比HashMap快;

  88. 实现了Deque的接口类一般使用LinkedList和ArrayDeque;来代替栈的功能;

  89. Stack类只有一个无参构造方法;

  90. ArrayDeque类初始容量为16,也可以自己设置;

  91. 对集合元素的操作:使用Collections中的静态方法;
    排序:sort(集合,【比较器】)
    查找:binarySearch(集合,元素,【若排序是使用了特定的比较器,查找是应指定一下】)
    打乱:shuffle(集合)
    查找指定元素个数:frequency;

  92. HashMap既不是ordered也不是sorted,可以存储null

  93. Hashtable与HashMap功能差不多,该类对元素访问有线程同步;

  94. Stack类是继承自Vector类实现的,因此性能有一些差;

  95. Deque的接口有ArrayDeque和LinkedList;用来实现队栈的功能;

  96. Collections.binarySearch(LIst list,Comparator c)若排序时指定了特定的比较器进行的排序,搜索时也应该指定该比较器,否则 可能会得到错误的结果;

  97. Collections.shuffle(List list);对列表进行排序,对原数据进行排序;

  98. Collections.copy(List dest,List src),连索引一起赋值过去,替代原先位置的元素;

     	第十五章 内部类的使用
    
  99. 在内部类中使用外部类中成员时,就相当于普通成员之间的互相访问;即使外部类的成员访问修饰符是private。

  100. 在外部类中访问内部类中的非静态成员时,需要先创建内部类对象,即使内部类中的成员是private修饰的; (注意:内部类中不允许有静态成员;)

  101. 在内部类中使用外部预定义对象this,外部类.this.成员;

  102. 内部类可以访问外部类中的任何成员,但局部内部类一样可以访问外部类中的成员,但不可以访问同一个局部的普通局部变量;

  103. 因为静态内部类是外部类的静态成员,所以在外部类外面创建静态内部类对象 时,不需要创建外部类的对象;

  104. 匿名内部类是通过继承或接口来实现的,声明的同时就是创建对象的过程,通过引用只能调用重写父类的方法,因为匿名内部类没有名称,不能创建该类的对象;

  105. 如果局部内部类位于静态方法中,只能访问外部类中的静态方法;

  106. 匿名内部类编译后产生的文件为:外部类$n,n代表第几个内部类;

  107. 定义在类中的内部接口是否使用static修饰,扮演的都是静态成员;当内部接口使用private修饰时,意味着该接口只能由外部类中的某个内部类来实现;

  108. 定义在接口中的内部接口不能使用private修饰;在使用上和外部接口没有什么区别;

    	第十六章、多线程的功力
    
  109. 直接调用run方法,不开启一个线程;

  110. 其实,实现了Runnable接口的对象,只是指出了线程需要执行的任务;

  111. 线程在其生命周期中只能被调用一次;

  112. 线程之间的执行顺序受硬件,操作系统等因素的影响,而java又是一种跨平台的开发语言;

  113. Thread.sleep(long millis);是静态的,可以出现在任何位置,那个线程执行了sleep,那个线程去睡觉,让出cpu;而wait只能用在synchronized方法或synchronized语句块中,不仅让出cpu而且释放同步资源锁对象;

  114. 线程的优先级使用线程对象的setPriority();进行设置;默认是和主线程一样的,为5;

  115. 线程让步:yield(线程对象)是Thread的静态方法,让该线程让出cpu,具体让给谁不知道,,该线程进入准备状态;

  116. 线程对象的join();在一个线程中使用另一个线程.join(),例如:a.jion();等a线程执行结束时,才执行另一个线程;

  117. 通俗的讲,守护线程守护的是所有的用户线程;

  118. 是哟个synchorized修饰方法时,锁定的对象只有一个,但在并发时,远远不止一个;而且同步将影响性能,应该尽量缩小同步的代码块;

  119. 其实java中没有单线程程序,

  120. synchronized只能用来标记方法(静态方法也可以),访问静态方法时,先获取;

  121. 同步方法不能为抽象的;

  122. 关于同步语句块的使用:Synchronized(资源对象引用){需要同步的代码}

  123. while循环中的条件语句不能全部为数字,如果全为数字,后面就不能有其他的语句;

  124. notify是从线程等待池中选择一个线程进行唤醒恢复运行,具体是哪一个,不一定;

  125. 当有很多线程访问同一资源时,建议使用notifyAll方法,使所有的先线程都有机会访问资源,避免造成永久的等待;

  126. java中没有自动发现死锁并排除死锁的可能;

  127. Thread.currentThread(),来获取当前的线程;

  128. 锁定的是谁,谁就调用wait,notify,notifyAll方法;

    	第十七章、高级线程
    
  129. 创建固定大小的线程池静态方法:newFixedThreadPool(int nThread);

  130. 创建固定大小的线程池静态方法(同一时刻只能执行一个线程):newSingleTreadExecutor();

  131. 上面的返回值为ExectorService接口类型,调用该接口中的execute(实现了Runaable接口的对象);

  132. 创建可变尺寸的线程池:使用Executors.newCachedThreadPool();

  133. 固定延迟线程池:newScheduledThreadPool(int n);

  134. 固定延迟线程池(同一时刻只有一个线程执行):newSingleThreadScheaduledExector();

  135. 5\6的返回类型为ScheaduleExectorsService接口;调用schedule(Runabble接口对象,时间,单位(使用TimeUnit.xxx))方法;

  136. 上面都是调用Exectors类的静态方法;

  137. 自定义线程池使用ThreadPoolExector类(该类实现了ExectorService接口,因此具有该接口的方法)来实行,该类可以创建对象,常用的构造器中有5个参数,分别是,标准值,最大值,可以活多久,时间单位,工作等待队列(由BlokingQueue对象来实现);

  138. 有返回指定的线程调用:实现Callable接口,重写call方法,该方法的中可以返回任意类型,但系统都会以object类型来进行对待;该接口和Runabble接口作用一样;但需要执行该接口的方法时,需要调用ExecutorService的submit(Callable接口对象)方法;该方法的返回值类型为Future类型;

  139. 创建和清除线程垃圾都会占用大量的cpu等资源

  140. 关于线程池的一些操作都在java.util.current包中;

  141. 封锁资源:Lock接口和ReentrantLock类;

  142. 还有ReadWriteLock和ReentrantReadWriteLock类;实类.readLock/writeLock.lock();获取锁;

  143. 读写锁:同一时刻可以有多个线程握有读锁,此时不允许写,反之同一时刻只有一个线程握有写锁,此时不允许由读线程;

  144. 与封锁相关的类都在java.util.current.locks包中;

  145. 关于Semaphore类的使用,实类.acquire(int n);获取指定数量的请求许可;若获取失败,则调用此方法的线程进入阻塞状态;

  146. 创建一个优先级队列PriorityDeque类,初始容量为11,可以指定初始容量;不是按插入顺序排序,而是按自然顺序排序;

  147. BlockingQueue接口和实现了该接口的类:ArrayBlockingQueu\LinkedBlockingQueue\PriorityBlockingQueue;三个都可以指定初始值;第三个是不限制容量的阻塞队列,当调用take方法时,若队列为空,会阻塞;前两个当队列满时,

  148. 阻塞栈:实现了Blocking接口的类LinkedBlockingDeque类;是一个双向栈,向栈顶、栈底添加元素putFirst,putLast,takeFirst,takeLast,后两个是取出元素;

     	第十八章、 内存管理技术
    
  149. 对象成为垃圾的条件:
    对于非线程对象来说,所有活动的线程都不可能访问到该对象;(活动线程是指已启动但还没有死亡的线程)
    对于线程对象来说:除了满足上述,还有该线程应处于死亡或新建状态;

  150. Runtime类的对象中封装的是和java程序运行时的一些系统信息;该 类的构造器都是privated,只能通过一些工厂方法获取其对象,例:Runtime.getRuntime();返回Runtime类的对象;

  151. Runtime类对象.gc()方法申请垃圾收集器运行,但太麻烦,System.gc();有同样的功效;

     	第二十九章、I/O流
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值