封装,继承,多态,抽象
String属于类类型,
基本类型有八种:int,short,byte,long,float,double,char,boolean
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。
4、Integer的默认值是null,int的默认值是0
String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常改变内容的字符串最好不要用 String ,因为每次生成对象都会对系统性能产生影响,特别当内存中无引用对象多了以后, JVM 的 GC 就会开始工作,那速度是一定会相当慢的。
改变的原理是StringBuffer内部采用了字符数组存放数据,在需要增加长度的时候,创建新的数组,并且把原来的数据复制到新的数组这样的办法来实现。
运行时异常RuntimeException指: 不是必须进行try catch的异常
一般异常又叫可查异常即必须进行处理的异常,要么try catch住,要么往外抛,谁调用,谁处理,比如 FileNotFoundException 如果不处理,编译器,就不让你通过
先说ArrayList和Vector 两者都继承了抽象类AbstractList,但是Vector是线程安全的,而ArrayList是非线程安全的
再说ArrayList和LinkedList的区别 ArrayList 是数组结构,所以定位很快,但是插入和删除很慢 LinkedList 是双向链表结构,所以插入和删除很快,但是定位很慢
Collection是接口,是List和Set的父接口 Collections是工具类,提供了排序,混淆等等很多实用方法
&和&&都可以用作逻辑与的运算符,表示逻辑与(and)。&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位。
HashMap和Hashtable都实现了Map接口,都是键值对保存数据的方式 区别1: HashMap可以存放 null Hashtable不能存放null 区别2: HashMap不是线程安全的类 Hashtable是线程安全的类
final final修饰类,方法,基本类型变量 修饰类 表示该类不能被继承 修饰方法 表示该方法不能被重写 修饰基本类型变量 表示该变量只能被赋值一次 修饰引用 表示该引用只有一次指向对象的机会 finally finally 是用于异常处理的场面,无论是否有异常抛出,都会执行 finalize finalize是Object的方法,所有类都继承了该方法。 当一个对象满足垃圾回收的条件,并且被回收的时候,其finalize()方法就会被调用
Overload是方法重载的意思,指的是在同一个类里面,方法名一样,但是参数不一样,重载其实本质上就是完全不同的方法,只是恰好取了相同的名字 Override是方法重写的意思,指的是子类继承了父类的某个方法后,重新又写了一遍
Error和Exception都实现了Throwable接口
Error指的是JVM层面的错误,比如内存不足OutOfMemoryError
Exception 指的是代码逻辑的异常,比如下标越界OutOfIndexException
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然 eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
抽象类中可以包含静态方法,接口中不能包含静态方法
抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
一个类可以实现多个接口,但只能继承一个抽象类。 下面接着再说说两者在应用上的区别: 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。而抽象类在代码实现方面发挥作用,可以实现代码的重用
heap是堆,存放对象,自动增加大小,存取相对较慢
stack是栈,存基本类型,引用,方法调用,固定大小,先入后出,存取快
GC是Garbage Collection的缩写,即垃圾回收,JVM的垃圾回收机制使得开发人员从手动释放内存资源的过程中解放出来。开发人员可以更加专注的进行业务功能的开发。
对于short s1 = 1;s1=s1+1; 来说,在s1+1运算时会自动提升表达式的类型为int,那么将int赋予给short类型的变量s1会出现类型转换错误。
Math.round 的意思是+0.5 取整数
首先abstract与static,声明static说明可以直接用类名调用该方法;声明abstract说明需要子类重写该方法; 如果同时声明static和abstract,用类名调用一个抽象方法肯定不行。 synchronized 是同步,然而同步是需要有具体操作才能同步的,如果像abstract只有方法声明,那同步一些什么东西就会成为一个问题了,当然抽象方法在被子类继承以后,可以添加同步。
数组获取长度的手段是 .length 属性 String获取长度的手段是 length()方法 集合获取长度的手段是 size()方法 文件获取长度的手段是 length()方法
key是否重复,是由两个步骤判断的: hashcode是否一样 如果hashcode不一样,就是在不同的坑里,一定是不重复的 如果hashcode一样,就是在同一个坑里,还需要进行equals比较 如果equals一样,则是重复数据 如果equals不一样,则是不同数据。
子类不能继承父类的构造方法,所以就不存在重写父类的构造方法。 注: super() 表示子类调用父类的构造方法,这不能被叫做继承父类的构造方法
String是final修饰的,所以不能够被继承
switch不可作用于long double float ,包括他们的包装类,简单的回答是因为语法的规定。在实际编程中,极少有如此多的分支,以致需要使用Long类型。
原理:当某个一个对象,没有任何引用指向它的时候,那么它就满足垃圾回收的条件,在适当的时候,JVM虚拟机进行GC将其回收,释放空间,以供后续再利用。
两种常见的回收机制:
定时回收 每隔30分钟进行一次回收,这种机制的弊端是如果垃圾产生的比较快,有可能30分钟之内垃圾已经把内存占用光了,导致性能变慢
当垃圾占到某个百分比的时候,进行回收 比如,当垃圾占到70%的时候,进行回收。 这种机制的弊端是,如果垃圾产生的频率很快,那么JVM就必须高频率的进行垃圾回收。 而在垃圾回收的过程中, JVM会停顿下来,只做垃圾回收,而影响业务功能的正常运行。
一般说来 JVM会采用两种机制结合的方式进行垃圾回收。
char是16位的,占两个字节 汉字通常使用GBK或者UNICODE编码,也是使用两个字节 所以可以存放汉字
Java中所有的流都是基于字节流,所以最基本的流是 输入输出字节流 InputStream OutputStream 在字节流的基础上,封装了字符流 Reader Writer 进一步,又封装了缓存流 BufferedReader PrintWriter 以及数据流 DataInputStream DataOutputStream 对象流 ObjectInputStream ObjectOutputStream
以及一些其他的奇奇怪怪的流 ~~~
父类(接口)引用指向子类对象
方法有重写
序列化指的是把一个Java对象,通过某种介质进行传输,比如Socket输入输出流,或者保存在一个文件里
实现java序列化的手段是让该类实现接口 Serializable
不行,因为非static方法需要一个具体的实例才可以调用,而调用 static方法的时候,不一定存在一个实例
在外部循环的前一行,加上标签 在break的时候使用该标签 即能达到结束多重嵌套循环的效果
例子:
匿名内部类本质上就是在继承其他类,实现其他接口
可以使用 如果是非静态内部类,可以使用外部类的所有成员 如果是静态内部类,只能使用外部类的静态成员
继承Thread类
实现Runnable接口
匿名类的方式
注: 启动线程是start()方法,run()并不能启动一个新的线程
首先sleep和wait之间没有任何关系
是Thread类的方法,指的是当前线程暂停。
是Object类的方法, 指的占用当前对象的线程临时释放对当前对象的占用,以使得其他线程有机会占用当前对象。 所以调用wait方法一定是在synchronized 中进行
简述synchronized和java.util.concurrent.locks.Lock的异同 ?
\1. Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现。
\2. Lock可以选择性的获取锁,如果一段时间获取不到,可以放弃。synchronized不行,会一根筋一直获取下去。 借助Lock的这个特性,就能够规避死锁,synchronized必须通过谨慎和良好的设计,才能减少死锁的发生。
原文:https://www.cnblogs.com/ltdh/p/12772926.html