一、类和对象
什么是类?
类中定义了对象将会拥有的动态特征(方法)和静态特征(属性)。
什么是对象?
对象是实实在在存在的一个事物,拥有静态特征(属性)和动态特征(方法)。
属性和方法
属性:用来描述对象的静态特征的一个数据项。短时间内无法改变的事物
方法:是对象所表现的行为或对象所具有的动作。短时间能够改变或能潜在改变
类和对象的关系
对象是类的实例,类是对象的抽象。
一个类为它全部的对象给出了一个统一的定义,而它的每个对象则是符合这种定义的一个实体。类是多个对象进行综合抽象的结果,是实体对象的概念模型,而一个对象是一个类的实体。
对象具有封装性:就是把一个事物包装起来,并尽可能的隐藏内部细节。
类中规定了对象所具有的属性以及行为,如果类中没有赋予的动作,意味着对象是不具备这个行为的。对象所具有的属性和方法都来源于类。
如何定义类
Java是一种面向对象的编程语言,所有的程序都是以类为组织单元的。所以在编程前需要先创建一个类。
定义类的模板
语法:
public class <类名>{
//定义类的属性部分
······
//定义类的方法部分
······
}
其中,class是创建类的关键字。在class前有一个public,表示公有的意思。一个类中public修饰的class只能有一个。
定义类:
public class 类名{
}
类名的命名遵从一定的规则:
帕斯卡命名法:每一个单词的首字母都需要大写。
类的属性:通过在类的主体中定义变量来描述类所具有的属性,这些变量称为类的成员变量。
在定义类的时候,如果没有给属性赋予初值,java会给它一个默认值:
类型 | 默认值 |
---|---|
Int | 0 |
double | 0.0 |
char | ‘\u0000’ |
boolean | false |
String | null |
变量以及方法的命名也遵从一定的规则:
驼峰命名法:方法或变量的第一个单词的首字母小写,后面每个单词的首字母大写
如何创建和使用对象
类的作用就是创建对象。由类声称对象,称为类的实例化过程。一个实例也就是一个对象,一个类可以生成多个对象。
类名 对象名 = new 类名();
在创建类的对象时,需要使用Java的new关键字。考虑到每个对象的属性值可能是不一样的,所以在创建对象后再给它的数据成员赋值。在Java中,要引用对象的属性和方法,需要使用"."操作符。其中,对象名在圆点的左边,属性或方法的名称在圆点的右边。
类的方法:通过在类中定义方法来描述类所具有的行为,这些方法称为类的成员方法。
类的方法必须包含三部分:方法的名称、方法的返回值、类型方法的主体。
通常,编写方法时,分两步完成
第一步:定义方法名和返回值类型
第二步:在{}中编写方法的主体部分
在编写方法时,要注意以下三点
1、方法体放在一对大括号中。方法体就是一段程序代码,完成一定的工作
2、方法名主要在调用这个方法时使用。在Java中一般采用骆驼命名法
3、方法执行后可能会返回一个结果,该结果的类型称为返回值类型。使用return语句返回值
方法的定义:
访问修饰符 返回值类型 方法名(){
//方法体
}
方法一般分为两种,一种是带参数的方法,一种是不带参数的方法。以下来说明一下
无参方法:
在编写程序时一定要注意方法声明中返回值的类型和方法体中真正返回值的类型是否匹配。如果不匹配,编译器就会报错。return是跳转语句的一种,它主要做两件事情。
1、跳出方法:意思是“我已经完成了,要离开这个方法”。
2、给出结果:如果方法产生一个值,这个值放在return后面,即<表达式>部分,意思是“离开方法,并将<表达式>的值返回给调用它的程序”。
如何调用方法:在程序中通过使用方法名称从而执行方法中包含的语句,这一过程就称为方法调用。
对象名.方法名();
类的方法调用,均使用如下两种形式。
1、同一个类中的方法,直接使用方法名调用该方法。
2、不同类的方法,首先创建对象,再使用“对象名.方法名()”来调用。
有参方法:
如何定义带参方法:
<访问修饰符> 返回值类型 <方法名> (<参数列表>){
//方法的主体
}
参数列表是传送给方法的参数列表,可以有无数个。列表中各参数间以逗号分隔。定义在方法中的参数称为形参
调用带参方法与无参方法语法基本相同,但是在调用带参方法时必须传入实际的参数的值
对象名.方法名(参数1,参数2,....参数n
使用对象名.方法后这里的参数需要输入,这里的参数称为实参
在调用方法时,需要注意以下两点:
1、先实例化对象,再调用方法。
2、实参的类型、数量、顺序都要与形参一一对应。
示例:
public class searchName {
public boolean searchName(int start,int end,String name, Object[] names) {
boolean find = false;
for (int i = start-1; i < end; i++) {
if(names[i].equals(name)) {
find = true;
break;
}
}
return find;
}
}
以上示例定义的是一个带多个参数的方法,有返回值。并且参数中有了数组
带参方法的参数个数无论多少,在使用时只要注意实参和形参一一对应,传递的实参值与形参的数据类型相同、个数相同、顺序一致,就不会有太大的问题。
数组作为参数的方法
public class StudentsBiz2 {
/**
* 求平均分
* @param scores 参赛成绩数组
* @return
*/
public double calAvg(int[] scores) {
int sum = 0;
double avg = 0.0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
avg = (double)sum/scores.length;
return avg;
}
/**
* 求最高分
* @param scores 参赛成绩数组
* @return
*/
public int calMax(int[] scores) {
int max = scores[0];
for (int i = 1; i < scores.length; i++) {
if(max<scores[i]) {
max = scores[i];
}
}
return max;
}
}
public class TestCal {
public static void main(String[] args) {
StudentsBiz2 st = new StudentsBiz2();
int[] scores = new int[5];
Scanner in = new Scanner(System.in);
System.out.println("请输入五名参赛者的成绩:");
for (int i = 0; i < 5; i++) {
scores[i] = in.nextInt();
}
double avgScores = st.calAvg(scores);
System.out.println("平均成绩:"+avgScores);
int maxScore = st.calMax(scores);
System.out.println("最高成绩:"+maxScore);
}
}
示例中的类定义了两个方法,分别实现了求平均成绩和最高成绩。它们都是带数组参数并且带返回值的方法。
public double calAvg(int[] scores);
public int calMax(int[] scores);
参数scores数组传递所有学员的比赛成绩,而且定义方法时并没有指定数组大小,而是在调用方法时确定要传递的数组的大小。return语句用来返回平均成绩和最高成绩
数组作为参数有点难度,建议慢慢来。
在类中有两个重要的概念:
成员变量和局部变量
1、成员变量:AutoLion类的方法可以直接使用该类定义的成员变量。如果其他类的方法要访问它,必须首先创建该类的对象,然后才能通过操作符"."来引用。
2、局部变量:它的作用域仅仅在定义该变量的方法内,因此只有在这个方法中才能使用。
总的来说,使用成员变量和局部变量时需要注意一下几点内容
1、作用域不同:局部变量的作用域仅限于定义它的方法,在该方法外无法访问。成员变量的作用域在整个内部都是可见的,所以成员方法都可以使用,如果访问权限允许,还可以在类外部使用成员变量。
2、初始值不同:对于成员变量,如果在类定义中没有给他赋初始值。Java会给他一个默认值。基本数据类型的值为0,引用类型的值为null,但是Java不会给局内变量赋初始值,因此局部变量必须要定义赋值后再使用。
3、在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。
4、局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。
Java文档注释:
1、Java文档注释以"/**“开头,以”*/"结尾。
2、每个注释包含一些描述性的文本及若干个Java文档标签。
3、Java文档标签一般以"@"为前缀,常用的Java文档标签如下图所示
标签 | 含义 |
---|---|
@author | 作者名 |
@parameter | 参数及其意义 |
@return | 返回值 |
@version | 版本标识 |
@since | 最早使用该方法/接口的JDK版本 |
@throws | 异常类及抛出条件 |
二、字符串
如何使用字符串
简单地说,使用字符串主要分为两步:
1、定义并初始化字符串。
2、使用字符串,对字符串进行一些处理。
定义字符串的语法:
String 变量名 = "";
String 变量名 = new String();
字符串的长度:
String类提供了length()方法。字符串是一串字符序列,String类的length()方法用来确定字符串的长度,即字符串中的字符数目。调用length()方法返回的结果就是字符串中的字符数。
字符串的比较
在使用equals()方法比较两个字符串时,它逐个对照组成两个字符串的每个字符是否相同。如果都相同,则返回true;否则返回false。对于字符的大小写,也在检查范围之内。
在Java中,双等号()和equals()方法虽都应用于两个字符串,但所判断的内容是有差别的。简单地讲,""判断的是两个字符串对象在内存中的首地址是否相等,即判断是否是同一个字符串对象,而equals()判断的是两个字符串对象是否相等。
但是equals()方法在判断时并不会忽略大小写,因此这时需要用到另一种方法——equalslgnoreCase()方法。lgnore是忽略的意思,这种方法在比较字符串时会忽略字符的大小写。
当然在Java中,String类也提供了两个方法改变字符串中字符的大小写。
1、toLowerCase():转换字符串的英文字母为小写。
2、toUpperCase():转换字符串的英文字母为大写。
字符串的提取和查询
序号 | 方法 | 说明 |
---|---|---|
1 | Public int indexOf(int ch)Public int indexOf(String value) | 搜索第一个出现的字符或字符串 |
2 | Public int lastindexOf(int ch)Public int lastindexOf(String value) | 搜索最后一个出现的字符或字符串 |
3 | Public Sreing substring(int index) | 提取从位置索引开始的字符串部分 |
4 | Public String substring(int beginindex,int endindex) | 提取beginindex和endindex之间的字符串部分 |
5 | Public String trim() | 返回一个前后不含任何空格的调用字符串的副本 |
字符串是一个字符序列,每一个字符都有自己的位置,字符串事实上也是一个字符数组,因此它的位置从0开始到(字符串长度-1)结束。
String中所具有的一些常用方法
获得字符串长度:length()
比较字符串:equals()
连接字符串:concat()
提取字符串:substring()
搜索字符串:indexOf()
拆分字符串:split()
如何使用StringBuffer类
StringBuffer类是String类的增强类。使用StringBuffer类也需要两步完成。
1.声明StringBuffer对象并初始化
//声明一个空的StringBuffer对象
StringBuffer 变量名 = new StringBuffer();
//声明一个字符串"青春无悔"
StringBuffer 变量名 = new StringBuffer("青春无悔");
2.使用StringBuffer对象
StringBuffer类提供了很多方法以供使用,调用时使用"."操作符完成。
常用的StringBuffer类方法
将StringBuffer类型的字符串1转换为String类型的对象并返回。语法如下:
字符串1.toString();
将字符串2连接到字符串1后并返回。该方法和String类的concat()方法一样,都是把一个字符串追加到另一个字符串后面,所不同的是String中只能将String类型的字符串追加到一个字符串后,而StringBuffer可以将任何类型的值追加到字符串之后。
字符串1.append(字符串2);
将参数插入字符串1的指定位置(int 类型)后并返回。参数可以是包括String的任何类型。语法如下:
字符串1.insert(位置,参数);
总结StringBuffer类中一些常用方法:
转换成String类型:toString()
连接字符串:append()
插入字符串:insert()