string,即字符串,string类型是个不可变对象。可以理解为一个指针,指向对应的字符串内容,对string类型进行修改等同于将指针指向一个新的string对象,原先的字符串内容依然存在。当程序需要经常改变内容时,最好不要使用string类型,会浪费大量的内存空间。
与string相似功能的有stringbuffer、stringbuilder,与string不同的是,stringbuffer、stringbuilder修改是在自身上修改。
stringbuffer:线程安全,速度相对stringbuilder较慢,更适用于多线程情况;
stringbuilder:线程不安全,速度更有优势,更适用于单线程;
多数情况下采用stringbuilder。
2、集合容器
list:不唯一、有序;-> arraylist
map:键值,key-value形式 => map[key]=value; -> hashmap
set:唯一、无序,不能含有重复值,类似于数学中的集合。-> hashset
3、OOP面向对象编程–三大特性 3.1 封装
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
具体体现:权限修饰符private,修饰变量时需创建set、get方法。通俗而言,将控制权掌握在自己手中,我可以允许我的数据被读取和修改,但要限制我提供的权限中,你要修改我的数据就要用我提供给你的方式修改。
在代码上,无法通过 对象.变量= 来修改变量值。
static关键字:
不依赖于对象,跟随类存在。所有对象共用一个,即创建了多个实例化对象时,每个对象的该变量值相同,若过程中该值被修改,那么所有对象的该变量值也随之改变(方法同理)。推荐**类.变量 **进行修改或赋值。
在JMM内存模型表现上,创建实例化对象时,所有对象都会指向同一个被static的变量/方法堆空间。
this关键字:
创建类时可使用:只能在构造方法中调用别的构造方法,并且调用只能在第一行。
3.2 继承
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。已有的类称为父类、基类,派生的类称为子类。在java语法中只支持单继承。
继承父类,使用super关键字实现对父类成员的引用:
可以调用父类对象中的内容,调用父类构造器(构造方法),在构造方法中使用时默认调用父类无参构造。
创建实例化对象时:先创建父类内容再创建自身内容 ->
父类静态方法 - 自身静态方法 - 父类构造方法 -自身构造方法。
子类可以在继承父类的基础上,重写父类方法,新增功能,详情看下一小点–多态。
3.3 多态
多态是同一个行为具有多个不同表现形式或形态的能力。
产生条件:继承、重写父类方法、创建一个指向子类的父类对象
代码:public class cat extends animal{ //在继承的基础上可以新增方法,父类无法看到子类的新增功能 public void shout(){ System.out.println("喵喵"); } } 多态允许将子类类型的指针赋值给父类指针,表现出子类行为 1、animal a = new cat(); a.shout(); 在内存表现上,一个父类指针指向了子类对象,也就能够调用子类方法。如下图所示 2、cat b = new animal(); b.shout();//无法实现 在内存表现上,一个子类指针指向了父类对象,那么也就不能够调用子类独有的方法,父类是无法看到子类新增功能的,所能调用的方法仅限于父类含有。 3、假设改变b的指向: b = (cat) a; b.shout();//能够实现 此时b指向子类对象,能够调用子类独有方法。如下图所示 4、那么反过来呢, a = b; b.shout();//无法实现 a此时指向了父类对象,无法调用子类独有对象
instanceof 关键字:
判断是否是类的对象或者其子类对象,在同一继承链使用;
返回类型为bool类型。
可应用于判断是否出现异常而作出相应处理的场景:
开发过程会出现各种各样的异常,利用 instanceof 关键字在出现某一类异常时作出处理。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)