Java(四)、Java面向对象

面向对象程序设计(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声明属性,则该属性为全局属性。

全局属性的设置可以避免对其他属性的干扰。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180613G0L57J00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券