类和对象

类和对象

Java程序设计的另一道风景—面向对象程序设计,英语缩写为OOP,面向对象程序设计是一个里程碑,Alan Kay因为设计了世界第一个面向对象语言Smalltalk而获得图灵奖,java之父James Gosling结合lnternet背景设计了完全面向对象的Java语言。

对象

现实世界中客观存在的任何事物都可以被看做对象,对象可以是有形的,如一辆汽车;它也可以是无形的,如一项计划,因此对象无处不在,因此我们要学会用面向对象的思想考虑问题和编写程序,在面向对象中,对象是用来描述客观事物的一个实体,用面向对象的方法解决问题时,首先要对现实中的对象进行分析与归纳,找出那些对象与要解决的问题是相关的。

对象的属性和方法

对象静态特征静态特征的值动态特征
员工号10001
“收银员”对象 刘新姓名刘新收款,打印账单
部门财务部

在编程中,对象的属性被存储在一些变量里,如可以将“姓名”存储在一个字符串类型的变量中,将“员工号”存储在一个整型变量中,对象的行为则通过定义方法来实现,如“收款”,“打印”,“账单”都可以定义为一个方法。

对象:用来描述客观事物的一个实体,由一组属性和方法构成。

封装

封装(Encapsulation)就是把一个事物包装起来,并尽可能隐藏内部细节,比如一辆法拉利跑车,这辆车在组装前是一堆零散的部件,如发动机,方向盘等,仅靠这些部件是不能发动车的,当把这些部件组装完成后,它才具有发动的功能,显然,这辆法拉利跑车是一个对象,而零部件就是该对象的属性,发动,加速,刹车等行为就是相辅相成的,它们共同组成了实体对象,因此,对象具有封装性。

类定义了对象将会拥有的特征(属性)和行为(方法)。

类的属性:对象所拥有的静态特征在类中表示时称为类的属性,

类的方法:对象执行的操作称为类的方法。

类和对象的关系

类和对象的关系

一个类为它的·全部对象给出了一个统一的定义,而它的每个对象则是符合这种定义的一个实体,因此类和对象的关系就是抽象和具体的关系。

​ 现实世界,概念世界和计算机世界中的类与对象

在这里插入图片描述

Java的类模板

语法:

public class<类名>{
	//定义属性部分
	属性1的类型 属性1;
	属性2的类型 属性2.....
	属性3的类型 属性3//定义方法部分
	方法1;
	方法2.......
	方法n;
	
}

创建一个类,需要使用一个class,一个类名和一对大括号,class是创建类的关键字,在class前有一个public,表示“公有”的意思,类的命名也要遵循一定的规则:

1.不能使用Java中的关键词。

2.不能包含任何嵌入的空格或点号“.”,以及除下划线“—”,字符“$”外的特殊字符。

3.不能已数字开头。

编写类的属性:

通过在类的主体中定义变量来描述类具有的静态特征(属性),这些变量称为类的成员变量。

编写类的方法

通过在类中定义方法来描述类所具有的行为,这些方法称为类的成员方法。

语法·:

访问修饰符 返回值类型 方法名(){
          //方法体
}
如何创建和使用对象

类的作用就是创建对象,由类生成对象,称为类的实例化过程,一个实例就是一个对象,一个类可以生成多个对象。

语法:

类名 对象名  = new 类名();

对象的属性赋值或调用方法语法:

要引用对象的属性和方法,需要使用“.”操作符,其中,对象名在圆点的左边,属性或方法的名称在圆点的右边。

对象名.属性  // 引用对象的属性
对象名.方法名 //引用对象的方法
面向对象的优点

1.与人类的思维习惯一致:面向对象的思维方式从人类考虑问题的角度出发,把人类解决问题的思维过程转变为程序能够理解的过程。

2.信息隐藏,提高了程序的可维护性的安全性:封装实现了模块化和信息隐藏,即将类的属性和行为封装在类中,这保证了对它们的修改不会影响到其他对象,有利于维护,同时,封装使得在对象外部不能随意访问对象的属性和方法,避免了外部错误对它的影响,提高了安全性。

3.提高了程序的可重用性:一个类可以创建多个实例,增加了重用性。

类的无参方法

如何定义类的方法

类的方法必须包括以下三个部分。

1.方法的名称。

2.方法的返回值类型。

3.方法的主体。

public 返回值类型方法名(){
    //方法的主体
}

通常,编写方法时,分两步完成。

第一步:定义方法名和返回值类型。

第二步:在{}中编写方法的主体部分。

在编写方法时,要注意以下三点。

1.方法体放在一对大括号中。方法体就是一段程序代码,完成一定的工作。

2.方法名主要在调用这个方法时使用。在Java中一般采用骆驼命名法。

3.方法执行后可能会返回一个结果,该结果的类型称为返回值类型。使用return语句返回值。

在编写程序时一定要注意方法声明中返回值的类型和方法体中真正返回值的类型是否匹配。如果不匹配,编译器就会报错。return是跳转语句的一种,它主要做两件事情。

1.跳出方法:意思是“我已经完成了,要离开这个方法”。

2.给出结果:如果方法产生一个值,这个值放在return后面,即<表达式>部分,意思是“离开方法,并将<表达式>的值返回给调用它的程序”。

方法调用

在程序中通过使用方法名称从而执行方法中包含的语句,这一过程就称为方法调用。

对象名.方法名();

类的方法调用,均使用如下两种形式。

1.同一个类中的方法,直接使用方法名调用该方法。

2.不同类的方法,首先创建对象,再使用“对象名.方法名()”来调用。

成员变量和局部变量

1.成员变量:AutoLion类的方法可以直接使用该类定义的成员变量。如果其他类的方法要访问它,必须首先创建该类的对象,然后才能通过操作符"."来引用。

2.局部变量:它的作用域仅仅在定义该变量的方法内,因此只有在这个方法中才能使用。

总的来说,使用成员变量和局部变量时需要注意一下几点内容

3.作用域不同:局部变量的作用域仅限于定义它的方法,在该方法外无法访问。成员变量的作用域在整个内部都是可见的,所以成员方法都可以使用,如果访问权限允许,还可以在类外部使用成员变量。

1.初始值不同:对于成员变量,如果在类定义中没有给他赋初始值。Java会给他一个默认值。基本数据类型的值为0,引用类型的值为null,但是Java不会给局内变量赋初始值,因此局部变量必须要定义赋值后再使用。

2.在同一个方法中,不允许有同名的局部变量。在不同的方法中,可以有同名的局部变量。

3.局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级。

JavaDoc注释

程序是程序员的创作作品,它应该具有可读性、相对持久性和可维护性,否则自己以前的作品在之后的阅读中可能给自己或者他人留下障碍,因此,一定要从一开始就养成写注释的习惯。

/**
 *AccpSchool类
 *@author	JadeBird
 *@version 1.0 2019.9.19
 */

JavaDoc是前Sun公司提供的一种技术,它能够从程序源代码中提取类、方法、成员等的注释,形成一个和源代码配套的API帮助文档(简单那来说,就是介绍该类、类的方法和成员变量的文档)。

JavaDoc注释的语法规则

1.JavaDoc注释以"/**“开头,以”*/"结尾。

2.每个注释包含一些描述性的文本及若干个JavaDoc标签。

3.JavaDoc标签一般以"@"为前缀,常用的JavaDoc标签如下图所示

标签含义
@author作者名
@parameter参数及其意义
@return返回值
@version版本标识
@since最早使用该方法/接口的JDK版本
@throws异常类及抛出条件
带参数的方法

定义带参方法

<访问修饰符> 返回值类型 <方法名> (<参数列表>){
    //方法的主体
}

1.<访问修饰符>指该方法允许被访问的权限范围,只能是public、protectd或private。

2.返回值类型指方法返回值的类型。如果方法不返回任何值,他应该声明为void类型。Java对待返回值的要求很严格,方法返回值必须与所说明的类型相匹配。使用return语句返回值。

3.<方法名>是定义的方法和名字,它应该使用合法的标识符。

4.<参数列表>是传送给方法的参数列表。列表中各参数间以逗号分隔。

调用带参方法

调用带参方法与无参方法语法基本相同,但是在调用带参方法时必须传入实际的参数的值

对象名.方法名(参数1,参数2....参数n);

在定义方法和调用方法时,把参数分别称为形式参数和实际参数,简称是在定义方法时对参数的称呼,目的是定义方法需要传入的参数个数和类型。实参是在调用方法时传递给方法处理的实际的值。

在调用方法时,需要注意以下两点:

1.先实例化对象,再调用方法。

2.实参的类型、数量、顺序都要与形参一一对应。

带多个参数的方法

带参方法的参数个数无论错少,在使用时只要注意实参和形参一一对应,传递的实参值与形参的数据类型相同、个数相同、顺序一致,就掌握了带参方法的使用。

对象作为参数的方法
public class Student {
	int id;
	String name;
	int age;
	int score;
	public void showInfo() {
		System.out.println(id+"\t"+name+"\t"+age+"\t"+score);
	}
}
public class StudentsBiz3 {
	Student[] students = new Student[30];
	public void addStudent(Student stu) {
		for (int i = 0; i < students.length; i++) {
			if(students[i] == null) {
				students[i] = stu;
				break;
			}
		}
	}
	public void showStudents() {
		System.out.println("本班学生列表:");
		for (int i = 0; i < students.length; i++) {
			if(students[i] != null) {
				students[i].showInfo();
			}
		}
		System.out.println();
	}
}

调用该方法的代码如下:

public class TestAddd {
	public static void main(String[] args) {
	Student student1 = new Student();
	student1.id = 10;
	student1.name = "王紫";
	student1.age = 18;
	student1.score = 99;
	Student student2 = new Student();
	student2.id = 11;
	student2.name = "郝田";
	student2.age = 19;
	student2.score = 60;
	StudentsBiz3 studentsBiz = new StudentsBiz3();
	studentsBiz.addStudent(student1);
	studentsBiz.addStudent(student2);
	studentsBiz.showStudents();		
	}
}

在示例中,Student[] students = new Student[30];表示声明了大小为30的学生对象数组,即数组students可以存储30个学生对象。方法带有一个Student类型 参数,调用时将传递一个学生对象。就传递的参数而言,这里的Student类型的参数与前面学习的int、String等类型的参数相同,需要保证形参与实参的一致。

为什么需要包

包主要有以下三个方面的作用

  1. 包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。
  2. 防止类名冲突:Java中只有在不同包中的类才能重名。
  3. 包允许在更广的范围内保护类、数据和方法,可以在包内定义类。根据规则,包外的代码有可能不能访问该类。
如何声明包

要声明一个包,只要包含一个package命令作为一个Java源文件的第一条语句就可以。

package cn.jbit.classandobject; //声明包

package是关键字。包的声明必须是Java源文件中的第一条非注释类语句,而且一个源文件只能有一个包声明语句。Java中,包被设计与文件系统结构相对应。因此,在命名包时,要严格遵守以下编码规范:

1.Java包的名字通常由小写字母组成,不能以圆点开头或结尾。

2.一个唯一包名的前缀通常是全部小写的ASCII字母,并且是一个顶级域名com、edu、gov、net或org。通常使用知足的网络域名的逆序。

3.包名的后续部分依不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的组成来区分部门、项目、机器或注册名。

包和目录的关系

Java中每个包都有对应于文件系统中同名的子目录,包的嵌套反映了系统中系统中的目录层次,如包cn.jbit.classandobject对应文件系统中的cn\jbit\classandobject。

如何导入包

要使用不在同一个包中的类,需要将包显式地包括在Java程序中。在Java中,使用关键字import告知编译器所要使用的类位于哪一个包中,这个过程称为导入包。

import java.util.*;
import 包名.类名;

包名可以是系统提供的包,也可以是自己定义的包。

声明包的含义:声明当前类所处的位置。

导入包的含义:声明在当前类中要使用到的其他类所处的位置。

字符串

如何使用字符串

简单地说,使用字符串主要分为两步:

  1. 定义并初始化字符串。

  2. 使用字符串,对字符串进行一些处理。

    语法:

// 创建一个字符串对象”Hello World“
String s = "Hello World";
// 创建一个空字符串
String s = new String();
字符串的长度

String类提供了length()方法。字符串是一串字符序列,String类的length()方法用来确定字符串的长度,即字符串中的字符数目。调用length()方法返回的结果就是字符串中的字符数。

语法:

字符串1.length();

返回字符串1的长度。

字符串的比较

在使用eruals()方法比较两个字符串时,它逐个对照组成两个字符串的每个字符是否相同。如果都相同,则返回true;否则返回false。对于字符的大小写,也在检查范围之内。

语法:

字符串1.length(字符串2;

比较两个字符串的值是否相同,返回boolean类型的值,如果相同,返回true,否则返回false。

在Java中,双等号()和equals()方法虽都应用于两个字符串,但所判断的内容是有差别的。简单地讲,""判断的是两个字符串对象在内存中的首地址是否相等,即判断是否是同一个字符串对象,而equals()判断的是两个字符串对象是否相等。但是equals()方法在判断时并不会忽略大小写,因此这时需要用到另一种方法——equalslgnoreCase()方法。lgnore是忽略的意思,这种方法在比较字符串时会忽略字符的大小写。

当然在Java中,String类也提供了两个方法改变字符串中字符的大小写。

1.toLowerCase():转换字符串的英文字母为小写。

2.toUpperCase():转换字符串的英文字母为大写。

复杂的字符串处理

字符串的连接

创建字符串对象时,使用"+“运算符将多个字符串连接成一个新字符串,并且使用”+“可以将任意多个字符串连接在一起。而且,在使用”+“运算符连接字符串和int(或double)类型数据时,”+"将int(或double)类型数据自动转换成String类型。除此之外,String类也提供了另一个方法concat(),将一个字符串连接到另一个字符串的后面。

字符串1.concat(字符串2);
字符串的提取和查询
序号方法说明
1Public int indexOf(int ch)Public int indexOf(String value)搜索第一个出现的字符或字符串
2Public int lastindexOf(int ch)Public int lastindexOf(String value)搜索最后一个出现的字符或字符串
3Public Sreing substring(int index)提取从位置索引开始的字符串部分
4Public String substring(int beginindex,int endindex)提取beginindex和endindex之间的字符串部分
5Public String trim()返回一个前后不含任何空格的调用字符串的副本

字符串是一个字符序列,每一个字符都有自己的位置,字符串事实上也是一个字符数组,因此它的位置从0开始到(字符串长度-1)结束。

可见,要想在程序中处理好字符串,关键是将这些方法巧妙地结合起来,灵活运用。

判断Java文件名是否有效时,使用的判断条件如下:

index != -1 && index != 0 && fileName.substring(index+1,fileName.length()).equals("java")
字符串的拆分
字符串1.split(String separator,int limit);

其中:

  1. separator可选项,标识拆分字符串时使用一个或多个字符。如果不选择该项,则返回包含该字符串所有单个字符的元素数组。
  2. limit可选项,该值用来限制返回数组中的元素个数。

StringBuffer类

如何使用StringBuffer类

StringBuffer类位于java.lang包中,是String类的增强类。使用StringBuffer类也需要两步完成。

1.声明StringBuffer对象并初始化

//声明一个空的StringBuffer对象
StringBuffer sb1 = new StringBuffer();
//声明一个字符串"青春无悔"
StringBuffer sb2 = new StringBuffer("青春无悔");

2.使用StringBuffer对象

StringBuffer类提供了很多方法以供使用,调用时使用"."操作符完成。

常用的StringBuffer类方法

语法:

字符串1.toString();

将StringBuffer类型的字符串1转换为String类型的对象并返回。

语法:

字符串1.append(字符串2);

将字符串2连接到字符串1后并返回。该方法和String类的concat()方法一样,都是把一个字符串追加到另一个字符串后面,所不同的是String中只能将String类型的字符串追加到一个字符串后,而StringBuffer可以将任何类型的值追加到字符串之后。

语法:

字符串1.insert(位置,参数)

将参数插入字符串1的指定位置(int 类型)后并返回。参数可以是包括String的任何类型。

字符串总结

String

获得字符串长度:length()

比较字符串:equals()

连接字符串:concat()

提取字符串:substring()

搜索字符串:indexOf()

拆分字符串:split()

StringBuffer

转换成String类型:toString()

连接字符串:append()

StringBuffer类型的字符串1转换为String类型的对象并返回。

语法:

字符串1.append(字符串2);

将字符串2连接到字符串1后并返回。该方法和String类的concat()方法一样,都是把一个字符串追加到另一个字符串后面,所不同的是String中只能将String类型的字符串追加到一个字符串后,而StringBuffer可以将任何类型的值追加到字符串之后。

语法:

字符串1.insert(位置,参数)

将参数插入字符串1的指定位置(int 类型)后并返回。参数可以是包括String的任何类型。

字符串总结

String

获得字符串长度:length()

比较字符串:equals()

连接字符串:concat()

提取字符串:substring()

搜索字符串:indexOf()

拆分字符串:split()

StringBuffer

转换成String类型:toString()

连接字符串:append()

插入字符串:insert()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值