类和对象、字符串
一、类(什么是类,为什么要引入类)
1.什么是类:类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。举例来说:“汽车”、“卡车”、“货车”都是“车类”,具有车的共性。
2.为什么要引入类:从编程的角度来考虑,对一系列类型相同对象进行抽象化表示,便于对同类对象进行数据处理和代码的重用。
二、对象(什么是对象,对象的特征)
1.什么是对象:对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。
2.对象的特征由属性和方法(操作、行为)两部分组成。
三、类和对象的关系,对象即类的实例。
四、类的详解:
a)类是同类对象的概括性的描述,类封装了同类对象的属性和方法。
b)类是抽象的,对象是具体的,比如说:“人类”是抽象的而“张三”是具体的,张三是人类的一个实例即对象。
c)类表示了对象的类别是一种自定义的数据类型;是开发人员为解决实际问题而自己定义的。
d)类是创建对象的模板和类型,对象是类的实例
五、定义类的语法:
[public] class 类名 {
//定义属性部分,术语叫成员变量、实例变量
[访问修饰符] 数据类型 属性1;
[访问修饰符] 数据类型 属性2;
[访问修饰符] 属性n的类型 属性n;
//定义方法部分, 成员方法、实例方法
方法1;
方法2;
……
方法n;
}
这里“[ ]”中括号括起来的意思是表示这些定义所用的关键字是可选的。
类定义的改进:
变量分类:
六、Object类的toString()方法的作用(案例Student.java)
public String toString(){
return “名字:” + name + “, 年龄:” + age;
}//作用:可以将一个对象的信息以一个字符串的形式表示出来并返回此字符串,便于在控制台中查看对象的数据信息
七、如何在一个类中使用另一个类
a)先定义Teacher.java类
public class Teacher {
String name;
char gender;
int age;
double salary;
public String toString(){
return "姓名:" + name
+ "\n性别:" + gender
+ "\n年龄:" + age
+ "\n薪水:" + salary;
}
}
b)创建一个测试类:TeacherTest.java
//Teacher的测试类,演示了如何在此类中调用Teacher类
class TeacherTest {
public static void main(String[] args) {
Teacher teacher = new Teacher(); //创建对象
teacher.name = "张三"; //给属性赋值
teacher.gender = '男';
teacher.age = 34;
teacher.salary = 4000.00;
System.out.println(teacher); //等价于System.out.println( teacher.toString() );
}
}
八、类和对象的总结:
类:
1.类是一组具有共同属性(数据)和行为(方法)的对象的封装,类是一种数据类型。
2.类是创建对象的模板;
3.类是静态的,它只定义对象应有的结构,类是没有生命周期的。
对象:
1.对象是动态的有生命周期;即程序运行时才会被创建出来在内存中存在。
2.对象是类的实例。
九、Java语言特性
a)抽象:是将现实世界(或业务)中的事物描述为系统中的类、对象及方法的过程,在这个过程中去除了不相关数据和信息,保留的数据用来实现系统特定的功能。
b)封装:是将对象的实现细节隐藏起来(用户无需知道这些细节),通过抽象的思想将对象的属性和方法封装在一个Java类文件中,并通过对象的方法将对象的行为暴露给调用者。封装的优点:隐藏细节,将属性和方法封装在一个Java类文件中。
c)继承:继承是面向对象实现软件重用的重要手段。继承是描述出事物间具有父子类关系的一种技术,继承满足“is-a” 是一个的关系;父类的属性和方法可用于子类等优点。利用继承,我们可以基于已存在的类构建一个新的子类,子类继承已存在的类就是重用父类的方法和属性,除此之外,子类还可以添加一些新的方法和属性来满中自身新的需求。
d)多态性:多态是指通过父类型的变量引用不同的子类对象(也就是说子类对象可以直接赋值给父类型变量),来动态调用在不同子类中实现的方法。Java引用变量有两种类型,分别是编译时类型和运行时类型,编译时类型由声明类型决定,运行时类型由赋值对象的类型决定。如果编译时类型和运行类型不一致,就会出现所谓多态。
十、数据类型可分为以下两种:
a)基本(值、原始)类型:8种char, byte, short, int, long, float, double, boolean
b)引用类型(对象类型),只有引用类型才会有属性和方法。类、数组、接口。
十一、null关键字
a)只要是引用类型的变量都可以赋null值
b)意思是只声明一个变量,JVM不会为null值开劈任何的存储空间(也就是说不占内存)
Person p = null;
School school = null;
String str = null;
Account acct = null;
acct = new Account();
int i = null; //❎
十二、String类的不变性:指的是一但String对象被创建后它的内存大小将固定。如果你反复的连接字符串就会造成原来的内存就会被JVM回收,再开劈新的空间来存放新的字符串:如下代码所示:
// 当s1创建时它内存大小固定了
String s1 = new String("abc");
//重新赋值后s1的原内存将会被JVM回收,开劈新的空间存放“abcde”字符串
s1 = "abcde";
s1 += "123"; //回收旧空间,开劈新空间 s1 = s1+”123”;
s1 += "789"; //回收旧空间,开劈新空间
//以上代码性能是非常低的。
十四、String类的常用方法:
a)char[] chs = new String(字符数组).toCharArray();
b)getBytes():得到字符串二进制表示,getBytes(“utf-8”)以UTF-8编码形式得到该字符串的byte[]数组。以后在处理中文乱码时经常用到。
c)length():得到字符串长度
d)indexOf(字符或字符串):查找指定字符或字符串所在的位置,如果找不返回-1.
e)lastIndexOf(String str):从后向前查找指定字符或字符串所在的位置
f)charAt(i):通过索引位获得该索引位的字符
g)replace(旧字符串,新字符串):将当前字符串中所有的旧字符串替换成新字符串
h)trim():删除字符串前后的空白符
i)toUpperCase():转换成大写形式
j)toLowerCase():转换成小写
k)substring(startIndex, endIndex):截取从startindex索引位到endIndex索引位中的字符串但不包括结束位的字符。
l)split(分割符):以分割符将字符串分割成一个字符串数组。
m)contains(CharSequence s):用来检查字符串中是否包含指定的字符符
n)startsWith(String prefix):检查字符串是否以指定字符开头
o)endsWith(String suffix): 检查字符串是否以指定字符结束
p)equalsIgnoreCase(String anotherString): 将此 String 与另一个 String 比较,不考虑大小写