javaSe初学小结

一、布局管理

1. 流布局管理器:
FlowLayout类声明:

    public class FlowLayout implements LayoutManger, java.io.Serializable
    {
        public static final int LEFT=0,CENTER=1,RIGHT=2;
        public FlowLayout()    //构造方法,默认居中
        public FlowLayout(int align)   //align参数指定对齐方式,取值为对齐方式
        public FlowLayout(int align, int hgap, int vgap)  //hgap,vgap指定组件间水平和垂直间距
    }

2. 边布局管理器:
分为5个区域,东西南北和中,改变容器大小,四边组件的长度或宽度不变,中间组件长度和大小随着容器大小变化
BorderLayout类声明:

     public class BorderLayout implements LayoutManger2, java.io.Serializable
     {
       public static final String NORTH="North";   //位置常量,字符串首字母大写
       public static final String SOUTH="South";
       public BorderLayout()       //构造方法,组件之间间距为0像素
       public BorderLayout(int hgap, int vgap)    // 参数指定组件之间的水平和垂直间距
     }     

Container容器为BorderLayout布局提供以下添加组件的方法:
如:

        this.add(new Button("东"), BorderLayout.EAST);        //组件添加在框架东边
        this.add(new Button("南"), "South"); 

3.网格布局管理器:
将容器划分为大小相等的若干行乘以若干列网格;
GridLayout类声明如下:

       public class GridLayout implements LayoutManger, java.io.Serializable
       {
          public GriLayout(int rows, int cols)  //构造方法,参数指定行和列
          public GriLayout(int rows, int cols, int hgap, int vgap)     // hgap,vgap指定组件水平和垂直间距
       }
二、== 与equals的区别
  1. ==比较基本数据类型时,值存放在栈中,直接比较它们的值
  2. ==比较引用数据类型时,比较的是它们的地址
  3. Equals是String的方法,比较的是字符串内容是否一致,所以==比较为true时,equals不一定为true 比如比较的为地址时候。
三、this 与super
  1. this() 本类无参构造
  2. super() 父类无参构造
  3. this(10) 本类有参构造
  4. super()与this()都要处于第一行,所有只能有一个
  5. this.name 本类的name属性
  6. super.name 父类的name属性
  7. this.eat() 调用本类的eat()方法
  8. super.eat() 调用父类的eat()方法
四、JAVA顺序
  1. 父类静态代码块 –> 子类静态代码块 –> 父类代码块(或成员变量)从上往下执行 –> 父类构造 –> 子类代码块(或成员变量)从上往下执行 -> 子类构造
五、内部比较器 外部比较器
  1. 内部:实现Comparable接口,重写compareTo方法
  2. 外部:重写一个比较器类,实现Comparator接口,重写compare方法
六、HashSet TreeSet LinkedHashSet
  1. HashSet:哈希表实现,无序,不可重复,可以有空元素,必须重写hashcode方法,先取哈希码进行比较,不重复直接插入;哈希码相同,调用equals方法,比较内容是否一致,不一致插入,保证没有相同的元素。
  2. TreeSet:二叉树实现,有序,不可重复,不可有null元素,插入对象需要实现比较器接口。
  3. LinkedHashSet:链表+哈希表实现。有序,插入和读取顺序一致。查询比HashSet慢,插入删除快。
七、HashMap TreeMap Hashtable LinkedHashMap
  1. HashMap 哈希表实现,无序,Key不能重复,key和value可为空。
  2. TreeMap 红黑树实现,有序,key不能重复不能为空,会根据key排序。
  3. Hashtable 哈希表实现,继承Dictionary,不常用,key不能重复,key和value都不能为空,线程安全。
  4. LinkedHashMap 链表+哈希表,key不重复,key和value都能为空,查询慢,插入删除快,可以如何存便如何取。
名称实现方式key和value的特性特点
HashMap哈希表key不能重复,key和value可以为空无序
TreeMap红黑树key不能重复,不能为空,根据key排序有序
Hashtable哈希表key不能重复,key和value不能为空继承于Dictionary,不常用,线程安全
LinkedHashMap链表+哈希表key不能重复,key和value可以为空查询慢,插入删除快,如何存就如何取
八、Thread Runnable Callable
  1. Thread: 单继承 Runnable实现类,继承Thread父类所有属性,重写run方法;
  2. Runnable: 弥补单继承的局限性,实现多个线程共享一个数据,重写run方法,必须装载进Thread对象进行启动。
  3. Callable: jdk1.5后新加接口,Runnable升级版,带返回值接口。重写call方法,运行是必须装载进FutureTask中运行,返回值通过future.get()获取。
名称特性
Thread单继承,Runnable实现类,重写run方法
Runnable实现多线程共享同一数据,重写run方法,装进Thread进行启动
CallableRunnable升级,带返回值。重写call方法,必须在FutureTask中运行,future.get()获取返回值
九、synchronized volatile lock
  1. synchronized: 线程同步,重量级锁,可以修饰代码块和方法,保证同一时间只有一个线程可以操作方法和代码块,可以锁对象和类(class),保证线程安全。
  2. volatile: 共享变量,轻量级锁,修饰在属性上。每个线程可以有自己的内存空间,线程将变量读取到自己的空间中进行操作,再刷新到主内存中。volatile修饰变量后,会忽略cache优化,每次直接读值,保证每个线程读取的都是最新值。不能保证绝对的线程安全。
  3. lock: 手动锁,操作灵活,多线程情况下,性能比synchronized高好几倍,但一定要记得解锁。
名称锁类型修饰类型特性
synchronized重量级锁方法和代码块同一时间只能一线程操控,可以锁对象和class
volatile轻量级属性忽略cache优化,每次直接读值,保证线程读取最新值,不可以保证线程安全
Lock手动锁方法操作灵活,多线程下比1.高几倍,需要进行解锁
十、sleep wait
  1. sleep: 属于Thread的静态方法,设置休眠时间,会自动唤醒;
  2. wait: 属于object的方法,放在synchronized同步代码中,不设置休眠时间,需要使用notify或者notifyAll来唤醒。
  3. 都属于休眠,让线程属于等待状态
名称所属方法特性
sleepThread设置休眠时间,会自动唤醒
waitobject放在synchronized同步代码中,不设置休眠时间,需要使用notify或者notifyAll来唤醒
十一、stop interrupt volatile
  1. Stop:强制中断线程,非常粗暴,已废弃,不推荐使用
  2. Interrupt: 中断线程,主要以设置一个中断信号,提示该线程终止,主要还是要靠人为代码控制(通过interrupted()判断后直接return)
  3. Volatile:共享变量,修饰一个停止标识符,忽略cache的优化,每次直接读值
名称特点
stop强制中断,不使用
interrupt设置中断信号,提示线程终止,人为控制(interrupted()判断后返回)
volatile共享变量,修饰停止标识符,忽略cache优化,直接读值
十二、join和yield的区别
  1. Join: 霸占方法,多线程情况下,一个线程调用join方法,会等它执行完再继续执行其他线程。当一个线程依托另外一个线程的处理结果,这时需要执行Join方法。
  2. Yield:让步方法,乐意让其他线程占用自己的位置,只是一个暗示,并不能保证产生影响,也不受优先级影响。
名称特点适用情况
join当线程调用它时,等该线程执行完,在执行其他线程当一个线程依托另外一个线程处理结果
yield让其他线程占用自己的位置,不一定产生影响,不受优先级影响只是暗示,不一定可以产生效果
十三、设计模式
  1. 生产者与消费者模式:当生产者与消费者两边速率不一样时,需要堵塞一方,让它排队等待处理。
  2. 工厂模式:帮我们创建对象,省去new的过程,根据你传入的条件返回你要的对象,隐藏丑陋的else if或switch之类代码
  3. 代理模式:在不修改方法的前提下,拓展这个方法
  4. 单例模式:项目中有且只有一个对象,核心是构造私有化,但会对外提供一个获取该对象的静态方法,可分为:懒汉模式和饿汉模式
十四、反射
项目运行时,动态获取类的属性和方法,并可以给属性设值和运行普通和私有方法。
十五、元注解

元注解:用于修饰注解的注解。(用于修饰自定义注解的JDK提供的注解)
JDK提供4种元注解:
@Retention 用于确定被修饰的自定义注解生命周期
RetentionPolicy.SOURCE 被修饰的注解只能存在源码中,字节码class没有。
用途:提供给编译器使用。
RetentionPolicy.CLASS 被修饰的注解只能存在源码和字节码中,运行时内存中没有。
用途:JVM java虚拟机使用
RetentionPolicy.RUNTIME 被修饰的注解存在源码、字节码、内存(运行时)。
用途:取代xml配置
@Target 用于确定被修饰的自定义注解 使用位置
ElementType.TYPE 修饰 类、接口
ElementType.CONSTRUCTOR 修饰构造
ElementType.METHOD 修饰方法
ElementType.FIELD 修饰字段
@Documented 使用javaDoc生成 api文档时,是否包含此注解 (了解)
@Inherited 如果父类使用被修饰的注解,子类是否继承。(了解)

十六、类的生命周期
  1. 加载: 将.class文件以二进制流的方法读取到jvm中
  2. 验证: 校验你的二进制流是否安全,是否符合Jvm规范,有没有恶意代码
  3. 准备: 为静态变量在方法区开辟一块内存,并赋予默认值
  4. 解析: 将符号引用转换成直接引用
  5. 初始化 : 将程序中的赋值语句变为类变量赋值
  6. 运行 : 这个类就可以运行了
  7. 卸载 : 没有引用时,gc会回收并卸载它
十七、三种加载器
  1. BootStrapClassLoader: 加载器的最顶层,最先开始加载jre/lib下的rt.jar等jar包
  2. ExtClassLoader : 如果BootStrapClassLoader没有加载成功,那ExtClassLoader会继续加载jre/lib/ext下面的jar包
  3. AppClassLoader:ExtClassLoader也没加载到,会加载用户classpath下面的class文件
十八、 Jdk动态代理与Cglib动态代理的区别
  1. Jdk动态代理,必须基于接口创建代理类
  2. Cglib动态代理,基于Class就可以创建代理类
  3. Jdk动态代理性能比Cglib高,Spring默认先使用jdk动态代理
十九、C3p0 与 dbcp 数据库连接池的区别
  1. C3p0 : 安全稳定,是hibernate框架推荐使用,它提供最大空闲时间,超过空闲时间会自动回收数据库连接
  2. Dbcp : 速度快效率高,是Spring推荐使用,dbcp提供最大连接数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值