java学习中一些基础知识(二)

时间:2021-12-17 17:37:19

        由于要上班了,而从事的方面与这不是很相关,但是又不准备放弃已有的知识,希望能够打牢一个基础,所以还是继续深入的学习这部分内容,由于各种原因,进度还是很慢,希望在下一阶段能够更好的去学!

51.向下转型,必须做类型检查; 52.包含抽象方法的类都是抽象类,抽象类不能实例化对象(可以声明不包含抽象方法的类来阻止类的实例化,同时如果要实例化可以使用一个匿名类马上声明抽象类的方法),如果继承了抽象类却没有定义抽象方法则子类也为抽象类;继承extends 53.接口实现implements,实现接口必须全部实现其方法,使用接口可以避免方法不在继承结构中的某个类时使用,能实现多个接口,接口可以继承接口(避免出现同样的方法); 54.在接口定义的域都不能是空的final; 55.如果想从外部类的非静态(static)方法之外得到内部类的对象,必须指明这个对象的类型:OuterClass.InnerClasss,内部类可以访问外围类所有成员内部类需要对外部类的引用(外部类.this),外部类要初始化内部类则必须在外部类的实例.new来使用; 56.构造方法必须与类名相同,且不能有返回值;普通方法可以与类名相同,但是要有返回类型或者声明为void;java中非静态方法可以调用静态方法,静态方法不能直接调用非静态方法(可以通过对象引用) 57.try(正确代码)-catch(捕获异常;不能捕获error和RuntimeExeception)-finally(不管catch是否执行都会执行当try中没退出java虚拟机时) 58.内部类向上转型为基类,或者转型为接口,能够隐藏实现细节,所得到的仅仅是指向基类或接口的引用(从实现接口的对象得到对接口的引用与向上转型为这个对象的基类效果相同) 59.内部类:定义在方法和定义域中;匿名的内部类;嵌套类(static):创建嵌套类的对象不需要通过外围类,不能从嵌套类中访问非静态的外部类;内部类可以置于接口中,并且能实现接口; 60.内部类的继承有特殊的语法,且导出类不再对外围类有联系;内部类的覆盖;局部内部类与匿名内部类基本相同,前者需要一个构造器而后者通过实例初始化。 61.java容器类包括:Set queue Map List;java中提供的容器都是自动增长类型。使用容器时可以预先指定类型,派生类可以向上转型成基类同时也能加入,把运行时错误转成编译期时的;如果不需要每个元素的索引可以使用for each 62.Collection:List必须 按照插入的顺序来保存元素,而Set中不能有重复的元素,queue按照排队规则来确定元素的顺序;Map通过键值对来关联(ArrayList则是通过数字与元素的关联来使用);创建具体类的对象时应该将他转型接口,然后其他的都使用这个对象; 63.Collection中不同容器有不同实现,实际使用时要考虑;每一个Collection的类都能使用for each去遍历;可以接收一个数组,一个相同的容器内容,和用“,”分割开的参数列表;当把Arrays.List当做List输出,则底层为数组不能添加元素; 64.Arrays.<>asList与Collections.addAll()的区别在多层继承时,前者子类的派生类无法向上转型到子类的基类,而需要指定类型;后者相对来比较灵活; 65.ArrayList随机访问;LinkedList快速插入与删除; 66.JAVA中的迭代器只能单向移动:1.    使用Iterator()方法要求容器返回一个Iterator,并准备返回序列第一个元素;2.next()方法获取下一个元素;3.hasnext()检查是否还有接下去的元素;3.remove()方法删除返回的元素 67.listIterator()专门为List容器提供的迭代器工具,实现了一些更强大的功能;LinkedList可以向上转型成Queue先进先出,安全的传输;Stack先进后出,注意与内置的栈存在命名冲突; 68.异常的处理:在异常出现后并被捕获后会将异常的代码在区别与正常的执行顺序的地方执行;自定义的异常通过继承异常类然后重载构造器来实现自定义的构造器;异常的记录日志java.util.logging;将可能出现异常的代码放在try{代码块}中,用catch(Exception e) {友好的提示,和打印出错内容}catch不一定被执行,finally{}一定执行 69.异常的说明:库开发人员向客户端开发人员告知可能会抛出的异常throws去访问;捕获所有的异常:捕获基类的异常;getMessage()用来得到有关异常的信息;打印轨迹printStackTrance();重新抛出异常:fillInStackTrace()会成为异常新的点;有些异常被抛出后必须被catch;runtimeexception()是可以不被处理的。 70.finally内部从哪里返回没有影响;java中可能会出现异常丢失的情况由finally引起所以编程的时候要注意;异常继承过程中父类的异常可能不会出现在子类中,与接口的继承相反入口变小了;而且不允许将异常作为函数重载;异常处理时要把范围小的异常放在前面,把范围大的放在后面;throws 在方法定义阶段抛出异常,throw则是抛出异常的对象,用于在方法内输出信息给捕获,同时throw只能抛出一个异常类型; 71.在构造阶段出错也要考虑抛出异常,而这时用运行中的异常则会出现问题;要用try-finally块去处理;异常匹配可以用基类去匹配;并且是从最近的处理程序去寻找;finally提供异常的出口,做资源的清理;良好的编程习惯捕获的异常必须的到处理; 72.自定义异常的方法,通过继承java.lang.Exception来声明异常;在方法适当位置生成自定义异常的实例,并用throw抛出;在方法的声明部分用throws来声明方法可能会抛出的异常;重写方法需要抛出和父类一样的异常,或者不抛出异常;异常类有两个构造器,一个是默认构造器,一个是带错误信息(字符串的); 73.java支持的异常模式是终止行,当异常被抛出时,程序终止,如果需要执行,则需要将业务逻辑写在finally里;在捕获异常后可以重新抛出,给上一级全部异常的信息,后续的catch将不被执行;要更新新抛出异常的地点需要使用fillInStackTrace()这个方法,而前一个异常将会被jvm回收; 74.对于构造阶段就可能出现异常并且需要清理的需要使用嵌套的try,来进行捕获和处理; 75.String作为参数只改变引用,而不改变参数值;如果知道字符串的长度,且需要用toString()循环的话使用StringBuilder()会更好。 76.String用于操作少量数据,StringBuilder用来操作单线程缓冲区下的大量数据,StringBuffer用来多线程缓冲区下大量数据;速度的话StringBuilder>StringBuffer; 77.Object类提供了toString()方法,有时候碰到String对象会发生无意识递归,自动强制类型转换,若要打印内存地址,需要使用到父类的Object.toString()方法