添加链接描述@TOC
[知识要点]:面向对象的基本概念;面向对象的软件开发过程;面向对象程序设计方法的特性;继承的基本概念及实现;对象多态性;抽象类和接口;包及访问控制权限。
一,面向对象的三大特征
面向对象三大特征:封装、继承、多态
1、封装
把客观事物封装成抽象的类,每个类都有自己的属性与方法,并且类可以让自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏。内部操作对外部而言不可见(保护性)
2、继承
继承有这样一种能力,就是使用现有允许使用的功能。并不需要重新编写这些类已经有的功能。通过继承创建了新的类成为子类或派生类。被继承的成为基类。继承有两种,一种是实现继承,另一种是接口继承。
实现继承:可以直接使用基类的属性和方法,无需额外编码。
接口继承:是指使用属性和方法的名称,但是子类必须提供实现的能力。
2、多态
所谓的多态就是对一个实例的相同方法在不同的情况下有不同表现形式。多态机制使得不同内部结构的对象可以共享相同的外部接口。这意味着,虽然不同类的内部操作不同,但是可以通过一个公共类,他们可以通过相同的方法给与调用。
二,类与对象的关系、定义及使用;对象的创建格式;构造方法的定义格式
- 类与对象的概念
类是共性的概念,而对象是一个具体、可以使用的事物。类是声场对象的蓝图,现有类才可以产生对象。对象的所有属性与行为,一定在类中进行了完整的定义。
1.1 类中的组成
方法(操作的行为)
属性(变量,描述每个对象的具体特点) - 类与对象的定义与使用
2.1 类的定义
class 类名称{
属性1;
属性2;
……
方法1;
方法2;
……
}
举例:定义一个Person类
class Person{
// 属性
public String name;
public int age;
// 构造方法
public Person(String name, int age){
this.name = name;
this.age = age;
}
// 普通方法
public String getPersonInfo(){
return "姓名:" + this.name + "年龄:" + this.age;
}
}
类中的属性与方法(不带static关键字的)只能通过对象调用。
2.2 对象的产生
类名称 对象名称 = new 类名称();
以Person类为例,可以产生一个Person类的实例(对象):
Person per1 = new Person();
Person per2 = new Person("zhangsan", 12);
2.3 通过对象调用实例变量与实例方法
只要出现了关键字new,就开辟了内存。
Person per = new Person("zhangsan", 18);
System.out.println(per.name);
System.out.println(per.getPersonInfo());
三,String类的特点及其主要的操作方法
String类简介
String类,顾名思义,它是一个类,是一个引用数据类型(见下图)。既然是类,就有自己的方法(普通方法和构造方法)。
String类的两种实例化方式
直接赋值实例化对象(一般用该方法)
String str="Hello";
通过String类的构造方法实例化
String str=new String("Hello");
两种实例化的区别 (见下图直观解释)
直接赋值实例化:String str=“Hello”;
String类的设计使用了一个共享设计模式。
在JVM底层实际上会自动维护一个对象池,使用直接赋值的方法进行对象实例化时,该实例化对象会自动保存在这个对象池中,若下次直接使用了直接赋值的方法进行了对象实例化,如果此时对象池中有指定的内容,那么将直接进行引用,若没有,则开辟新的字符串对象放在对象池中,供下次使用(所谓对象池就是一个对象数组)。
通过String类的构造方法进行实例化String str=new String(“Hello”);
虽然这种做法属于标准做法,但是它有不足之处。
使用构造方法进行实例化,会开辟两块堆内存,并且其中一块会成为垃圾;如果想让该方法实现第一种直接赋值实例化方法的优点,就要进行人工入池:
String str=new String("Hello").intern();//手动入池方法intern()
面试题:解释String类对象的两种实例化方式的区别
直接赋值:只会开辟一块堆内存,并且该字符串对象可以保存在对象池中供下次使用,一般采用该方法;
构造方法实例化:会开辟两块堆内存,其中一块成为垃圾,不会自动入池,要人工入池。
三、String类的字符串比较
比如两个int型变量,判断相等,用“==”完成,但是如果用其判断字符串相等,则是判断的字符串地址的数值是否相等。若比较字符串是否相等要用String类提供的equals()方法:public boolean equals(String str);
String str1="hello";
String str2=new String("hello");
System.out.println("hello".equals(str2));
面试题:解释String类中“==”和equals()方法的区别
“==”: 是数值比较,比较的是两个字符串地址的数值;
equals():字符串内容的比较。
四、字符串常量不可变更
先来看一个栗子:
String str="Hello";
str+="world";
str+="!!!";
System.out.println(str);//此时str=Hello world !!!
以上字符串的变更是字符串对象的变更,而不是字符串内容的变更。(见下图解释)
字符串没有发生改变,而是字符串引用一直在发生改变,并且会产生大量的垃圾,所以在开发过程中,避免此类代码出现,即字符串不适合频繁修改。
总结:
字符串的创建就采用直接赋值的方法完成;
字符串的比较就使用equals()方法完成;
字符串不要改变太频繁。
String类的常用方法
String类的常用方法 (在文档中都可以查到)
字符串与字符数组
字符串就是一个字符数组,String类中有相应的方法支持两者的相互转换。<