版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、黑马面试题1:定义map集合,并自定义对象,对map集合遍历,打出key和value值2:定义一个类A,类中定义一个show方法,打印一句话,在定义一个TestA类,利用反射在TestA中创建A的对象,并调用show方法3:使用高效字符缓冲流复制文件4:把盘中的一个多层文件夹拷贝到D盘中。用高效的方法(要求写思路,注释,代码)5:Integer泛型Map中存储字符串6:开启两个线程每隔一段时间分别向一个共享数组中添加元素,每个线程添加3个即可。7:如何用反射去创建一个对象,有2种方式,尽量用代码去体现8:编写一个程序,把这个目录里边的所有的带.java文件都拷贝到另一个目录里边,拷贝成功以后,
2、把后缀名是.java改成.txt9:创建多线程的方式有几种?尽量用代码去体现10:编写程序,生成5个1至10之间的随机整数,存入一个List集合,编写方法对List集合进行排序(自定义排序算法,禁用Collections.sort方法和TreeSet),然后遍历集合输出11:23 9 -4 18 100 7" 要求对这串数字按照从小到大排序,生成一个数值有序的字符串。12: 编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象, 并调用该对象中的方法。13:编写一个类A,增加一个实力方法showString,用于打印一条字符串,在编写一个类TestA ,作为客
3、户端,用键盘输入一个字符串,改字符串就是类A的全名,使用反射机制创建该类的对象,并调用该对象中的方法showString14:写一个线程类MyThread,该线程实现了Runnable接口,写一个main方法,用for循环创建5个线程对象。需求如下: 利用线程类的构造函数输出:"创建线程4"。(备注:当创建一个线程的时候,标记为1,再次创建一个线程的时候,标记为2,所以输出的"创建线程4"就是创建的第四个线程) 在run方法中输出:“线程X :计数Y”,当执行次数达到6次的时候,退出。(备注:其中“线程X”为第X个线程,“计数Y”为该线程的run方法执行
4、了多少次) 15: 求1000!的结果中包含多少个0?注:1000! = 1×2×3×4×5×.×999×100016:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。17:递归删除多级文件18:一道ArrayList集合创建添加元素并删除abc24:取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2).19:有类似这样的字符
5、串:“1.2,3.4,5.6,7.8,5.56,44.55”, 请按照要求,依次完成以下试题 以逗号作为分隔符,把已知的字符串分成一个String类型的数组, 数组中的每一个元素类似于“1.2","3.4"这样的字符串; 把数组中的每一个元素以.作为分割,把.号左边的元素作为key, 把.号右边的元素作为value,封装到Map中,map中的key和value都是Object类型; 把map中的key封装到Set中,并且把set中的元素输出; 把map中的value封装到Collection中,把collection中的元素输出。-考察知识篇-2:集合框架的概述、
6、arraylist的特点、map集合的特点、Collection集合下班有哪些类, 哪些类又有哪些特点、HashMap是Hashtable的区别?Collection: |-List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。 |-ArrayList:底层的数据结构是数组,线程不同步,ArrayList替代了Vector,查询元素的速度非常快。 |-LinkedList:底层的数据结构是链表,线程不同步,增删元素的速度非常快。 |-Vector:底层的数据结构就是数组,线程同步的,Vector无论查询和增删都巨慢。 |-Set:无序(存入和取出顺序有可能不一致),
7、不可以存储重复元素。必须保证元素唯一性。 |-HashSet:底层数据结构是哈希表,线程是不同步的。无序,高效; |-LinkedHashSet:有序,hashset的子类。 |-TreeSet:对Set集合中的元素的进行指定顺序的排序。不同步。TreeSet底层的数据结构就是二叉树。HashSet集合保证元素唯一性:通过元素的hashCode方法,和equals方法完成的。 当元素的hashCode值相同时,才继续判断元素的equals是否为true。 如果为true,那么视为相同元素,不存。如果为false,那么存储。 先hashCode,再equals,从而提高对象比较的速度。对于Arr
8、ayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。 对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。TreeSet集合排序有两种方式,Comparable和Comparator区别: 1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。 2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。 第二种方式较为灵活。Map: |-Hashtable:底层是哈希表
9、数据结构,是线程同步的。不可以存储null键,null值。 |-HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable. |-TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序。想要获取map中的所有元素: 原理:map中是没有迭代器的,collection具备迭代器,只要将map集合转成Set集合,可以使用迭代器了。之所以转成set,是因为map集合具备着键的唯一性,其实set集合就来自于map,set集合底层其实用的就是map的方法。 把map集合转成set的方法: Set keySet(); Set entr
10、ySet();/取的是键和值的映射关系。 Entry就是Map接口中的内部接口; 为什么要定义在map内部呢?entry是访问键值关系的入口,是map的入口,访问的是map中的键值对。-3:懒汉模式和饿汉模式的区别1、线程安全:饿汉式是线程安全的,可直接用于多线程,懒汉式是线程不安全的,用于多线程可能会被实例化多次,失去单例的作用。如果要把懒汉式用于多线程,一种是在getInstance方法上加同步,另一种是在使用该单例方法前后加双锁。2、资源加载:饿汉式在类创建的同时就实例化一个静态对象出来,不管之后会不会使用这个单例,会占据一定的内存,相应的在调用时速度也会更快,而懒汉式顾名思义,会延迟加
11、载,在第一次使用该单例的时候才会实例化对象出来,第一次掉用时要初始化,如果要做的工作比较多,性能上会有些延迟。-4:进程和线程的关系,线程休眠的方法、Sleep和 wait方法有什么区别。同步与异步的区别、为什么wait(),notify(),notifyAll()等方法都定义在Object类中、因为这些方法的调用是依赖于锁对象的,而同步代码块的锁对象是任意锁而Object代码任意的对象,所以,定义在这里线程的生命周期:新建:创建线程对象就绪:有执行资格,没有执行权。运行:有执行资格,有执行权阻塞:由于一些操作让线程处于该状态,没有执行资格,没有执行权而另一些操作却可以把他激活,激活后处于就绪
12、状态死亡:线程对象变成垃圾,等待回收进程:是正在运行的程序,是系统进行资源分配和调用的独立单位每一个进程都有它自己的内存空间和系统资源线程:一个时间段执行多个任务是进程中的单个顺序控制流,是一条执行路径一个进程如果执行一条执行路径,则称为单线程程序如果执行多条执行路径,则称为多线程程序。线程依赖进程存在多线程不是提高程序执行速度,而是提高应用程序使用率程序的执行其实就是在抢CPU资源,CPU的执行权同步的原理:就是将部分操作功能数据的代码进行加锁。wait和sleep区别: 分析这两个方法:从执行权和锁上来分析: wait:可以指定时间也可以不指定时间。不指定时间,只能由对应的notify或n
13、otifyAll来唤醒。 sleep:必须指定时间,时间到自动从冻结状态转成运行状态(临时阻塞状态)。 wait:线程会释放执行权,而且线程会释放锁。 Sleep:线程会释放执行权,但不是不释放锁。 说说对线程池的理解、run和start什么区别?程序启动一个新线程成本比较高,因为涉及到要与操作系统进行交互,而使用线程池就可以很好的提高性能,尤其是当程序要创建大量生存期很短的线程是,更应使用线程池里的每一个线程代码结束后,并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个对象来使用-5:匿名内部类理解匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类:需要前提,内部类必须继承一个类或
14、者实现接口。 匿名内部类的使用场景: 当函数的参数是接口类型引用时,如果接口中的方法不超过3个。可以通过匿名内部类来完成参数的传递。 其实就是在创建匿名内部类时,该类中的封装的方法不要过多,最好两个或者两个以内。-6:抽象类的理解1:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。 2:抽象方法只定义方法声明,并不定义方法实现。 3:抽象类不可以被创建对象(实例化)。 4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后, 该子类才可以实例化。否则,该子类还是一个抽象类。 5: 抽象类只能单继承。 -7:面向对象和面向过程
15、的区别,面向对象的三个特征: 封装,继承,多态封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。将变化隔离;便于使用;提高重用性;安全性。封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。 继承:提高了代码的复用性,让类与类之间产生了关系,提供了另一个特征多态的前提。多 态:函数本身就具备多态性,某一种事物有不同的具体的体现。 父类引用或者接口的引用指向了自己的子类对象。/Animal a = new Cat(); 多态的好处:提高了程序的扩展性。 多态的弊端:当父类引用指向子类对象时,虽然提高了扩展性,但是只能访问父类中具备的方法,不可以访问子类中特有
16、的方法。(前期不能使用后期产生的功能,即访问的局限性) 多态的前提: 1:必须要有关系,比如继承、或者实现。 2:通常会有覆盖操作。 -8:try.catch.finallytry后面+可能出现问题的代码(里面代码越少越好)可以一个try多个catch一旦try中出现问题,会抛出问题catch+捕获异常名+异常处理(简单提示),然后结束try继续执行后面的语句在J7新特性中可以单个catch代码块捕获多个异常(1,处理方式单一,符合开发要求2,多个异常必须平级关系)平级按先后顺序,父类的异常要放到下面finally+设置代码一定会运行的代码RuntimeException及其子类,是运行时异常
17、。-9:对反射暴力反射的理解、反射的理解和应用、获取字节码的三种方式,以及主要用在什么什么地方、用反射创建对象的两种方法?反射技术:其实就是动态加载一个指定的类,并获取该类中的所有的内容。而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员。简单说:反射技术可以对一个类进行解剖。 反射的好处:大大的增强了程序的扩展性。获取这个Class对象,有三种方式: 1:通过每个对象都具备的方法getClass来获取。弊端:必须要创建该类对象,才可以调用getClass方法。 2:每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该
18、类。 前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。 3:使用的Class类中的方法,静态的forName方法。 指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可。 创建对象的两种方式(其实就是对象在进行实例化时的初始化方式): 1,调用空参数的构造函数:使用了Class类中的newInstance()方法。 2,调用带参数的构造函数:先要获取指定参数列表的构造函数对象,然后通过该构造函数的对象的newInstance(实际参数) 进行对象的初始化。 / 私有方法不能直接访问,因为权限不够。非要访问,可以通过暴力的方式。 method
19、.setAccessible(true);/一般很少用,因为私有就是隐藏起来,所以尽量不要访问。 -10:什么是数组、数组和集合的区别、Collection 和 collections的区别、List和Set有什么区别、TreeSet怎样保证元素的唯一性、迭代器的特点。Collection 和 Collections的区别: Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列静态方法,实现对集合的查找、排序、替换、线程安全化(将非同步的集合转换成同步的)等操作。 Collection是个java.util下的接口,它是各种集合结构的父接口,继承于它的接口主
20、要有Set和List,提供了关于集合的一些操作,如插入、删除、判断一个元素是否其成员、遍历等。 -11:面向对象编程思想-12:访问控制符公开:public 同类 同包 子类 不同包 所以人都可访问默认:defualt 只向同包同类放开 同一个包中都能访问私有:private 只有当前类可以访问保护:protected 同包都能访问,不同包的子类可以访问-13:接口能继承类吗?接口和抽象类、说说接口和抽象类的特征和区别成员区别:抽象类 可以有变量,常量,有抽象方法和非抽象方法接口:只能是常量,和抽象方法关系的区别:类与类:单继承,可以多层继承类与接口:单实现或者多实现接口与接口:继承关系,可以
21、多继承设计理念的区别:抽象类被继承体现的是"is a "的关系,是共性关系接口被实现体现的是“like a”的关系,扩展功能-14:介绍一下io、IO流的体系和理解、如何使用字节流的?什么时候会用到转换流呢?IO流的flush和close方法的作用和区别、请说明字符流和字节流的区别在哪儿?readLine实现的机制是什么? bufw.flush();/仅对缓冲区进行刷新,可以让数据到目的地中。刷新之后流对象还可以继续使用。bufw.close();/关闭流对象,但是先刷新一次缓冲区,关闭之后流对象不能再使用1.让流变成垃圾这样就可以被系统回收2.通知系统去释放该文件相关的资
22、源flush()是刷新流,把流中数据存进目标,close()是关闭流资源 /readLine底层原理还是read方法,先读取字符将字符存入一个字符数组,读取到换行标志:换行“n”,回车“r”或者回车后直接换行,就将字符数组转成字符串返回包含改行内容的字符串,不包含任何终止符,如果已达到末尾,返回null字符流=字节流+编码表-17:线程通信的理解、线程的状态、为什么会有多线程的安全问题、多线程安全问题的解决办法、创建线程有几种方式,那种方式比较好,为什么、同步的前提、说说你对死锁的理解同步的前提:必须是多线程。操作一个共享数据,该数据被多条语句操作同步:效率低,如果出现嵌套同步,就容易产生死锁
23、死锁:指俩个或者以上的线程在执行过程中,因为争夺资源产生的一种互相等待现象run:仅仅是封装了被线程执行的代码,直接调用的普通方法,start:首先启动了线程,然后由jvm去调用该线程的run()方法线程状态: 新建:start() 运行:具备执行资格,同时具备执行权; 冻结:sleep(time),wait()notify()唤醒;线程释放了执行权,同时释放执行资格; 临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权; 消亡:stop() 创建线程的第一种方式:继承Thread ,由子类复写run方法。第二种方式:实现一个接口Runnable 步骤: 1,定义类实现Runnable
24、接口。 2,覆盖接口中的run方法(用于封装线程要运行的代码)。 3,通过Thread类创建线程对象; 4,将实现了Runnable接口的子类对象作为实际参数传递给Thread类中的构造函数。 为什么要传递呢?因为要让线程对象明确要运行的run方法所属的对象。 5,调用Thread对象的start方法。开启线程,并运行Runnable接口子类中的run方法。 Ticket t = new Ticket(); 实现接口的好处:避免了java单继承带来的局限性,适合多个相同的代码去处理同一个资源,把线程和程序代码,数据有效分离,较好的体现了面向对象的设计思想。安全问题产生原因:多个线程操作一个拥有
25、多条语句的共享数据,产生数据混乱解决:加上同步 -18:StringBuffer和StringBuilder的区别StringBuilder和String对象都可以很方便的处理字符串,他们具备各自的特点,如下:String具有以下五个特点:1.String是引用类型,在堆上分配内存。2.String对象一旦生成,就不可改变(Immutable)。3.String提供了大量便捷的字符串操作函数。4.String运算时会产生一个新的实例。5.在程序中定义相等运算符(=)和(!=),可以方便比较String对象的值(而不是引用)。StringBuilder具有以下两个特点:StringBuilder
26、对象是动态对象,允许扩充它所封装的字符串中的字符数量。StringBuilder可以用于修改StringBuilder中的内容。由于String对象一旦声称,就不可改变,所以每次使用System.String类中的方法时,都需要在内存中创建一个新的字符串对象,这会分配新的空间给新的对象。如果对字符串执行重复修改,创建一个新的String对象导致 的系统开销可能会非常昂贵。如果不创建新的对象,只是修改字符窜,则可以使用StringBuilder类。StringBuilder类型可以很好的解决字符串操作的性能问题,在它声称String对象之前,将不会产生任何String对象。StringBuffe
27、r是同步的,线程安全的StringBuilder是不同步的,线程非安全的,执行速度快-20:If 和 switch有什么区别,以及在什么时候使用Switch if:能判断具体的值,区间和boolean类型表达式,switch:只能对具体的值进行判断,值的个数是确定的,byte,short,int,char。if判断是遍历性的,代码执行效率是不高的。而switch.case会生成一个跳转表来指示实际的case分支的地址,而这个跳转表的索引号与switch变量的值是相等的。在确切知道条件结果,并且结果有限下的条件下可以使用switch,如枚举在不能确切表示结果的情况下,或者处理复杂的逻辑关系最好用
28、if.else,在使用switch时候一定要注意break的使用。switch语句特点: 1、switch语句选择的类型只有四种:byte,short,int,char。 2、case与default没有顺序。先执行第一个case,没有匹配的case执行default。 3、结束switch语句的两种情况:遇到break,执行到switch语句结束。 4、如果匹配的case或者default没有对应的break,那么程序会继续向下执行,运行可以执行的语句,直到遇到break或者switch结尾结束。 5、进入switch语句后,执行顺序是先执行case,然后从上到下,最后再执行default。
29、即使default放在case上面,执行顺序也不变。-21:内省的作用InstroSpector->JavaBean->特殊的Java类内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。-22:讲一讲异常体系以及异常的处理原则。异常和错误的不同?final、finally、finanlize()的区别、编程中遇到过异常吗,都遇到了哪些异常,请你简述一下你遇到
30、的异常以及解决方案。throw和throws的区别throwable类中主要有Exception和error两大子类,erro是不可处理的严重异常Exception中RuntimeException是运行异常,如角标越界,空指针异常是代码出问题必须进行处理,否则运行出错另一类是编译异常,编译时eclipse会提醒捕获或者抛出final是修饰符,被final声明的变量是常量,不能修改只能读取,修饰方法不能被继承finally异常处理时提供 finally 块来执行任何清除操作,如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(一定会执行的语句)。 f
31、inalize是方法名,finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作在Object中定义,子类覆盖他可以整理系统资源和其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。throw和throws的区别:throws针对那些没有权限处理的异常进行抛出,在方法和类上抛出的是异常类名,可抛多个throw 是在方法内抛出的异常对象-23:readLine 是字节流的方法吗?readLine方法是字符流BufferedReader类中的方法read方法是字节流InputStream的方法。-24:说一下拷贝一个MP3从C盘到D盘的思路-
32、25:什么情况下要用flush();flush刷新就是把缓冲区字符全部写入到目的地中去,write和bufferedwritewrite只是将数据输出到缓冲区,还没有输出到目的地。对于循环多次字符输出流需要刷新。因为close()就是关闭流之前刷新流。只有write和bufferedwrite需要, 因为操作的文件大于1k,需要循环几次才能写入完毕,所以需要每次循环最后刷新一下。当循环一次就足够时,只在最后需要close(),关闭留并且刷新。-26:成员变量局部变量以及静态变量的区别?成员变量是作用于整个类的,成员变量有默认初始化值,只能被对象调用对象的建立而建立,存在于对象所在的堆内存中,随
33、着对象的消失而消失局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效,存在与栈内存中,作用的范围结束,变量空间会自动释放局部变量没有默认初始化值,先定义,赋值后才能被使用在使用变量时需要遵循的原则为:就近原则 首先在局部范围找,有就使用;接着在成员位置找静态变量 静态变量随着类的加载而存在,随着类的消失而消失,存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。可以被对象调用,还可以被类名调用。成员变量也称为实例变量。 静态变量也称为类变量。-27:装饰设计模式和继承有什么区别?什么是装饰设计模式:当想要对已有的对象进行功能增强时,可以定义类,将已有对象传入,基于已有
34、的功能,并提供加强功能。那么自定义的该类称为装饰类。装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的对象的功能,提供更强的功能。/穷的时候吃饭简简单单的吃饭 class Personpublic void chiFan()System.out.println("吃饭");/富裕后吃饭 吃饭前来杯酒吃饭后来根烟 但是这中间的过程还是有吃饭class SuperPersonprivate Person p;public SuperPerson(Person p)this.p=p;public void superChiFan()/吃饭前来杯开胃酒增加食量System.o
35、ut.println("开胃酒");p.chiFan();/吃完饭后来根烟System.out.println("来根烟");public class PersonDemopublic static void main(String args)Person p=new Person();SuperPerson sp= new SuperPerson(p);sp.superChiFan();装饰是构造函数参数传递进行增强如果为了某个功能而产生子类(继承)那么那个体系是非常臃肿的装饰模式比继承要灵活。避免了继承体系臃肿。而且降低了类于类之间的关系。装饰类因为
36、增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。所以装饰类和被装饰类通常是都属于一个体系中的。-28:代理是什么?动态代理的介绍。如何创建动态代理?你对动态代理和静态代理的理解? 动态代理:本来应该自己做的事情,却请了别人来做,被请的人就是代理对象。动态代理:在程序运行的过程中产生这个对象。*:而程序运行过程中产生对象其实就是反射,所以动态代理其实就是通过反射生成一个代理Proxy类中有一个方法可以创建动态代理对象,newProxyInstance(ClassLoader loader, Class<?> interfaces, InvocationHandler
37、h) 返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。定义一个MyInvocationHandler实现InvocationHandler接口 静态代理通常只代理一个类,动态代理是代理一个接口下的多个实现类。 静态代理事先知道要代理的是什么,而动态代理不知道要代理什么东西,只有在运行时才知道。 动态代理是实现JDK里的InvocationHandler接口的invoke方法,但注意的是代理的是接口,也就是你的业务类必须要实现接口,通过Proxy里的newProxyInstance得到代理对象。 还有一种动态代理CGLIB,代理的是类,不需要业务类继承接口,通过派生的
38、子类来实现代理。通过在运行时,动态修改字节码达到修改类的目的。-30:类加载器的使用、三大类加载器、委托机制的理解、动态代理反射有什么关系、加载器和反射什么关系类加载器:负责将.class文件加载到内存中,并为之生成对应的Class对象类加载器的组成:Bootstrap ClassLoader 根类加载器也称为引导类加载器,负责Java核心类的加载,比如System,String等,在JDK中JRE的lib目录下rt.jar文件Extension ClassLoader 扩展类加载器负责JRE的扩展目录下中jar包的加载在JDK中JRE的lib目录下ext目录System ClassLoade
39、r 系统类加载器负责在JVM启动时加载来自java命令的class文件,以及classpath环境变量所指定的jar包和类路径。反射:Java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所以属性和方法:对于一个对象都能调用他的任意属性和方法,这种动态获取信息以及动态调用对象的方法的功能成为java语言的反射机智。-32:银行系统哪里用到了单例,问银行卡上有账号是不是单例-33:在枚举种,可以使用抽象方法么?枚举能继承类吗?说说枚举和单利设计模式的区别、枚举是否可以继承类单例模式中是一个类只有一个实例,枚举是一个类有多个实例,但不是无限个,而是有限个实例可以使用抽象方法,要定义为抽象
40、类,在创建实例时加入匿名内部类,不能,通过JDK5提供的枚举来做枚举lei,所有枚举类都是Enum的子类可以实现接口,但不能继承类,因为所有枚举类都继承自java.lang.Enum(由编译器添加),同时java不支持多继承。枚举类的第一行上必须是枚举项,最后一行枚举项后面的分号 可以省略的,但是如果枚举类有其他东西,这个分号就不能胜率。建议不要省略。枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举类也可以有构造方法,但是枚举项必须重写该方法.-34:你还知道其他的设计模式么?分别介绍一下 -35:java的特点是什么? Java语言特点:1.可以跨平台上运行,
41、只要这个平台有JAVA虚拟机。2.面向对象编程面向对象编程的好处就是能够在语言级别模拟现实世界的场景,简化开发。3.简单易用、安全可靠、使用率排第一4.java语言在一定程度上能够称为动态语言,由于反射机制,让java能够在运行时再获取相应类型信息,大大减少开发的代码量的同时。-37:staitc代码块、构造代码块、构造函数的作用与执行顺序(还问了static代码块的使用与作用)、构造函数与一般函数的区别,静态代码块特点-38:为什么内部类在局部位置上只能访问局部中被final修饰的局部变量局部变量必需被final修饰,即声明为最终类型。因为内部类的生命周期要比局部变量的时间长,局部变量时在栈
42、里面,随着方法调用完毕而消失,内部类存储在堆内存中,只有当对该类的引用消失时,内部类才会被系统垃圾处理器回收,也就是说内部类可能会调用到已经消失的属性,因此内部类不能访问方法中的局部变量。为了让数据能继续使用,就用final修饰,此时局部变量常驻在内存中直到 JVM退出,便能被内部类访问。-39:重载与重写区别方法重写:在子类中,出现和父类一模一样的方法声明的现象方法重载:同一个类中,出现方法名相同,参数列表不同的现象方法重载能改变返回值类型,因为它和返回值类型无关Override:方法重载Overrload:方法重写-40:|、&与|、&&的区别-41:接口能继承类吗
43、?能-43:int和Integer的不同;一个是基本数据类型一个是引用数据类型Integer i5 = 127;/java在编译的时候,被翻译成-> Integer i5 = Integer.valueOf(127);两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为falsejava在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存int 是基本数据类型Integer是其包装类-44:同步代码块和同步修饰符
44、有什么不同同步代码快是要被同步的代码同步修饰符是放在函数名或者方法上的synchronized 修饰的方法表示同一时间只能有一个线程进入到这个方法的方法块里面其他的线程需要等待直到占用的那个线程离开这个方法-45:函数特点类名首字母大写,具有封装性,复用性,提高安全性,可以简化代码-46:数组排序有几种-48:存储了一个相同的键,大家都知道常用的map是不能存储相同的键,我是想继承hashMap改写put的方法,无奈功底不够,最后是找到了map中的子类 IdentityHashMap<K,V>可以存储相同键。-49:名词提炼法恰是就是提取对象的共性内容,描述就是对具体对象的抽象-52:什么时候定义静态变量呢需要共享数据的时候-54:JDK1.5的新特性有哪些增强for循环: 高级for循环和传统for循环的区别: 高级for循环在使用时,必须要明确被遍历的目标。这个目标,可以是Collection集合或者数组,如果遍历Collection集合,在遍历过程中还需要对元素进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程分包合同的解除条件
- 篮球架购销合同的履行终止
- 工程用管桩订购合同
- 单身男女婚介合同
- 招标采购合同管理的市场研究
- 无抵押担保借款合同模板
- 户籍迁移全流程服务合同
- 债务清偿合同样本
- 合同终止协议的修改与完善
- 一次性用品订购合同
- GB 12955-2024防火门
- 铸牢中华民族共同体意识-形考任务1-国开(NMG)-参考资料
- 直播电商代运营服务协议(GMV计费模式)
- 2024-2030年中国城市更新行业发展创新模式及投资规划研究报告
- 2024-2030年中国公路养护行业改革创新模式及未来发展规划分析报告
- 北京市海淀区2024-2025学年高三上学期11月期中考试地理试题 含解析
- 西门子S7-1500 PLC技术及应用 课件 第2章 S7-1500 PLC的系统配置与开发环境
- 2024年中国瓦楞包装纸箱市场调查研究报告
- 2024年电工(高级技师)考前必刷必练题库500题(含真题、必会题)
- 健身房会员服务优化预案
- 2023年山东济南中考满分作文《今朝晴朗可喜》5
评论
0/150
提交评论