A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 小石姐姐 于 2018-4-20 11:06 编辑

                                               100条重中之重

1.Java中的数据类型:基本数据类型(整数type short  int(默认)long,浮点数float double(默认),字符char,布尔boolean),引用数据类型.转换顺序:byte,short,char->int->float->double.
2.自动类型转换(小的转换成大的);强制类型转换(一般是由大到小),有可能损失精度.
3.运算符:算术运算符(++,--,+,-,*,/,%);比较运算符(比较运算的结果都是布尔类型);赋值运算符(=,+=(+=中隐含了强制类型转换));逻辑运算符(连接布尔类型的表达式,(||/&&))
4.return有两个作用:1)结束方法 2)返回给调用者一个值
5.有明确返回值的方法的调用方式:1)直接调用(没有获取方法的返回值)   2)赋值调用   3)输出调用
6.没有返回值的方法的调用方式:直接调用
7.数组的特点(动态初始化;静态初始化):1)元素类型一致;2)元素有整数索引;3)一旦定义长度无法改变;4)能够存储基本数据类型和引用数据类型.
8.static静态关键字:用来修饰成员变量和成员方法,被所有的对象所共享,可以直接使用类名来调用,静态所修饰的成员加载优先于对象,随着类的加载而加载,随着程序的结束而销毁,静态方法不能被重写(为什么?).
9.static注意事项:静态方法:1)可以调用静态成员变量 2)可以调用静态方法 3)不可以调用非静态成员变量 4)不可以调用非静态方法   总结:静态方法只能调用静态成员;非静态方法:1)可以调用静态成员变量 2)可以调用静态方法 3)可以调用非静态成员变量 4)可以调用非静态方法   总结:非静态方法可以调用静态成员也可以调用非静态的成员.
10.在静态方法中没有this对象,因为静态的方法随着类的加载而加载,优先于所有对象.
11.this关键字指当前类所在的对象.
12.静态的优缺点:优点:1)节省内存;2)调用方便; 缺点:静态方法只能调用静态方法.
13.静态应用场景:1)多个对象使用相同的变量或方法;2)定义工具类
14.代码块:
1)静态代码块:
定义位置-类中,方法外,static修饰
执行时机-加载类时执行
执行次数-只执行一次(类加载时执行一次,且只执行一次)
作用-在加载类时进行一些初始化的操作,并且只需要执行一次(常用于驱动的加载)
2)构造代码块
定义位置-类中,方法外
执行时机-创建一个对象时,在构造方法之前执行,无论使用有参还是无参构造
作用-为所有构造方法都执行同一种操作,减少构造方法中编写重复代码.
提取构造方法中的共性,每次创建对象都会执行,并且在构造方法执行前执行
3)局部代码块
定义位置-方法中
执行时机-执行到方法中的局部代码块时
执行次数-与方法的调用次数有关
作用-控制变量的生命周期(节省内存)
4)同步代码块
15.当内存中已经加载了一个方法,那么该方法的静态代码块已经执行过(如果有),当再次创建该类的的一个对象时不会重复执行该静态代码块,而构造代码块每次创建对象都会执行一次且在构造方法前执行,局部代码块执行的次数由函数调用次数决定.
16.定义工具类:1)私有化构造函数;2)所有成员由static修饰
17.继承:从多个类中向上抽取相同的代码,形成父类,让多个类去继承这个类.
18.子类只能继承父类非私有的成员,成员就近使用,子类有就使用子类的没有就使用父类的.如果子类中的成员和父类的成员同名,使用super关键字能获取父类的成员.
19.重写和重载:
1)定义位置不同:重载咋同一个类中;重写在具有继承关系的类中
2)方法定义不同:
20.不能调用爷爷辈的同名变量,super会向上检索同名的变量,检索到后停止向上检索.
21.方法重写注意事项:1)子类不能重写父类的私有方法2)子类重写方法的权限必须大于等于父类方法的权限.
22.如果没写@Override注解,那么子类只是定义了一个同名的方法不是重写.??????
23.继承中构造方法的执行顺序:
24.this和super的区别:
this:当前对象的引用
super:子类对象的父类引用
25.继承的优缺点:
优点:提高了代码的复用性,可维护性
缺点:使程序的耦合性提高了(编程提倡高内聚低耦合)
26.当方法只使用一次的时候可以使用匿名对象,匿名对象可以调用成员变量并赋值,但是赋值并没有意义,匿名对象可以当做参数传递,但是无法再传参之前做其他的事情.
27.final所修饰的类不能被继承,不能有子类;final所修饰的方法不能被重写;final修饰的变量不能修改,是常量(被final修饰的变量是自定义常量(一般全是大写,多个单词用写划线分割),自定义常量必须初始化,可以显示初始化,也可以构造方法初始化).
28.抽象方法:不同的方法是相似的,但是具体内容又不太一样,所以我们只能抽取他的声明,没有具体的方法体,没有具体的方法体的方法就是抽象方法.
29.抽象类:有抽象方法的类必须是抽象类.一个类继承了抽象类需要重写该抽象类的所有抽象方法,否则这个类必须也是抽象类.抽象类不能创建对象(不能实例化);抽象类中可以有非抽象方法.
30.抽象类可以有成员变量,可以有常量(包括自定义常量);可以有非抽象方法和抽象方法;可以有构造方法,需要对抽象类的变量进行初始化.
31.接口是一个比抽象类还抽象的类,接口里所有的方法全是抽象方法,接口和类的关系是实现-implements.(接口的出现打破了单一继承类的现状)
32.接口成员的特点
1)只能有抽象方法
2)接口不能创建对象(不能实例化)
3)当一个类实现一个接口时,要么实现所有接口中的所有方法,要么自己是一个抽象类.
4)接口中的方法默认(只能)使用public&abstract关键字修饰,不能使用static修饰.--建议手动写上默认修饰符.
5)接口中只能有常量(包括自定义常量),接口中的默认使用public static final修饰常量.
5)接口不能定义构造方法,也不能创建对象.
33.一个接口可以同时继承对个父接口;类和类之间是单一继承,和多层继承关系;类和接口是多实现的关系;
34.接口的优点:1)一个类可以实现多个接口(类于类之间是单一继承关系),接口打破了继承的局限性;2)对外提供规则;3)降低了程序的耦合性,可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发效率.
35.当父类可以描述子类时,适合定义成类;当父类只是用于扩展子类的某种功能,而不能完全描述子类时需要把父类改成接口.
36.接口和抽先类的区别:
1)共性:不断抽取,抽取出抽象的概念.
2))区别:类与接口是实现关系,一个类可以实现多个接口.类与抽象类是单一继承,多层继承关系;抽象类可以有成员变量,也可以有常量,接口只能有常量.抽象类可以有抽象方法,可以有非抽象方法,接口只有抽象方法,且有默认的public abstract 的默认修饰;抽象类可以有构造方法,用于初始化抽象类成员,但不能创建对象.接口不能有构造方法,也不能创建对象.
37.多态的前提:1)子父类的继承关系2)方法的重写3)父类引用指向子类对象
38.动态绑定:对象调用的非静态的成员方法,是根据程序运行时该对象的实际类型确定的.
39.子类可以继承父类的静态方法,但不能重写,可以定义重名的方法.
40.多态的成员特点:
1)成员变量:编译时看的是左边,运行时看的左边;--因为变量没有重写
2)成员方法:编译时看的是左边,运行时看右边;
3)静态方法:编译时看的是左边,运行时看的也是左边;---相当于使用类名.方法名调用(静态方法不能重写).
41.多态的优缺点:
1)缺点:无法直接访问子类特有的成员
2)可以提高可维护性(多态前提所保证的)和复用性,提高代码的可扩展性.
42.两个接口中有同名同参数列表不同返回值的方法,那么实现类不能同时实现这两个接口
43.this可以拿到父接口的成员,super只能拿到父类的成员.
44.避免在父类和父接口中定义同名的成员变量(常量),避免在父类和父接口中定义同名同参数列表的方法.
45.接口名.成员,也能调到接口中的成员.
46.避免创建类的对象的两种方法:1)私有化构造函数2)定义成抽象类
47.相同包下的类可以直接访问,不需要做其他操作;不同包之间的互相访问1)使用类的全名2)使用关键字import导包(其实是导的包中的类).*代表通配符,代表导入了这个包下的所有类,并没有导入子包下的类(*只能通配类名,不能匹配文件夹)
48.构造代码块定义在类中的成员位置,是构造方法中的公共代码提取出来的,会先于构造方法的执行,并且构造代码块每次创建对象都会执行;静态代码会随着类的加载而加载,且只加载一次,生成字节码文件时会执行一次,常用于加载驱动程序和给静态变量赋值.静态代码块会先于构造代码块执行,构造代码块会先于构造方法执行.
49.抽象类中不定义抽象方法,那么这个类定义成抽象类可以达到禁止创建本类对象的作用,且本类中的方法让子类直接使用(禁止实力化类的方式有两种:1)私有化构造方法2)定义成抽象类)
50.类与类:单一多层继承;
类与接口:多实现;
接口与接口:多继承.
51.类什么时候加载?运行时加载,编译时产生的class文件在硬盘上,运行时加载进内存
52.子类继承父类时super()是用来加载父类进内存的并进行初始化(所有内容,假如父类中定义了变量,那么会初始化该变量,根据不同的数据类型进行赋值,初始化后父类中的非私有的东西才能用.)
53.方法重写和重名方法?如果是子类中的定义了一个与父类中非私有方法的同名方法,那么这就是方法重写,如果子类中定义了一个与父类中私有方法同名的方法那么这个方法就仅仅是和父类同名了,并不是重写.子类可以重写父类非静态方法,子类只能继承父类的静态方法,不能重写父类静态方法,同时子类不能重写父类的私有方法,但是可以定义和父类同名的方法,调用时调用的是子类的方法.
54.继承使得子类能使用父类的成员,(类与类之间的继承是单一多层继承,接口是使用打破了类之间的单一继承关系,类可以实现多个接口),多态使得父类(接口)引用可以接收子类的对象,将一个抽象的概念具体化,将抽象的概念具体化成为功能,并实现.多态的强制向下转换使得抽象的大类又能转换成具体的一个小类,并实现小类中的特有的功能,这就使得一个具体的实现类可以传给不同的父类引用使用不同的方法,同一个父类可以接受不同的子类对象具体化成任意一个子类对象。面向对象的封装、继承、多态,解决了很多问题。
55.多态使用时当子类和父类有同名变量使用的是父类的成员变量;成员方法使用的是子类的成员方法,静态方法使用的是父类的同名静态方法。
56.静态方法是先于构造方法执行的,构造方法在创建对象时才执行,但是静态方法在加载类时就执行了。所以在静态方法里面不能有this和super关键字。
57.在多态中如果使父类的引用指向子类对象去调方法,对于子类来说只能调到重写的父类的方法(没有重写的会去调用父类中的方法),其他的全是调到父类的成员(包括重名的成员变量和静态方法)
58.在内部类当中,可以直接访问外部类的成员,包括私有成员和静态方法.
59.匿名内部类:在方法中直接创建一个类的子类对象.(匿名的方式创建一个父类(父接口)的对象,内部类:在方法的内部创建的对象)
60.使用通配符会不会给内存带来压力?--不会,是匹配性加载的
61.class文件是不是在编译时产生的(class文件不就是在内存的方法区吗?)那不就是类在编译时就加载进内存了吗?不是,class文件刚创建是在硬盘的,运行时才进内存.
62.覆盖只发生在函数中,变量不存在覆盖,如果子类中定义了与父类相同的成员变量,变量不会存在重写,子类实例对象中会有两份相同名称的实例变量,调用时,父类的会被隐藏。如果想调用父类被隐藏的成员变量,那就要使用super关键字。
同样,子类会继承父类的成员方法作为自己的成员方法,如果子类定义了与父类相同的成员方法(重写),多态中会调用子类自己的成员方法。
63.多态中父类的概念是抽象的,所以它就仅仅是个引用,只有引用到实例对象,它才真正实现了自己。
64.Ctrl+left/right,向后/向前跳一个单词.
65.输出一个对象默认输出这个对象的toString()方法.
66.获取字节码对象的方式:1)通过Object类的getClass()方法获取;2)通过类名调用属性class来获取;3)通过Class类的静态方法forName()类获取.
67.一个类所创建出来的对象的字节码对象都是同一个(地址都相同).
68.基本数据类型使用”==”比较的是数据是否相等,引用型数据类型比较的是地址值.
69.Shift+Alt+M:封装代码.
70.集合只能存对象.
71.SimpleDateFormat这个类用于字符串和日期的相互转换,Date类用于获取当期啊日期距离1970年的毫秒时长,或者可以给定一个Long类型的值,表示从初始是时间经过了这个值的时长.Calendar用于处理一个确定的日期中的各项属性,可以给年份或者月份或者日期进行赋值或者加减.
72.Calendar类中的月份是从0开始的,星期是从一开始的,比如星期日是int类型的1.
73.在增强for中不能修改集合长度,否则会发生并发修改异常,因为怎增强for底层就是迭代器实现的.
74.集合的体系结构:由于不同的数据结构(数据组织形式,存储方式),所以java提供了不同的集合.但是由于不同的集合他们的功能相似,所以不断的向上提取,将共性提取出来,这是集合体系形成的原因.
75.ArrayList不检查是否重复,永远能添加成功.集合只能添加引用数据类型.
76.使用迭代器遍历集合时如果要修改集合长度(增删元素,清空集合),要使用迭代器来修改集合,迭代器修改集合会自动同步到原集合中(迭代器操作的是原集合的副本,单独操作原集合,会出现并发修改异常,但是操作迭代器中的内容,这个修改会同步至原集合中)
77.多态可以使父类接受不同的子类对象,进行相同的数据处理,例如定义一个方法接受一个父类引用型参数,就能使用这个父类的引用对不同的子类对象进行处理.
78.泛型是一种代码约束机制,只在编译时期有效,在字节码文件中不存在泛型.
79.静态方法只能使用静态方法自己声明的泛型,类声明的泛型,类中的非静态方法可以使用,非静态方法可以使用自己声明的泛型也可以使用类中声明的泛型.List<?  extends A>和List<?  super A>和List<?>用在方法的形参上,表示该方法可以接受不同的泛型(与多态类似),其中前两个用于接受具有继承关系的泛型,最后一个可以接受任意类型的泛型.
80.使用迭代器修改集合中的数据时要使用Iterator接口的子接口中的方法,因为Iterator接口继承自Collection接口,Iterator接口中没有添加的方法(只有删除和hasNext()和next()和forEachRemaining()方法),Iterator子接口的ListIterator中有自己的添加和修改的方法.
81.增强for循环可用于在循环时修改集合中的元素的内容,但是不能修改集合的长度.
82.当一个确定的值和一个不确定的对象比较时一般把确定的值写在前面,这样可以避免空对象调用equals方法抛出异常.例如:假如s代表一个字符串对象,如果使用s.equals("xxx");当s是一个空对象时会抛出异常,应该这样写"xxx".equals(s).
83.遍历List集合有四种方法:1)转数组2)Iterator3)增强for循环4)普通for循环;遍历Set集合有三种方法:1)转数组2)Iterator3)增强for循环.
84.Set集合的特点:1)无序(存储和读取的顺序有可能不一样,并不是指存储的时候是无序的);2)不允许重复值,并且最多允许一个null元素,存储重复值会返回false,List集合永远能存储成功,没有返回值;3)Set集合没有索引.
85.写代码的时候先写思路,在写代码,代码只是一种实现方式,重要的是想法.
86.面试题:Collection与Collections的区别:Collection是集合体系的最顶层,包含了集合体系的共性;Collections是一个工具类,方法都是用于操作Collection.
87.子类创建对象时会先加载父类 .
88.Map和Collection的区别:Map是一个双列集合,常用于处理有对应关系的数据,key是不可以重复的;Collection是单列集合,Collection有不同的子体系,List允许有重复且有序,Set不允许重复且无序.
89.泛型的数据类型的控制是在编译时期,跟数组一样,是不是数组也能利用反射存储不同的数据类型?不是,泛型只是对集合中传入数据的一种提前的检测,数组只能存储一种数据类型.
90.可变参数,本身是一个数组,定义格式:形参数据类型...形参名.可变参数只能接收同一种数据类型,可变参数的定义位置必须是在方法形参列表的最后一个.
91.Map接口中的keySet()方法返回的map集合中的键值的一个set集合;entrySet()方法返回的是对象,是map中每个元素的一个对象,每个对象都有对应的key和value值,要使用返回的这个对象去调用.
92.打印集合名字能直接打印集合中元素(集合重写了toString方法)
93.set去重原理:先根据生成的哈希值判断是否是相同的对象,在根据对象的地址判断是不是相同的对象,然后根据对象内容判断.(哈希值相同的情况下,对象地址或者对象内容相同那么保存失败,返回false).
94.Error:出现的不能处理的严重问题;Exception:可以处理的问题.发生在编译或者异常时.
95.Try....catch执行顺序:
首先执行try语句,如果发现异常,异常下面的代码不在执行,直接跳入catch语句中,catch语句结束后,整个try....catch语句结束;如果没有发生异常,那么只执行try语句,不会执行catch语句.finally用于释放资源,清理垃圾,无论try..catch怎么执行finally都会最终执行,即使不执行catch,finally都会执行.
96.抛出异常:将异常交给方法第调用者处理.当要处理多个异常时,要先处理子类的异常,在处理父类的异常.
97.异常的分类:编译时异常,运行时异常,运行时异常继承了异常父类.
98.Throws是一种处理异常的方式,把异常抛出,由调用者来处理;throw是用来制造异常,并且结束方法.注意:如果抛出的是编译时期异常,必须在方法声明中抛出异常(throws).throw用于告诉方法的调用者这个方法可能会产生异常,而throw是方法内真正抛出这个异常.
99.递归的注意事项:1)递归一定要有出口;2)递归次数不宜过多;这两个注意事项容易造成内存溢出.
100.递归能实现的循环都能实现,但是循环能实现的递归不一定能实现.能用循环不用递归.









0 个回复

您需要登录后才可以回帖 登录 | 加入黑马