JAVA基础中的几个常用知识点

小知识点

  1. main不是关键字,但是可以被jvm识别
  2. 静态代码块–构造代码块–构造函数,启动一个类时他们的执行顺序
  3. javadoc 生成帮助文档 @author @version @param @return 类要加public
  4. \t 制表符 \n 换行符
  5. super语句必须放在子类构造函数的第一行,因为要访问父类的属性初始化值
  6. super和this不能出现在同一个构造函数中,因为他们都必须放在第一句
  7. 只要创建子类对象,就一定会调用一次父类的构造函数
  8. 子类中的每一个构造函数的第一行都会默认有super();
  9. 当父类中没有空参的构造函数时,子类必须有this或super访问父类的其他构造函数
  10. 子类的覆盖方法的权限不能低于父类,因为子类要比父类功能强大

线程

进程:当前正在执行的程序,代表应用程序在内存中的执行区域
线程:是进程中的一个执行控制单元,一个执行路径

多线程的好处:一个进程有多个线程,提高了执行效率

开启第二个线程的两种方式:

new Thread(){
            @Override
            public void run() {
                System.out.println("第一中方式");
            }
        }.start();
new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("第二种方式");  
            }
        }){}.start();

两种方式优缺点的比较:
直接使用Thread简单方便,但是只能单继承,如果使用Runnable对象可以多实现。

String类

  • String s1 = new String(“abc”);在内存中创建了几个对象?
    答案:两个。一个s1对象在堆中,一个”abc”常量在常量池中。
  • String s1 = “a” +”b” + “c”; String s2 = “abc”;
    s1 == s2? s1.equals(s2)?
    答案:true,true;因为java的常量优化机制会将s1直接变成常量”abc”
  • 几个类的区别
    String类:不可改变的,一旦初始化就不能改变
    StringBuilder:是可变序列,线程不安全,效率高,1.5出现

JAVA中的几个有意思的类

Date,DateFormat,SimpleDateFormat,Calendar,Timer,System,Runtime,Math,Random

集合

  • 数组与集合的比较
    数组的长度是固定的,可以存储基本数据类型也可以存储对象
    集合的长度是可变的,只能存储对象

  • 根接口
    单列集合的根接口是Collection,子接口有List和Set;
    双列集合的根接口是Map,子接口有HashMap和TreeMap

  • 迭代器Iterator
    Iterator本身并不具备增删的方法,所以在迭代的时候增删会出现并发修改异常。

List

可重复,有索引,有序

三个子类
  • ArrayList:底层数据结构是数组结构,线程不安全,查询速度快,所以替代了Vector
  • LinkList:底层是链表数据结构,线程不安全,查询慢,增删快
  • Vector:底层是数组结构,线程安全,查询和增删都慢。jdk1.0出现,比集合出现的都早,已经被ArrayList替代
ArrayList可变长度的实现

ArrayList底层默认封装了一个长度为10的数组,当超出长度时,会创建一个新的数组,新数组的长度为原数组的1.5倍,并copy原数据。

set

不可重复,没有索引,无序

三个子类
  1. HashSet:使用哈希算法去重复,效率高,但是元素无序
  2. TreeSet:TreeSet是用来排序的,可以制定顺序
  3. LinkedHashSet:HashSet的子类,原理相同,除了去重复还能保留存储顺序,底层是链表结构
HashSet
  1. HashSet去重复依赖于hashCode()和equals()方法,先判断hashCode()方法
  2. 自定义的对象必须实现hashCode()和equals()方法;hashCode()方法属性值相同必须返回true,属性值不同尽量返回falsed
迭代
  1. 使用Iterator,hasMore()和next()方法
  2. 增强for(底层使用Iterator实现的)
TreeSet
  • 依赖CompareTo()方法进行排序
  • 实现比较:自定义类实现CompareTo()方法;传入匿名内部类的方法

泛型

泛型是JDK1.5出现的,非常实用。它可以运行时的异常提前到编译时,并且方便开发,在使用集合时优点特别明显。下图是个简单的示例:
泛型示例

通配符?和T的区别

  • ?不能修饰类
  • ?相当于声明了一个变量,可以直接在方法中传递

泛型限定边界

  • ? extend E:接收E或者E的子类,固定了父类型
  • ? super E:接收E或者E的父类,都定了子类型
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值