java重点知识的学习心得:
封装与隐藏性:
当我们定义一个对象调用一个属性的时候,有可能这个属性不满足我们日常的要求,比如动物的legs,所以我们可以在方法中对这个属性进行限制,调用对象的方法,同时将属性类型改为private,这便叫做封装。
一般有两个特点,一个是私有化属性,一个是setter/getter方法。
封装的好处是,隐藏实现的细节,更易于维护,更安全。
类就是一个封装体,封装了属性和方法。
继承:extends
当多个类(student,teacher,worker...)中,都包含多个类似的属性方法时,则每个类中都需要重复的声明这些属性方法,这时则可以把这些类似的东西封装到一个类(person)中,其他几个类extends该共有类。
子类继承了父类的方法,并对父类的方法进行改造,则称为方法重写、覆写或者覆盖。
子类继承了父类的属性 方法 构造函数。
多态性:
多态是一种编程技巧,它增加论了程序的可扩展性
比如你要做个篮子放水果,你当然不希望造这样的篮子--苹果篮子,橘子篮子,梨篮子,正常人都会想,麻烦啊,我就造个篮子,什么都能放,干嘛造那么多啊?
回归程序:你造个篮子 basket();参数是水果 fruit,这样你调用的时候就可以这样 basket(fruit f);然后往里放苹果啊,梨啊,什么都行,只要是水果类的子类
好处:这样设计你的程序,等你的参数变了的时候,只要还是水果,你就不用去改程序了,这就是可扩展性的体现
class TestInstance{
public static void main(String[] args) {
}
public void info(Person p){ //多态性
p.walk();
}
}
为什么要有包装类?
答:由于基本数据类型并不是类,所以不能够使用java类库里提供的大量方法。所以我们在程序设计上,让每一个基本数据类型都对应一个类,同时数据存储的范围还不变。这时就相当于基本数据类型具有了类的特点。这些类即为包装类(wrapper或封装类)
1、基本数据类型与对应的包装类有自动装箱、自动拆箱
如:int i = 10;
Integer i1 = i;//自动装箱
int i1 = i;//自动拆箱
2、基本数据类型、包装类---->String类:调用String类的重载的valueOf(Xxx xx)方法 ;
String类---->基本数据类型、包装类:调用相应的包装的parseXxx(String str);
注:由于String类与int基本数据类型之间没有任何关系,所以他们之间不存在强制转换。
例如:String str = "123";
int i = (int) str;//是错误的
为什么重写equals()方法?
答:object类自带的equals()方法比较的是两个对象的地址值是否相等,但是两个不同对象在堆空间中的地址值肯定不同,并且很多时候我们需要比较的是两个对象的属性值是否相同,所以需要重写equals()方法。
为什么重写toString()方法?
答:一般情况下,调用object默认的toString方法会输出”该对象所在的类@该对象实体所在堆空间中的位置“;
但是实际中,我们希望输出的是该对象的所有属性值。所以要对toString()方法进行重写。可以自动调用生成该方法。
注:toString()方法不能够写成静态的,因为子类重写父类的方法,要跟父类状态一致,因为object父类没有static,所以子类也不可以有。并且toString()方法里面有使用实例变量,所以不行,另外静态方法只能调用静态属性。
为什么要有static静态关键字,有什么用途?
代码块的作用?
答:代码块是类的第四个成员,用来初始化类的属性。只能用static来修饰,分为静态代码块与非静态代码块。
为什么使用final关键字,什么样的方法适合用final修饰?
答:final可以修饰属性、方法、类,
修饰方法的时候:说明该方法并不需要再被子类重写了;
修饰类的时候:表示这个类不需要再被继续
为什么要使用抽象类?
抽象类是用来模型化那些父类无法确定全部实现,而是通过子类提供其全部实现的对象的类。例如父类是几何图形,任何几何图形都有不同的面积计算方法。所以在父类中做个抽象的定义,在每一个子类中重写该计算面积的方法。
java中的继承方面具有怎样的特性/特点?(类和类、类和接口、接口和接口)
java中的类是单继承;java还定义了接口,它是一个功能,可以让类去实现接口,这个实现是可以多实现的;同时接口与接口之间也是继承关系,这个继承是可以多继承的。
(java中类和类的继承是单继承的,一个类只能有一个父类;而类和接口之间属于多实现,类可以实现多个接口;接口和接口之间属于多继承,一个接口可以继承多个接口。)
使用接口有什么好处?
答:通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。
通过接口可以指明多个类需要实现的方法,一般用于定义对象的扩张功能。
接口主要用来定义规范。解除耦合关系。
java的异常事件分为几类,分别是什么?
答:java程序在执行过程中所发生的异常事件可分为两类:
1.Error:java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重状况。一般不编写针对性的代码进行处理。
2.Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。如:空指针访问、试图读取不存在的文件、网络连接中断
|----编译时异常:在编译期间会出现的异常(执行javac.exe命令时,出现异常)
|----运行时异常:在运行期间出现的异常(执行java.exe命令时,出现的异常)(文件找不到、IO异常... )。
指出throw和throws的区别?
答:对于异常--抓抛模型,抛异常的时候,分为手动抛和自动抛,自动抛比如文件不存在,IO异常之类的,而手动抛需要自定义一个异常。但是不管是手动抛出还是自动抛出,最后我的异常都需要处理,即所谓的抓。抓分为throws或者是try-catch。抓抛各分为两种,可以自己组合,比如方法里可以一直throws,放到main方法中进行统一处理,也可以现场就try-catch处理掉。
【java提供了两种异常处理(抓)方式,一种是try-catch-finally,主动抛出异常,另外一种是在方法定义的时候,throws方法,一级一级逐层向上抛出异常。
而异常的抛出又分为两种(抛)方式,一种是自动抛出异常对象,一种是手动抛出异常对象,手动抛出的时候是throw方法。 throw new Exception(“...”);自动抛出的异常如文件不存在或者IO异常等等。】
java中的各种流:
按照的通的分类方法可以分成不同的类。
按照操作数据单位不同,分为:字节流(1 byte = 8 bit),字符流(2 byte = 16 bit);
按照数据流的流向不同,分为:输入流,输出流;
按照流的角色不同,分为:节点流,处理流
字节流:FileInputStream、FileOutputStream,可处理文本、非文本文件(建议非文本文件使用)
字符流:FileReader、FileWriter,只能处理文本文件(建议文本文件使用)
节点流:FileInputStream、FileOutputStream、FileReader、FileWriter,除这几种之外,均为处理流。
缓存流:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter,缓冲流是处理流的一种,与名字与上述节点流一一对应。
**实际的开发中,一般都用缓冲流,而不用节点流,因为其效率高**
**对于.doc的文件应该使用字节流,而不能使用字符流,因为里面虽然是字符,但是可以插入各种图片,表格之类的。使用字符流会乱码**
**解码:**字节数组到字符串
**编码:**字符串到字节数组