StringBuilder
|--可变的字符序列,功能是相同的,是StringBuffer的一个简易替换;是1.5版本出现的;
|--是一个线程不同步的;这个是后出来的;-->效率高,比较快捷;
|--StringBuffer是线程同步的;效率低
|--单线程用StringBuilder,多线程用StringBuffer;
|--建议以后开发用StringBuilder;
|--JDK升级的3要素:提高效率,简化书写,提高安全性;
final
final:最终;
|--作为修饰符,可以修饰类,函数,还有变量;
|--被final修饰的类不可被继承;为了避免被子类复写功能,我就在类上面加了一个final,那么这个类就是最终类了;
|--继承的好处:提高了代码的复用性,多态也来了,弊端就是打破了封装性,我封装的代码都被你继承了,我里面的方法都被你复写了,你就打破了我的封装性;
|--被final修饰的方法不可以被复写
|--被final修饰的变量,是一个常量,只能赋值一次,既可以修饰成员变量,有可以修饰局部变量
抽象类
|--抽象:就是看不懂;
|--抽象类的特点:
|--抽象方法一定定义在抽象类中,
|--抽象方法和抽象类都必须被abstract关键字修饰;
|--抽象类不可以用new创建对象,因为调用抽象方法没意义;
|--抽象类中的抽象方法要被使用,必须要由子类复写其所有的抽象方法后,建立子类对象调用;如果子类只覆盖了部分抽象方法,那么该子类也要定义成抽象类;
|--当多个类中出现了多个功能,但是功能的主体不同,这时可以进行向上抽取,这时,只抽取功能定义,而不抽取功能主体;
基础班和高级班,都有自己的学校,但是方法都是一样的,但是功能主体不同,
|--建立向上抽取一个学生类
|--抽象类和一般的类没有什么不同,该怎么描述事物,就如何描述事物,只不过该事物中出现了一些看不懂的,这些不确定的部分需要明确出来,但是无法定义主体;至于是怎么实现由子类去实现,子类覆盖父类的方法;父类要和子类的方法相同;
|--抽象类比一般类多了个抽象函数;就是抽象类中可以定义抽象方法;作用就是
|--抽象类不可以被实例化
|--抽象类中可以不定义抽象方法;作用:这样做仅仅是不让该类建立对象
|--就是说抽象类里面既可以定义抽象的方法,又可以定义非抽象的方法;
接口:interface,class用于定于类,inte用来定义接口;
|--如果抽象类里面的方法全都是抽象的,这时可以表现成另一种表现形式,叫做接口;
|--当抽象类中的方法都是抽象的,那么该类可以通过抽象的形式类表示;
|--接口里面的成员全都是抽象的;
|--接口中的成员都是public的;
|--接口是不可以创建对象的,因为有抽象方法;
|--接口可以被类多实现,也就是一个类可以同时实现多个接口;也是对多继承不支持的转换形式,java支持多实现;
接口的特点
|--接口是对外暴露的规则;
|--接口是程序的功能扩展;
|--接口可以用来对实现;
|--类与接口之间是实现关系;
|--接口的出现降低了耦合性;
继承和接口的区别?
|--基本功能定义在类中,而扩展功能定义在接口中;
|--找到组织了就是继承了,在组织里面干了点副业就是扩展了-->接口;
|--在体系外用接口来表示;
|--你是我的一种用is a,继承
|--你像我中的一个,用like a;接口
static
静态的特点:静态:
|--用法:是一个修饰符,只能修饰成员(成员函数和成员变量)
|--静态修饰内容,被对象所共享;
|--当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用,就是类名.静态成员
|--特有内容随着对象存储;在对内存中;
|--共享内容在方法区中存储;共享区,方法都在方法区里面
静态使用的注意事项:|--静态随着类的加载而加载,也就是说随着类的消失而消失;静态的生命周期最长;
|--优先于对象存在
|--被所有对象所共享
|--可以直接被类名调用
实例变量和类变量的区别:
|--存放位置不同:类变量随着类的加载而存在于方法区中;
|--实例变量随着对象的建立而存在于堆内存中
|--生命周期:类变量生命周期最长,随着类的消失而消失,实例变量生命周期随着对象的消失而消失;
|--静态方法只能访问静态成员;
|--非静态方法,既可以访问静态,也可以访问非静态;
|--静态方法中不可以定义this和super,因为静态优先于对象存在;
静态有利有弊:
利处:对对象共享数据经行单独空间的存储,节省空间;没有必要每个对象中都存储一份;可以直接被类名调用;
弊端:生命周期过长,访问出现局限性(静态只能访问静态)
单例设计模式:解决的是一个类在内存中只存在一个对象;