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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© liufeng2436_01 中级黑马   /  2016-4-15 13:46  /  618 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、 对象的初始化
(1) 非静态对象的初始化
在创建对象时,对象所在类的所有数据成员会首先进行初始化。
基本类型:int型,初始化为0。
如果为对象:这些对象会按顺序初始化。
※在所有类成员初始化完成之后,才调用本类的构造方法创建对象。
构造方法的作用就是初始化。
(2) 静态对象的初始化
程序中主类的静态变量会在main方法执行前初始化。
不仅第一次创建对象时,类中的所有静态变量都初始化,并且第一次访问某类(注意此时
未创建此类对象)的静态对象时,所有的静态变量也要按它们在类中的顺序初始化。
2、 继承时,对象的初始化过程
(1) 主类的超类由高到低按顺序初始化静态成员,无论静态成员是否为private。
(2) 主类静态成员的初始化。
(3) 主类的超类由高到低进行默认构造方法的调用。注意,在调用每一个超类的默认构造
方法前,先进行对此超类进行非静态对象的初始化。
(4) 主类非静态成员的初始化。
(5) 调用主类的构造方法。
3、 关于构造方法
(1) 类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在继承此类时,需要在子类中显式调用父类的某一个非默认的构造方法了。
(2) 在一个构造方法中,只能调用一次其他的构造方法,并且调用构造方法的语句必须是
第一条语句。
4、 有关public、private和protected
(1) 无public修饰的类,可以被其他类访问的条件是:a.两个类在同一文件中,b.两个类
在同一文件夹中,c.两个类在同一软件包中。
(2) protected:继承类和同一软件包的类可访问。
(3) 如果构造方法为private,那么在其他类中不能创建该类的对象。
5、 抽象类
(1) 抽象类不能创建对象。
(2) 如果一个类中一个方法为抽象方法,则这个类必须为abstract抽象类。
(3) 继承抽象类的类在类中必须实现抽象类中的抽象方法。
(4) 抽象类中可以有抽象方法,也可有非抽象方法。抽象方法不能为private。
(5) 间接继承抽象类的类可以不给出抽象方法的定义。
6、 final关键字
(1) 一个对象是常量,不代表不能转变对象的成员,仍可以其成员进行操作。
(2) 常量在使用前必须赋值,但除了在声明的同时初始化外,就只能在构造方法中初始化

(3) final修饰的方法不能被重置(在子类中不能出现同名方法)。
(4) 如果声明一个类为final,则所有的方法均为final,无论其是否被final修饰,但数据
成员可为final也可不是。
7、 接口interface (用implements来实现接口)
(1) 接口中的所有数据均为 static和final即静态常量。尽管可以不用这两个关键字修饰
,但必须给常量赋初值。
(2) 接口中的方法均为public,在实现接口类中,实现方法必须可public关键字。
(3) 如果使用public来修饰接口,则接口必须与文件名相同。
8、 多重继承
(1) 一个类继承了一个类和接口,那么必须将类写在前面,接口写在后面,接口之间用逗
号分隔。
(2) 接口之间可多重继承,注意使用关键字extends。
(3) 一个类虽只实现了一个接口,但不仅要实现这个接口的所有方法,还要实现这个接口
继承的接口的方法,接口中的所有方法均须在类中实现。
9、 接口的嵌入
(1) 接口嵌入类中,可以使用private修饰。此时,接口只能在所在的类中实现,其他类不
能访问。
(2) 嵌入接口中的接口一定要为public。
10、类的嵌入
(1) 类可以嵌入另一个类中,但不能嵌入接口中。
(2) 在静态方法或其他方法中,不能直接创建内部类对象,需通过手段来取得。
手段有两种:
class A {
class B {}
B getB() {
B b = new B();
return b;
}
}
static void m() {
A a = new A();
A.B ab = a.getB(); // 或者是 A.B ab = a.new B();
}
(3) 一个类继承了另一个类的内部类,因为超类是内部类,而内部类的构造方法不能自动
被调用,这样就需要在子类的构造方法中明确的调用超类的构造方法。
接上例:
class C extends A.B {
C() {
new A().super(); // 这一句就实现了对内部类构造方法的调用。
}
}
构造方法也可这样写:
C(A a) {
a.super();
} // 使用这个构造方法创建对象,要写成C c = new C(a); a是A的对象。
11、异常类
JAVA中除了RunTimeException 类,其他异常均须捕获或抛出

16 个回复

正序浏览
很不错,前面的差不多度总结了.
回复 使用道具 举报
不错,给你赞一个
回复 使用道具 举报
不错!不错!!!!!!!!!!!感觉好牛逼的样子!!!
回复 使用道具 举报
1、面向对象的理解
        面向对象是基于面向过程的。在开发过程中,要完成特定的功能就去找相应的对象,如果找不到就创建相应的对象,使用对象,维护完善对象。
2、面向对象和面向过程的区别
        面向过程强调的是功能行为;
        面向对象将功能封装成对象,强调的是具备功能的对象
3、abstract与哪些关键字不能共存为什么
        private:私有的方法是不可见的,无法被复写
        final:被final修饰的方法是最终方法,无法被复写
        static:被static修饰的方法,要随类加载到方法区,由于抽象方法没有方法体所以不能加载
4、static的特点
        随着类的加载而加载;优先于对象存在;被所有对象所共享;可以直接被类名所调用。
        静态方法只能访问静态成员,非静态方法既可以访问静态也可访问非静态
        静态方法中不可以定义this、super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this;
5、类与类、类与接口、接口与接口的关系
        继承,继承或实现,继承
6、final、finally、finalize的区别
        final:可以修饰类、方法和变量,被final修饰的类无法被继承,方法无法被复写,变量为常量只能赋值一次
        finally:异常处理trycatch时使用,可以添加也可以不添加,用于执行一些必须执行的代码,如关闭资源等
        finalize:Object类中的方法,其中定义了对象要被垃圾收集器回收之前要做的相关的清理工作
7、什么是多态,多态的好处和弊端
        多态可以理解为事物存在的多种体现形态。父类的引用指向了自己的子类对象;父类的引用也可以接收自己子类的对象。
        好处:提高了代码的扩展性
        弊端:父类的引用只能访问父类中有的成员(父类引用无法调用子类中特有的方法)
8、wait()和sleep()的区别
        (1)wait是Object类中的方法,sleep是Thread类中的方法
        (2)sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
        (3)wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
         (4)sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
9、网络编程的三要素
        (1)IP:网络中设备的标识
        (2)端口:用于标识设备中接收数据的网络应用程序具体是哪一个,有效端口0~65535,0~1024为系统端口及保留端口
        (3)传输协议:UDP和TCP协议,信息通讯的规则
10、UDP和TCP的区别
        UDP:不需要建立连接,是不可靠协议,将数据及源和目的封装到数据报中,每个数据报限制在64k以内,发送数据较少,速度快
        TCP:通过三次握手建立连接通路,是可靠协议,可进行大量的数据传输,效率较低
11、什么是暴力反射
        我们知道java的特性之一就是封装,将对象的属性和具体实现隐藏起来,只对外提供公共方法访问,private修饰的内部属性和方法对我们是不可见的。
        我们通过正常的方法是无法获取以及修改的,可是通过反射却可以强制获取并做一些修改,这就破坏了封装性,这就是所谓的暴力反射
12、反射获取字节码对象方式、创建对象的两种方式
        获取字节码方式三种:
        (1)类名.class,例如:System.class
        (2)对象.getClass(),例如:new Date().getClass();
        (3)Class.forName("类名"),例如:Class.forName("java.util.Date");
        创建对象的两种方式:
        (1)直接用字节码创建对象,只能调用默认的构造方法:字节码.newInstance();
        (2)获取构造方法Constructor,然后调用构造方法创建,可以通过参数不同调用不同的构造方式
13、怎么理解反射,反射的应用
        反射就是把Java类中的各种成分映射成相应的Java类。
        一般情况下我们要解决某个问题,先找到相关的类,创建该类的对象,然后通过该对象调用对应的方法来解决问题。
        反射是一个正好相反的过程,开始可能并没有类可以解决这个问题,而我们却先用一个当时可能并不存在的方法解决了这个问题,后来才有的这个类。
        这其实就是框架的原理,现有的框架再有的解决问题的类。框架描述了整体,制订了功能方法的规范,具体的实现之后按照这个规范编写。这些都需要靠反射来完成。
        使用框架有良好的扩展性,某部分功能的优化不需要涉及程序整体,只需要修改特定的部分就好了,然后通过配置文件,获取对应的类名,就可以了。
14、对匿名内部类的理解
        匿名内部类其实是内部类的简写形式。
        内部类是定义在类中的类,就好比我们人类,我们人类都有心脏,而心脏又有自己独特组成,可以把心脏也抽象成一个类。
        这个心脏类就是人类的内部类。如果要研究某一种心脏疾病,需要一个实例时,我们不需要知道这个患病的心脏到底是谁的,那找到的这个就是匿名的。
        匿名内部类必须要继承一个类或实现一个接口,在使用时直接父类或接口的名称创建了一个子类对象并实现其中的方法,匿名内部类其实是一个匿名的子类对象。
15、IO体系
        字节流InputStream/OutputStream
                |--FileInputStream/FileOutputStream:文件字节流,用于文件的读写操作
                |--BufferedInputStream/BufferedOutputStream:加缓冲区的字节流,用于提高效率
        字符流Reader/Writer
                |--FileReader/FileWriter:文件字符流,用于文本文件的读写操作
                |--BufferedReader/BufferedWrite:加缓冲区的字符流,用于提高效率
        转换流InputStreamReader/OutputStreamWriter:是字节流和字符流之间的桥梁
        配置文件Properties
16、集合体系
        |--Collection
                |--List:元素是有序的,元素允许重复,因为该集合体系都具有索引
                        |--ArrayList:底层数据结构是数组,查询速度快,增删操作较慢,线程不同步
                        |--LinkedList:底层数据结构是链表,查询效率较低,增删操作快,线程不同步
                        |--Vector:功能同ArrayList类似,底层也是数组,不同是线程是同步的,效率较低
                |--Set:元素是无序的,元素不允许重复,底层用到了Map
                        |--HashSet:底层hash表,存储的对象最好复写hashCode和equals方法,保证元素不会重复
                        |--TreeSet:底层二叉树,存储的对象具备比较性,有两种方法
        |--Map:数据是以键值对的形式存储的,有的元素存在映射关系就可以使用该集合,元素不允许重复
                |--HashMap:允许有null键或值,线程不同步
                |--TreeMap
                |--HashTable:类似HashMap,不允许有null键或值,线程同步
17、线程的创建方式,进程线程的理解
        两种:继承Thread或实现Runnable
        进程是一个执行中的程序,每一个程序都至少有一个执行顺序,该顺序是一个路径,或者叫一个控制单元。
        线程是进程中的一个独立的控制单元,线程在控制着进程的执行。
18、局部变量和成员变量区别
        成员变量:作用于整个类中,随对象存储在堆内存中,生命周期跟对象一样
        局部变量:作用于方法或语句中,方法或语句结束则生命周期结束,存放在栈内存中。
19、同步函数与同步代码块的区别
        它们的作用都是封装多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可参与进来。
        同步代码块:位置比较灵活,封装了操作共享数据的语句,多个线程中只有持有锁的才可以操作共享数据,需要指定一个对象作为锁
        同步方法:声明方法时加synchronized关键字修饰,同步函数使用的锁是this,持有锁的线程调用这个方法时其他线程无法调用。
20、数组和集合的区别
        数组可以存储基本数据类型和对象,它是一个线性的序列,可以快速的访问其中的元素。数组创建之后,容量就固定了,而且在其生命周期里是不能改变的
        集合只用于存储对象,集合的长度是可变的,集合可以存储不同类型的对象。集合的长度并不是固定的,可以便捷的添加删除。能够更加便捷的操作元素,功能更加强大
21、StringBuffer和StringBuilder的区别
        StringBuffer是线程安全的,StringBuilder是线程不安全的,所以效率比起来StringBuilder要比StringBuffer快。
        一般单线程的程序使用StringBuilder比较好,多线程的情况下可以自己加锁,也可以直接使用StringBuffer
22、String和StringBuffer区别
        String对象一经创建就不会发生变化了,即便是赋新值也不是在原对象的基础上改变,而是创建一个新的字符串对象,将引用指向这个新的对象,会造成空间的浪费,效率较低
        StringBuffer只创建一个对象,是在同一个实例的基础之上追加,效率更高,当需要用到String的时候toString就可以了

点评

这个很全面兄弟  发表于 2016-4-27 12:52
回复 使用道具 举报
好像还有吧,继续分享,先谢谢了
回复 使用道具 举报
可以的!
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
顶一个 努力
回复 使用道具 举报
顶起,,赞一个
回复 使用道具 举报
不错,给你个赞
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
虽然看的迷,感觉好牛逼
回复 使用道具 举报
总结的很好啊
回复 使用道具 举报
李亚东_JAVAEE 来自手机 中级黑马 2016-4-15 14:48:00
藤椅
好流弊的样子,挺你!!!
回复 使用道具 举报
真棒
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马