java基础回顾(三)

1.内部类

1.声明非静态内部类对象的方法: 外部类名.内部类名 对象名=new 外部类名().new 内部类名();
2.声明静态内部类对象的方法: 外部类名.内部类名 对象名=new 外部类.内部类名();
3.在匿名类中使用外部的局部变量,外部的局部变量必须修饰为final
4.外部类访问内部类:必须建立内部类的对象
内部类访问外部类:内部类可以直接访问外部类的成员包括私有成员,因为外部类持有内部类的引用(外部类.this.变量)

2.if语句与布尔一起使用

Boolean修饰的变量为包装类型,初始化值为false,进行赋值时会调用Boolean.valueOf(boolean b)方法自动拆箱为基本数据类型,因此赋值后旗值为真,输出文本true。如果使用==比较,则输出文本false.if的语句比较,除布尔值外的其他类型都不能使用赋值语句,否则会提示无法转成布尔值。

3.join方法

程序在main线程中调用t1线程的join方法,则main线程放弃cpu控制权,并返回t1线程继续执行直到线程t1执行完毕
所以结果是t1线程执行完后,才到主线程执行,相当于在main线程中同步t1线程,t1执行完了,main线程才有执行的机会。
join方法中如果传入参数,则表示这样的意思:如果A线程中掉用B线程的join(10),则表示A线程会等待B线程执行10毫秒,10毫秒过后,A、B线程并行执行。需要注意的是,jdk规定,join(0)的意思不是A线程等待B线程0秒,而是A线程等待B线程无限时间,直到B线程执行完毕,即join(0)等价于join()。

4.List的删除

对于List而言,想要移除元素,要不然就用迭代器。要不然就从后往前删除。
万万不可从前往后删,会出现角标越界。

5.关于抽象类和接口

1.抽象类可以在不提供接口方法实现的情况下实现接口。
2.子类继承抽象类父类必须重写父类中的抽象方法,如果子类也为抽象类则不用重写父类中的抽象方法。

6.值传递和引用传递

值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。
一般认为,java内的基础类型数据传递都是值传递. java中实例对象的传递是引用传递

7.解释HashMap的容量为什么是2的n次幂?

  1. 提高操作运算效率(位运算效率 > 取模运算效率)
  2. 减少碰撞,数据均匀分布,提高HashMap查询效率

8.MyBatis中大于和小于号的转义写法

https://blog.csdn.net/zhou520yue520/article/details/82586665

9.mybatis中$和#的区别

1.#{}会将传进来的参数转换成单引号的形式,如:select * from user where name = 'csdn';因此#{}可以防止sql注入。
2.{}会直接将数据写上去,因此不能防止sql注入。 3.MyBatis排序时使用order by 动态参数时需要注意,用而不是#

10.intValue(),Valueof(),parseInt()

intValue()是把Integer对象类型变成int的基础数据类型; parseInt()是把String 变成int的基础数据类型; Valueof()是把String 转化成Integer对象类型;

11.同步方法和同步代码块的区别

同步方法默认用this或者当前类class对象作为锁;
同步代码块可以选择以什么来加锁,比同步方法要更细颗粒度,我们可以选择只同步会发生同步问题的部分代码而不是整个方法;
同步方法使用关键字 synchronized修饰方法,而同步代码块主要是修饰需要进行同步的代码,用 synchronized(object){代码内容}进行修饰;

12.在监视器(Monitor)内部,是如何做线程同步的

监视器和锁在Java虚拟机中是一块使用的。监视器监视一块同步代码块,确保一次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联。线程在获取锁之前不允许执行同步代码。

13.ReenTrantLock 实现交流

使用 ReenTrantLock.newCondition() 获取一个 Condition 类对象,然后 Condition 的 await(),signal() 以及 signalAll() 分别对应上面的三个方法。

14.TreeMap

TreeMap通过红黑树实现Map接口的类,key不可以为null,会报NullPointerException异常,value可以为null。

15.Iterator和ListIterator的区别

Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。
Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等,Iterator只能用来删除元素。

16.hashmap的resize()方法

当hashmap中的元素越来越多的时候,碰撞的几率也就越来越高(因为数组的长度是固定的),所以为了提高查询的效率,就要对hashmap的数组进行扩容
hashmap的初始化initailCapacity是16,负载因子loadFactor的值是0.75,有这样一个公式:initailCapacityloadFactor=HashMap的容量,HashMap每次put操作是都会检查一遍 size(当前容量)>initailCapacityloadFactor 是否成立。如果不成立则HashMap扩容为以前的两倍(数组扩成两倍),
然后重新计算每个元素在数组中的位置,然后再进行存储。这是一个十分消耗性能的操作。
所以如果能根据业务预估出HashMap的容量,应该在创建的时候指定容量,那么可以避免resize().

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 1,663评论 0赞 6
  • 一:java概述: 1,JDK:Java Development Kit,java的开发和运行环境,java的开发...
    慕容小伟阅读 2,009评论 0赞 10
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,663评论 0赞 4
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,509评论 0赞 2
  • 写文的第14天,从今天开始我将不再每日更新,谢谢朋友圈监督我养成每日写作的习惯,到今天为止,这个习惯已经顺利养成。...
    琴瑟沉香阅读 395评论 0赞 0

友情链接更多精彩内容