自我小结


一、继承、多态、方法重写

1.继承

继承就是在一个现有类的基础上,通过添加新的方法或者重定义已有的方法(重写)的方式,产生一个新的类。 

继承是面向对象的三个基本特征——封装、继承和多态之一,我们在使用java编写的每一个类都是在继承,因为在java语言中,java.lang.Object类是所有类的父类,如果我们新定义的一个类没有明确的指定是继承哪一个父类,那么java就默认它继承Object类。

 

 

继承的益处:通过继承可以降低工作量和程序的复杂性,提高程序可扩展性。

 

 

继承到的东西:通过继承,子类继承到了父类的所有公有属性和公有方法。

 

继承的关键字:extends

 

类的继承格式:public class 子类名 extends 父类名{}

 

java中,类之间可以通过extends实现继承,接口之间也可以通过extends实现继承,不同的是,一个类只能继承一个类,而一个接口则可以继承多个接口。

 

接口的继承格式:public interface子接口名 extends 父接口名,.......{}

 

 

 

2.多态

多态即“一个接口,多种实现”,在父类中声明的方法,可以在子类中进行重写 (声明为final的除外),这样,父类的引用在引用子类对象时,可以做出不同的响应。

 

多态存在的必要条件:存在继承关系和方法重写。

 

Jvm(java虚拟机)在调用方法时,是不确定调用的是子类的方法还是父类的方法,只有在调用的瞬间才知道调用的是谁的方法。

 

 

多态的作用:(1)、应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可,这样大大提高了程序的可复用性。

(2)、派生类的功能可以被基类的方法或引用的变量调用,这样提高了程序的可扩充性和可维护性。

 

 

 

3.方法重写

方法的重写:保持方法的定义不变,但是方法的内部实现和父类的不同。

 

实现方法重写的必要条件:(1)、必须要存在继承关系

(2)、子类中要重写的方法名必须要和父类的方法名保持一致,子类重写方法所带的参数要和父类方法所带的参数一致。

 

 

 

 

二、数据类型、值传递和引用传递的区别?String是什么传递?

1.数据类型

Java中的数据类型可分为基本数据类型(八种)和引用类型。

基本数据类型:

字节型 byte

整型int

长整型 long

短整型 short

字符型 char

单精度 float

双精度 double

布尔型 boolean

 

 

引用类型:主要有class(类类型,包括自己定义的类) interface 和数组。

 

 

 

2.值传递和引用传递的区别

值传递是对目标变量的值重新拷贝一份,传到新的变量中,这样形成的是两份独立的变量,如果对其中一个变量作改变是不会影响到另一个变量的值的。而引用传递则是指在创建对象时,对象名保存的是对象实例在内存中的地址,如果对对象名做修改,对象实例是不会发生改变的;

值传递是通过值的形式来传递的,而引用传递是传递地址来实现的;

值传递适用于所有的基本数据类型,而引用传递适用于所有的引用类型。

 

 

 

3.String是什么传递?

因为String属于引用类型,所以String传递属于引用传递。

 

 

 

 

三、setlistmap如何遍历,他们分别有哪些子类,map中是否可以放入nullkey或者value Setlist呢?

Setmap中的对象都是无序的,不能通过索引来取得其中的对象,只能先通过他们各自的对象得到迭代器,然后通过迭代器完成遍历;list中的对象都是有序的,因此可以直接通过索引List.get(Index)来完成遍历。

 

 

Set的子类有:AbstractSetConcurrentSkipListSetJobStateReasonsCopyOnWriteArraySetEnumSetHashSetLinkedHashSetTreeSet.

 

 

List的子类有:AbstractListArrayListAbstractSequentialListAttributeListCopyOnWriteArrayListLinkedListRoleList

RoleUnresolvedList、StackVector.

 

 

Map的子类有:AbstractMapAttributes

AuthProvider、ConcurrentHashMapConcurrentSkipListMapEnumMapHashMapHashtableIdentifyHashMap

LinkedHashMap、PrinterStateReasonsPropertiesProviderRenderingHintsSimpleBindingsTabularDataSupportTreeMapUIDefaultsWeakHashMap.

 

 

Map中可以放入nullkeyvalueSet中可包含null,但最多只有一个,不然就造成了复杂,这和集合的定义冲突;List中队null不限制,所以可以放多个null

 

 

 

四、Swing界面相关、swing组件的继承体系图,事件监听器体系图

Swing界面相关的继承体系图:

 

 

 

Swing组件的继承体系图:



 

事件监听器体系图:



 

 

 

 

 

五、递归和循环的区别?

递归:即方法调用自身的方法。

循环:当满足某个条件时,让程序不停的执行同一个方法。

递归的调用代码简洁,但是效率低,因为每一次调用都要进行压栈、保护现场和恢复现场等操作,而循环的调用的效率比递归要高,但是代码相对要复杂。

 

六、I/O流继承体系结构图和分类、文件复制的实现和原始数据类型读写

1.I/O流继承体系结构图和分类?

I/O流继承体系结构图



 

 

I/O流分类:java.io包中定义了多个流类型(类或者抽象类)来实现I/O功能,可从不同的角度对其分类:

按数据流的流动的方向不同可分为输入流和输出流;

按处理数据单位不同可分为字节流和字符流;

按功能不同可分为节点流和处理流。

 

 

2.文件复制的实现和原始数据类型读写?

文件复制的实现:文件复制其实是将一个文件以数据流的形式,通过输入数据流(InputStream)将这些数据流输入到一个中间容器(虚拟的容器)中(),在通过输出数据流(OutputStream)将中间容器中的数据流输出到目标地址的文件中,这样一个文件的复制就完成了。

 

原始数据类型读写:DataInputStreamDataOutputStream这两种流主要用来读写指定的数据类型。其中DataInputStream可以完成指定数据类型的读取,而DataOutputStream完成指定数据类型的写入。首先通过DataOutputStream中的write()方法将指定的数据类型写入到指定的目标地址中,然后再使用DataInputStream中的read()方法,读出刚刚写入到目标地址中的数据。

 

 

七、线程有种创建方式,线程在程序中有几种状态?

线程主要有种创建方式:一种是通过继承Thread类,并重写run()方法完成一个线程的创建;第二种是通过定义一个实现Runnable接口的,实现他的run()方法,来完成线程的创建;第三种方法是以匿名内部类的方式创建,即可以在一个方法中创建线程,当方法被调用时,线程即启动。

 

线程在程序中有七种状态:初始状态、可运行状态、运行状态、终止状态、阻塞状态、锁池状态、等待队列。

1.线程的实现有两种方法,不管通过哪一种方法,当我们new了一个对象后,线程就进入初始状态;

2.当该对象调用了start方法,就进入可运行状态;

3.进入可运行状态好后,当该对象被操作系统选中,获得cpu时间片就会进入运行状态;

4.运行状态后情况就复杂了

(1)run()方法或者main()方法结束后,线程进入终止状态;

(2)、当线程调用了本身的sleep()方法或者其他线程的join()方法,就会进入阻塞状态(该状态即停止当前线程,但并不释放所占有的资源)。当sleep()结束或者join()结束后,该线程进入可运行状态,继续等待os分配时间片;

(3)线程调用了yield()方法,意思是放弃当前获得的CPU时间片,回到可运行状态,这时与其他进程处于同等竞争状态,OS有可能会接着又让这个进程进入运行状态;

(4)当线程刚进入可运行状态(注意,还没运行),发现将要调用的资源被synchroniza(同步),获取不到锁标记,将会立即进入锁池状态,等待获取锁标记(这时的池里也许已经有了其他线程在等待获取标记,这时它们处于队列状态,既先到先得),一旦线程获得标记后,就转入可运行状态,等待OS分配CPU时间片;

(5)当线程调用wait()方法后会进入等待队列(进入这个状态会释放所占有的所有资源,与阻塞状态不同),进入这个状态后,是不能自动唤醒的,必须依靠其他线程调用notify()notifyAll()方法才能被唤醒(由于notify()只是唤醒一个线程,但我们由不能确定具体唤醒的是哪一个线程,也许我们需要唤醒的线程不能够被唤醒,因此在实际使用时,一般都用notifyAll()方法,唤醒有所线程),线程被唤醒后会进入锁池,等待获取锁标记。

八、Static的用法和注意事项,==equals的区别?

static用法:

Static指的是静态属性,可以是静态变量可以是静态方法,当一个变量或者方法定义为静态的时候,则可直接通过类名调用使用,而不需要创建对象。

 

static注意事项:

1.当一个方法被定义为静态的方法是,它所能使用的变量的类型也只能是定义为静态的变量,但是一个非静态的方法却可以使用静态的变量;

2.一个程序很重要的一点就是可重复性,而static的“记忆性”破环了这种可重复性,造成不同时刻运行程序的结果不同;

3.普通的local变量的存储空间分配在stack上,一次每次调用方法时,分配的空间都可能不一样,而static具有全局唯一性的特点,因此每次调用时,都指向同一块内存,这就造成一个很严重的问题——不可重入性。

 

==和equals的区别:

对于基本数据类型的变量,==判断两个变量的值是否相等;而equal不能用于基本数据类型的,只能用于类变量,对于基本数据类型要用其包装类进行比较。

 

对于对象变量,==比较的是等号两边对象在内存中存放的地址是否相等,而equals比较的是来两个对象的值是否相等,不是比较两个变量的地址是否相等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值