java抽象类,java内部类,synchronized关键字,接口中的抽象方法,set集合,跨域产生的原因

java抽象类


  1. java抽象类表示的一种继承关系,一个类只能继承一个抽象类,但是能实现多个接口。
  2. 抽象类不一定含有抽象方法,但是含有抽象方法的类一定是抽象类,抽象方法即有方法声明但是没有方法定义的方法
  3. 抽象类不能实例化对象,因此只有被继承才能使用抽象类

java内部类


  • 成员内部类:可以直接访问外部类的属性,方法,即使是私有的。但是不能含静态变量和方法
  • 局部内部类:定义在一个方法或者作用域里面,不能有权限和静态修饰词,可以直接访问外部类的属性方法等,即使是私有的
  • 匿名内部类:它没有名字和构造方法,用于继承其他类或者是实现接口,并不需要增加额外的方法,只是多继承方法的实现或者重写
  • 静态内部类:静态内部类不能访问外部类的非静态变量和方法,静态内部类是属于外部类所有,而非外部类的实例对象所有

为什么使用内部类?

当一个类存在的价值仅仅是为某一个类服务时,可以将其设为内部类,方便将具有一定关系的类组织在一起,由可以对外界隐藏

内部类加载时机

内部类的加载时机与外部类没有必然的联系,只有当使用到内部类时,内部类才会加载,但是当内部类与外部类有联系时(比如内部类中使用了外部类中的变量),在加载内部类的时候如果发现外部类没有加载,则会先加载外部类然后加载内部类


java synchronized关键字


用在方法上

锁住的是当前对象的当前方法或者代码块,其他线程访问synchronized方法或者代码块时阻塞,但非synchronized方法或者代码块不会受到阻塞

synchronized(this)

锁住的是当前对象,在同步块里面的内容执行完毕之后,释放当前对象的锁,当多个线程访问改对象时,会受到阻塞

synchronized(object)

锁住的当前object对象,注意括号里面必须是Object对象才能保证代码块实现互斥访问,相比于方法同步锁这个锁住部分代码块让并发更加高效

  • 注意锁分为对象锁和类锁,这两个是完全不同的锁,互相之间不会影响。当使用对象锁时,只会对本对象作用,而不会对本类的其他对象作用。但是类锁作用的是本类的所有实例

java接口中的抽象方法

  1. java接口中的方法默认是public & abstract 的,这两个关键字可以任意省略
  2. 如果实现类没有实现接口中的所有方法,那么当前类一定是抽象类

java set集合


set集合时一种集合,程序可以把多个元素放入set集合,但是set集合不能记住元素的添加顺序,并且set集合不允许添加两个完全相同的元素,HashSet是set接口的最常用的一个实现,集合元素值可以是null

  • HashSet的实现是基于HashMap的,对HashMap做了一层封装实现了set接口,并且存储只是使用了HashMap的key存储部分,value部分都指向同一个Object对象,没有使用Object对象
  • HashMap底层是使用了链表数组的方法,key值经过哈希函数得到数组中的位置,然后得到目标对象存储的位置,当超过两个元素哈希后得到同一个数组位置时,采用链表的方法存储

set接口addAll()方法用于将数组放入set集合并且自动去掉数组中重复的部分


跨域产生的原因

跨域产生的原因是浏览器的同源策略限制,是一种浏览器的一种安全机制,服务端之间不存在跨域

浏览器的同源策略是指两个页面的协议,主机,端口相同,如果三者之间有一项不同,便会产生跨域问题

你可能感兴趣的:(java抽象类,java内部类,synchronized关键字,接口中的抽象方法,set集合,跨域产生的原因)