java盲点(一)

内部类和匿名内部类

内部类:可以使用外部的变量
匿名内部类:可以使用外部的类变量或者实例变量或者final修饰的局部变量

//比如这种写法是Runnable匿名内部类
 new Thread(new Runnable() {
           @Override
           public void run() {

           }
       }).start();
//这种是内部类,RunnableTests可以重用
 new Thread(RunnableTest).start();
   Runnable RunnableTest = new Runnable() {
        @Override
        public void run() {

        }
    };

String,StringBuffer与StringBuilder

Java基础之String,StringBuffer与StringBuilder的区别及应用场景

抽象类和接口

抽象类首先它是类只能继承,并且只能继承一个。接口可以实现多个。
抽象类它是is的关系,接口是have的关系。
抽象类可以实现部分方法逻辑,接口只能是方法。
使用场景常常是在抽象类中写接口,将接口暴露出去,可以实现回调等操作。

多态

接口实现,继承父类进行方法重写,同一个类中进行方法重载。
多态存在的三个必要条件:要有继承;要有重写;父类引用指向子类对象。

class A ...{  
         public String show(D obj)...{  
                return ("A and D");  
         }   
         public String show(A obj)...{  
                return ("A and A");  
         }   
}   
//继承
class B extends A...{  
         public String show(B obj)...{  
                return ("B and B");  
         }  
         //重写
         public String show(A obj)...{  
                return ("B and A");  
         }   
}  
//使用,父类引用指向子类对象
A a =new B();
a.show(new B());

结果输出B and A
A a =new B()向上转型了,所以a中方法为A and D;B and A

向上转型和向下转型

向上转型:在运行时,会遗忘子类对象中与父类对象中不同的方法。也会覆盖与父类中相同的方法–重写。(方法名,参数都相同)
向下转型:在向下转型之前,它得先向上转型;向下转型只能转型为本类对象。

集合

1、collecton集合,用来表示任何一种数据结构
2、Collection集合接口,指的是java.util.Collection接口,是Set、list和Queue接口的超类接口
3、Collection集合工具类,指的是java.util.Collections类4

1、List关注事物的索引列表
2、Set关注事物的唯一性
3、Queue关注事物被处理时的顺序
4、Map关注事物的映射和键值的唯一性
List接口
List关心的是索引,与其他集合相比,List特有的就是和索引相关的一些方法:get(int index) 、 add(int index,Object o) 、 indexOf(Object o) 。
ArrayList 基于数组,可以将它理解成一个可增长的数组,它提供快速迭代和快速随机访问的能力。不是同步的,多线程中要管理线程同步问题。
LinkedList 中的元素之间是双链接的,适合添加和删除
Vector 基于数组,是ArrayList的线程安全版本,性能比ArrayList要低,是线程同步的
Set接口
Set关心唯一性,它不允许重复。无序
HashSet 以HashMap为基础以key作为存储项,当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可使用此类。
LinkedHashset 当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。
TreeSet 有序,当不希望集合中有重复值,并且希望按照元素的自然顺序进行排序时可以采用此类。
(自然顺序意思是某种和插入顺序无关,而是和元素本身的内容和特质有关的排序方式,譬如“abc”排在“abd”前面。)
Queue接口
Queue用于保存将要执行的任务列表
LinkedList 同样实现了Queue接口,可以实现先进先出的队列。
PriorityQueue 用来创建自然排序的优先级队列。
Map接口
Map关心的是唯一的标识符。他将唯一的键映射到某个元素。当然键和值都是对象。
HashMap 当需要键值对表示,又不关心顺序时可采用HashMap。是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里,元素成对,元素可为空
Hashtable 它是HashMap的线程安全版本,元素成对,线程安全,元素不可为空。
LinkedHashMap 当需要键值对,并且关心插入顺序时可采用它。
TreeMap 当需要键值对,并关心元素的自然排序时可采用它。

final修饰的可不可以改变

final代表对象不可改变。
final修饰类,类不能被继承。
final修饰方法,方法不能被重写。
final修饰变量,首次可以被赋值,其余不能赋值。
但final修饰list,map,StringBuffer等时,内部值是可以变化的。
final的意思是地址不能改,但是地址指向的内容当然可以改。list的add,remove等操作只改变了对象的内容,未改变地址。但你再次new List()时会报错,因为在更改对象地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值