面向对象程序设计(OOP)是当今主流的程序设计范型,Java是完全面向对象的,其中类是构造对象的模板。
面向对象可以针对用户提出的要求进行分析,并将分析的结果设计成一张完整的“图纸”,与提出需求的用户确认,并将一切准备工作全部处理完成之后再分块制作,最终将各个小的部分组装在一起。
面向对象的程序设计具有三大特性,封装,继承,多态。
封装:
1、将对象的属性和行为看成密不可分的整体,将这两者封装在一个对象中。
2、把不需要让外界知道的信息隐藏起来,尽可能隐藏起来对象的功能和实现的细节。
继承:
使用extends关键字,使得子类具有父类的功能,继承机制大大增强了代码的复用性,提高了软件开发效率。
一个子类只允许继承一个父类,而一个父类可以由多个子类继承。
多态:
多态指的是程序中允许出现重名现象,Java中的多态分为两种,分别是:
1、方法重载:
在一个类中允许方法的名字重复,但是方法的参数不同。
2、对象多态:
子类对象可以和父类对象进行相互转换,而且根据其使用的子类的不 同完成的功能也不尽相同。
类的创建与实例化:
以一个Person类为例,创建它的对象并实例化:
Person per = new Person();
如果该类中存在public属性和方法,直接使用实例化对象调用即可。
在常规的开发过程中,属性一般使用private定义,这样可以保证数据的安全,在进行参数传递的时候使用setter和getter方法。
在一个类中存在一个隐式的构造方法,即在一个Person类中存在
public Person(){}
为了方便我们可以重新建立一个构造方法,在其中添加相关的setter方法,这样就不用再实例化对象之后给属性一个个的赋值。
构造方法也属于方法,所以可以对构造方法进行重载。
在对象的实例化中String是一个比较特殊的关键字 ,可以个String变量直接赋值,String name = “测试”;
也可以实例化对象:
String name= new String("测试");
在String的比较中,==是String字符串地址的比较,当使用上述两种不同的字符串赋值时,==比较的地址不同。而equals()方法比较的是字符串的内容,无关字符串的地址。
两种实例化方法的不同
String name1 = “hello”;
String name2 = “hello”;
.......
当字符串的内容相同时,String字符串共用一个空间的内容。
当使用new实例化时,有:
String name1 = new String("hello");
String name2 = new String("hello"):
......
当使用new时,每实例化一次就开辟一次空间,所以在字符串赋值的时候,采用直接赋值的方式,这样可以避免产生垃圾空间。
一般情况下我们使用substring(0,3);截取字符串的前四个字符(注意:这里的字符串是从0开始计数,类似数组的下标),使用+添加字符。但是这两种操作方式并不代表着字符串内容可变,字符串的内容是不可变的。
由上图我们可以知道,当一个字符串在堆中被分配内容时,它就是不可变的,任何String的方法都无法改变字符串本身,但它可以返回一个新的字符串对象。
如果需要可以修改的字符串对象,可以使用StringBuffer和StringBuilder,StringBuffer是线程安全的,由于StringBuilder不需要进行同步操作,StringBuilder是比较快速的。
字符串的相关操作:
String str = “hello”;
将字符串变为字符数组:
char c[] = str.toCharArray();
将字符数组变为字符串:
String str1 = new String(c);
字符数组部分转变:
String str2 = new String(c,0,3);
从指定位置取出字符:
str.charAt(2);从字符串取出第三个字符
str.length();字符串长度
判断指定字符是否存在
str.indexOf("c");返回字符位置
......
static关键字
如果在程序中使用static声明属性,则该属性为全局属性。
全局属性的设置可以避免对其他属性的干扰。
领取专属 10元无门槛券
私享最新 技术干货