类和对象、无参方法、有参方法、字符串
类和对象
对象
Java是一种面向对象的编程语言(Object Oriented Programming Language ,OOPL),因此我们要学会用面向对象的思想考虑问题和编写程序。
对象的属性和方法
在面向对象的编程思想中,把对象的静态特征和动态特征分别称为对象的属性和方法,它们是构成对象的两个主要因素。
对象:用来描述客观事物的一个实体,由一组属性和方法构成。
封装
封装(Encapsulation)是把一个事物包装起来,并尽可能隐藏内部细节。例如:一辆汽车在组装前是一堆零散的部件,如发动机、方向盘等,仅靠这些部件是不能发动车的。当把这些部件组装完成后,它才具有发动的功能。可以看出这辆汽车是一个对象,而零部件就是该对象的属性,发动、加速、刹车等行为就是该对象所具有的方法。如图:
从上例我们可以看出,对象的属性和方法是相辅相成,不可分割的,它们共同组成了实体对象。因此,对象具有封装性。
类
类的属性:对象所拥有的静态特征在类中表示时称为类的属性。
类的方法:对象执行的操作称为类的方法。
public class 类名{
//属性 数据区
String name; //姓名
int age; //年龄
/**
*显示方法 方法区
*/
public void show(){
System.out.println("姓名:" + name + "\n年龄:" + age);
}
}
一个类为它的全部对象给出了一个统一的定义,而它的每个对象则是符合这种定义的一个实体。因此类和对象的关系就是抽象和具体的关系。类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实列。如图:
定义类是抽取同类实体的共性自定义的一种数据类型。
在面向对象程序设计中,类是程序的基本单元,所有程序都是以类为组织单元的。
Java的类模板
public class <类名>{ //定义类名
//定义属性部分
属性1的类型 属性1;
属性2的类型 属性2;
......
属性n的类型 属性n;
//定义方法部分
方法1;
方法2;
......
方法n;
}
通过在类中定义方法来描述类所具有的行为,这些方法称为类的成员方法,语法:
访问修饰符 返回值类型 方法名(){
//方法体
}
创建和使用对象
类的作用就是创建对象。由类生成对象,称为类的实例化过程。一个实例也就是一个对象,一个类可以生成多个对象,语法:
类名 对象名 = new 类名();
在Java中,要引用对象的属性和方法,需要使用"."操作符,语法:
对象名.属性 //引用对象的属性
对象名.方法名() //引用对象的方法
在定义类时,如果没有给属性赋初始值,Java会给它一个默认值,如
类 型 | 默 认 值 |
---|---|
int | 0 |
double | 0.0 |
char | ‘\u0000’ |
boolean | false |
String | null |
面向对象的优点
于人类的思维习惯一致:面向对象的思维方式从人类考虑问题的角度出发,把人类解决问题的思维过程转变为程序能够理解的过程。
信息隐藏,提高了程序的可维护性和安全性:封装实现了模块化和信息隐藏,即将类的属性和行为封装在类中,这保证了对它们的修改不会影响到其他对象,有利于维护。
提高了程序的可重用性:一个类可以创建多个对象实例,增加了重用性。
类的无参方法
类的方法是一个功能模块,其作用是"做一件事情"。
类的方法包括:方法的名称,方法的返回值类型,方法的主体。语法:
public 返回值类型 方法名(){
//方法的主体
}
注意:方法执行后可能会返回一个结果,该结果的类型称为返回值类型。使用 return 语句返回值。语法:
return 表达式;
这里的 return 语句是跳转语句的一种,它有两个作用:跳出方法、给出结果。
在写方法时需要注意以下几点:
1.方法的返回值类型为 void ,方法中不能有 return 语句。
2.方法不能返回多个值。
3.方法直接不能相互嵌套定义。
4.不能再方法外部直接写程序逻辑代码。
方法的调用:
类名 对象名 = new 类名();
对象名.方法名();
调用方法的两种形式:
在同一个类中的方法,直接使用方法名()调用该方法。
不同类的方法,首先创建对象,在使用"对象名.方法名()"来调用
关于 static 关键字
被 static 修饰的成员是属于类的,不单属于这个类的某个对象了,所以在同一个类中被 static 修饰的成员不能被其他非 static 的成员直接调用,需要通过创建对象的方式来调用,而被 static 修饰的成员在同一个类中可以直接用方法名()直接调用,如图:
变量的作用域
成员变量和局部变量
一个类,在类中可以定义变量和方法,在类的方法中,同样也可以定义变量,所以我们把在类中定义的变量称为类的成员变量,在方法中定义的变量称为局部变量,例如:
public class 类名{
//成员变量
int a;
long b;
double c;
String d;
public void 方法名(){
//局部变量
int age = 0;
double sum = 0.0;
String name = null;
}
}
注意:
1.作用域不同,局部变量的作用域仅限于定义它的方法,在该方法外无法访问,而成员变量的作用域在整个类的内部都是可见的,所有成员方法都能使用。
2.初始值不同,成员变量定义时没有给它赋初始值,Java会给它一个默认值,基本数据类型为0,引用数据类型为null。而Java不会给局部变量赋初始值,因此局部变量必须定义赋值后再使用。
3.变量同名,在同一个方法中,不能出现同名的局部变量,在不同的方法中,可以有同名的局部变量。但是局部变量可以和成员变量同名,在使用时,局部变量具有优先级。
JavaDoc文档
在前面我们已经用到过两种写注释的方法:单行注释和多行注释
//单行注释
/*
*多行注释
*/
今天我们又要介绍一类注释,称为 JavaDoc 注释,如图:
/**
*JavaDoc 文档
*@author 作者名
*@parameeter 参数及其意义
*@return 返回值
*......
*/
简单来说,JavaDoc 文档就是介绍该类、类的方法和成员变量的文档,我们可以看到 JavaDoc 注释每个注释包含一些 描述性的文本及若干个JavaDoc标签,JavaDoc标签一般以“@”为前缀。
有参方法
在一些方法中的某种功能的实现依赖于我们给它的初始信息,这时候在定义方法时就需要在括号中加入参数列表,语法:
<访问修饰符> 返回值类型 <方法名>(<参数列表>){
//方法的主体
}
<参数列表>是传给方法的参数列表,列表中各参数间以逗号分隔。
调用带参方法与调用无参方法的语法相同,但是在调用带参方法时必须传入实际的参数的值,语法:
对象名.方法名(参数1,参数2,...,参数n);
我们在定义方法和调用方法时,把参数分别称为形式参数和实际参数,简称形参和实参。
形参:是在定义方法时对参数的称呼,目的是定义方法需要传入的参数个数和类型。
实参:是在调用方法时传递给方法处理的实际的值。
调用方法时的注意事项:
1.先实例化对象,再调用方法。
2.实参的数量、顺序都要与形参一致,类型是兼容的。
对象数组
注意:对象数组作为参数,定义方法时并没有指定数组大小,而再调用方法时确定要传递的数组的大小。
Student[] students = new Student[30]
上方代码表示声明了大小为30的学生对象数组,即数组 students 可以储存30个学生对象,通过数组名[下标]来访问数组内每一个对象。
public void addStudent(Student stu){
//...
}
注意:上面的方法带有一个 Student 类型的参数,调用时将传递一个学生对象。
包
关于包的主要作用:
1.包允许将类的组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。
2.防止命名冲突:Java中只有在不同包中的类才能重名。
3.包允许在更广的范围内保护类、数据和方法,可以在包内定义类。
我们要声明一个包,只要包含 package 命令作为一个Java原文件的第一条语句就可以了,例如:
package 包名;
public class 类名{
}
注意:包的声明必须是Java源文件中的第一条非注释性语句,而且一个源文件只能由一个包声明语句。
我们要导入一个包,使用 import 命令导入一个包,例如:
import java.util.Scanner;
上面的代码是导入系统提供的 util 的包的 Scanner 类,如果要使用到包下的某些类(多于一个),可以使用 包名.* 。
import java.util.*;
字符串
其实我们之前一直都在使用字符串,就是用 String 作为数据类型的变量并赋值,例如:
String name = "张三";
String name1 = new String(); //创建一个空的字符串
字符串的长度
我们可以使用 String 类的 length() 方法来获取字符串的长度 ,例:
字符串1.length();
length()方法返回字符串1的长度是 int 类型的。
字符串的比较
我们之前也使用过字符串之间的比较,例:
字符串1.equals(字符串2);
我们在字符串之间的比较不是用 “==” 进行比较了,而是用 equals()方法进行两个字符串之间的比较,这个方法返回的是一个 boolean 类型的值,如果相同,返回 true ; 否则返回 false。
在使用 equals()方法时对于字符的大小写,也在检查范围之内,但有时我们会碰到忽略大小写验证,这个时候我们就可以使用另一种方法——equalslgnoreCase()方法,忽略大小写比较两个字符串。
字符串1.equalslgnoreCase(字符串2);
除了这中方法外,我们还可以在比较前将字符串中的英文字母全部转换为大写或小写。
toLowerCase():转换字符串中的英文字母为小写。
toUpperCase():转换字符串中的英文字母为大写。
String a = "JAVA";
String b = "java";
a.toLowerCase();
b.toUpperCase();
如图:
字符串的连接
我们前面是使用"+"运算符用于字符串之间的连接,在这又介绍了一个 concat() 方法将一个字符串连接到另一个字符串的后面,语法:
字符串1.concat(字符串2);
字符串的提取和查询
其实字符串是一个字符序列,也是一个字符数组,每个字符都有自己的位置,因此它的位置从 0 开始到(字符串长度-1)结束,因此 String 类也提供了一些常用的 提取和查询方法,如:
1.indexOf()方法
该方法是在字符串内搜索某个指定的字符或字符串,它返回出现第一个匹配的位置。
2.lastIndexOf()方法
该方法也是在字符串内搜索某个指定的字符或字符串,但是它是搜索最后一个出现的字符(或字符串)的位置。
3.substring(int index)方法和 substring(int beginindex,int endindex)方法
substring(int index)方法用于提取从位置索引开始的字符串部分,调用时括号中写的是要提取的字符串的开始位置,方法的返回值就是要提取的字符串。
substring(int beginindex,int endindex)方法用于提取位置 beginindex 和位置 endindex-1 之间的字符部分。
4.trim()方法
该方法可以忽略字符串前后的空格,在接收用户输入的字符串时,一般会调用 trim() 方法过滤掉字符串前后的多余空格。
字符串的拆分
字符串的拆分在实际应用中也会经常用到,语法:
字符串1.split(String separator,int limit);
注意:1.separator 可选项,标识拆分字符串时使用一个或多个字符。如果不选择该项,则返回包含该字符串所有单个字符的元素数组。
2.limit 可选项,该值用来限制返回数组中的元素个数。
如图:
StringBuffer类
StringBuffer 是 String 类的增强类,它是比 String 类更高效的储存字符串的引用数据类型。
声明 StringBuffer 并初始化
StringBuffer a = new StringBuffer("字符串");
下面为大家介绍几个比较常用的StringBuffer类提供的方法:
字符串1.toString();
1.将StringBuffer类型的字符串1转换为String类型的对象并返回。
字符串1.append(字符串2);
2.将字符串2连接到字符串1后并返回。
字符串1.insert(位置,参数);
3.将参数插入字符串1的指定位置(int 类型)后并返回。参数可以是包括 String 的任何类型。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象,如图:
关于这次的介绍就到这了,谢谢观看!