欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一、类和对象

程序员文章站 2022-07-15 17:07:11
...

一、类和对象

1、对象

现实世界中客观存在的任何事物都可以被看做对象,对象是用来描述客观事物的一个实体

2、对象的属性和方法

包括静态特征和动态特征

1)静态特征

静态特征也被称为属性,是可以用某些数据来描述的特征,如人的姓名,年龄等。

2)动态特征

动态特征也被称为方法,是对象所表现的行为或对象所具有的功能,如购物,收款等。

3、类

类是由一组具有相同属性和共同行为的实体抽象而来的,它是一种抽象的概念,类定义了对象将会拥有的特征(属性)和行为(方法)

4、类和对象的关系

类是对象的抽象,对象是类的具体

5、Java中的类模板

语法

public class <类名>{
	//定义属性部分
	属性1的数据类型  属性1;
	属性2的数据类型  属性2;
	..........
	
	//定义方法部分
	方法1;
	方法2;
	.........
}
类命名的规则

(1)不能使用java中任何的关键字。

(2)不能包含任何嵌入的空格或点号".",以及下划线"_",字符"$"外特殊字符。

(3)不能数字开头。

6、如何定义类

1)定义类名

通过定义类名,得到程序最外层的框架。

语法

public class 类名{

}
2)编写类的属性

通过在类的主体中定义变量来描述类所具有的属性,这些变量称为类的成员变量

语法

public class 类名{
	数据类型  属性名;
}
3)编写类的方法

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

语法

访问修饰符 返回值类型 方法名(){
	//方法体
}
//代码表示,方法名和返回值类型可自己定义
public void show(){
	//方法体
}

7、如何创建和使用对象

创建对象语法

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

调用对象语法

引用需要用"."操作符
对象名.属性	//引用对象的属性
对象名.方法名();	//引用对象的方法

8、封装

封装就是把一个事物包装起来,并尽可能隐藏内部细节,对象具有封装性

9、面向对象的优点

·与人类的思维习惯一致

·信息隐藏,提高了程序的可维护性和安全性

·提高了程序的可重用性

二、类的无参方法

1、类的方法

类的方法是一个功能模块,类的方法定义了类某种行为(功能),类的每一个方法都实现了一个功能

2、如何定义类的方法

类的方法语法

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

3、return的使用

方法执行后可能返回一个结果,该结果的类型称为返回值类型。

语法

return 表达式;
//返回值类型为什么类型,表达示就要为什么类型的值

return语句是跳转语句的一种,它主要做两件事

→ 跳出方法。意思是我已经完成了,要离开这个方法。

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

4、调用方法

语法

对象名.方法名();

5、变量的作用域

1)成员变量

在类中定义的变量称为类的成员变量

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

2)局部变量

在方法中定义的变量称为局部变量

它的作用域仅仅在定义该变量的方法内,因此只有在这个方法中能够使用。

3)使用成员变量和局部变量时注意事项

(1)作用域不同

(2)初始值不同

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

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

6、什么是JavaDoc注释

就是介绍该类,类的方法和成员变量的文档

语法

/**
*这是一个演示程序
*/

生成JavaDoc注释的方法

(1)使用命令行方式生成

(2)使用MyEclipse工具生成

三、类的带参数的方法

1、定义带参方法

语法

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

public class Shi1 {
	String [] names = new String[5];	//学生姓名数组
	public  void addName(String name) {	//有参方法,增加学生姓名
		for(int i=0; i<names.length;i++) {
			if(names[i] == null) {
				names[i] = name;
				break;
			}
		}
	}
	public void showNames() {	//无参方法,显示全部学生姓名
		for(int i=0; i<names.length; i++) {
			System.out.println(names[i]);
		}
	}
}

注意事项:

(1)<访问修饰符>指该方法允许被访问的权限范围,只能是public、protectd或private。
(2)返回值类型指方法返回值的类型。如果方法不返回任何值,他应该声明为void类型。Java对待返回值的要求很严格,方法返回值必须与所说明的类型相匹配。使用return语句返回值。
(3)<方法名>是定义的方法和名字,它应该使用合法的标识符。
(4)<参数列表>是传送给方法的参数列表。列表中各参数间以逗号分隔。

2、调用带参方法

在定义方法时把参数称为形参,在调用方法时把参数称为实参。

调用方法时,需要注意以下两点:
1> 先实例化对象,再调用方法

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

语法

对象名.方法名(参数1,参数2,···,参数n);
import java.util.Scanner;
public class Shi2 {
	public static void main(String[] args) {
		Shi1 st  = new Shi1();
		Scanner  in = new Scanner(System.in);
		for(int i=0; i< st.names.length; i++) {
			System.out.print("请输入学生姓名:");
			String newName = in.next();	
			st.addName(newName);	//调用方法并传实参
		}
		st .showNames();		//显示全部学生的姓名
	}
}

3、深入理解带参方法

数组作为参数的方法

public class Test{   
    public static void main(String[] args) {       
        Demo st =new Demo();        
        int [] scores =new int[5];  //保存比赛成绩       
        Scanner input =new Scanner(System.in);        
        System.out.println("请输入五名参赛者的成绩:");        
        for (int i = 0; i < 5; i++) {            
            scores[i]=input.nextInt();   //传入实参       
        }
        double avgScore=st.calAvg(scores);   //调用方法并接收      
        System.out.println("平均成绩:"+avgScore); 
    }
}

对象作为参数的方法

语法

​ 类名称 [ ]对象数组名= new 类名称[长度];

public class Stu{
	String name;
	int age;
	int score;
	public void showInfo() {
		System.out.println(name+"\t"+age+"\t"+score);
	}
}

public class Test{
	Stu[] stu = new Stu[30];
	public void addStudent(Student st) {
		for (int i = 0; i < stu.length; i++) {
			if(stu[i] == null) {
				stu[i] = st;
				break;
			}
		}
	}
	public void showStudents() {
		System.out.println("本班学生列表:");
		for (int i = 0; i < stu.length; i++) {
			if(stu[i] != null) {
				stu[i].showInfo();
			}
            System.out.println();
		}
	}
}

4、包

1)为什么需要包

<> 包允许将类组合成较小的单元(类似文件夹),易于找到和使用相应的类文件。

<> 防止命名冲突

<> 包允许在更广的范围内保护类、数据和方法,可以在包内定义类。根据规则,包外的代码有可能不能访问该类。

2)如何声明包

语法

package  包名;

注意事项:
<> Java包的名字通常由小写字母组成,不能以圆点开头或结尾。.

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

<> 包名的后续部分依不同机构各自内部的规范不同而不同。

3)如何导入包

语法

import  包名.类名;

import  包名.*;
package Ch014;
public class Shi7 {
	public void showMessage() {
		System.out.println("这是上海Acpp中心。");
	}
}

package daoru;		//声明包
import Ch014.Shi7;	//导入包
public class Shi71 {
	public static void main(String[] args) {
		Shi7 center = new Shi7();
		center.showMessage();		//使用AccpSchool类的方法
	}
}

四、字符串

1、如何使用字符串

(1)定义并初始化字符串。

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

语法

String s = "Hello World"; 	//创建对象

String s = new String();	//创建一个空字符串

2、字符串的长度

语法

字符串1.length();
import java.util.*;
public class Yx1 {
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		String uname,pwd;
		System.out.print("请输入用户名: ");
		uname=input.next();
		System.out.print("请输入密码:");
		pwd=input.next();
		if(pwd.length()>=6) {	//判断密码长度
			System.out.print("注册成功! ");
		}else{
			System.out.print("用户名或密码不匹配,登录失败!"); 
		}
	}
}

3、字符串的比较

语法

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

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

import java.util.*;
public class Yx2 {
	public static void main(String[] args){
		Scanner input = new Scanner(System.in);
		String uname,pwd;
		System.out.print("请输入用户名: ");
		uname=input.next();
		System.out.print("请输入密码:");
		pwd=input.next();
		if(uname.equals ("TOM") && pwd. equals("1234567")) {
			System.out.print("登录成功! ");
		}else{
			System.out.print("用户名或密码不匹配,登录失败!"); 
		}
	}
}

忽略大小写的比较方法

语法

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

字符串.toLowerCase();
返回字符串的小写形式

字符串.toUppCase();
返回字符串的大写形式

4、复杂的字符串处理

1)字符串的连接

语法

字符串1.concat(字符串2);
String s = new String("你好");
String name = new String("张三");
String sentence = s.concat(name);
2)字符串的提取和查询
方法 说明
public int indexOf(int ch) public int indexOf(String value) 搜索第一个出现的字符或字符串
public int lastIndexOf(int ch) public int lastIndexOf(String value) 搜索最后一个出现的字符或字符串
public String substring(int index) 提取从位置索引开始的字符串部分
public String substring(int beginindex,int endindex) 提取beginindex和endindex之间的字符串部分
public String trim()s 返回一个前后不含任何空格的调用字符串的副本

示例:

import java.util.*;
public class Yx6 {
	public static void main(String[] args){
		boolean fileCorrect = false;
		boolean emailCorrect = false;
		System.out.println("----欢迎进入作业提交系统---- ");
		Scanner input = new Scanner (System.in);
		System.out.print("请输入Java文件名: ");
		String fileName = input.next();
		System.out.print("请输入你的邮箱:");
		String email = input. next();
		
		int index = fileName.lastIndexOf("."); //"."的位置
		if (index!=-1 && index!=0 &&
				fileName.substring (index+1,
				fileName.length()).equals("java")){
				fileCorrect = true;           //标识文件名正确
		}else{
			System.out.println("文件名无效。");
		}
		if (email.indexOf('@')!=-1 &&
			email.indexOf('.')>email.indexOf('@')){	
			emailCorrect = true; 			//标识E-mail正确
		}else{
			System.out.println("E-mail无效。");
		}
		if(fileCorrect && emailCorrect) {
			System.out.println("作业提交成功");
		}else {
			System.out.println("作业提交失败");
		}
	}
}
3)字符串的拆分

语法

字符串1.split(String separator,int limit);

<> separator可选项,标识拆分字符串时使用一个或多个字符。如果不选择该项,则返回包含该字符串所有单个字符的元素数组。

<> limit可选项,该值用来限制返回数组中的元素个数。

示例:

public class Yx7 {
	public static void main(String[] args) {
		String words = "长亭外 古道边 芳草碧连天 晚风拂 柳笛声残 夕阳山外山";
		String[] printword=new String[100];
		System.out.println("***原歌词格式***\n"+words);
		System.out.println("\n***拆分后歌词格式***");
		printword=words.split(" ");		//按照空格进行拆分
		for(int i = 0;i<printword.length;i++) {
			System.out.println(printword[i]);	//打印输出
		}
	}
}

5、StringBuffer类

1)如何使用StringBuffer类

<> 声明StringBuffer对象并初始化

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

<> 使用StringBuffer对象

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

2)常用的StringBuffer类方法

语法

<1>

字符串1.toString();
//该方法是将StringBuffer类型的字符串1转化为String类型的对象并返回。

示例:

String s1 = sb2.toString();		//转换String类

<2>

字符串1.append(字符串2);
//该方法为StringBuffer类的拼接,但是StringBuffer类的拼接可以将任何类型的值追加到字符串的后面,而String类只能追加String类型的。

示例:

public class Yx8 {
	public static void main(String[] args) {
		StringBuffer sb = new StringBuffer("青春无悔");
		int num=110;
        //在字符串后面追加字符串
		StringBuffer sb1 = sb.append("我心永恒");
		System.out.println(sb1);
        //在字符串后面追加字符
		StringBuffer sb2 = sb1.append('啊');
		System.out.println(sb2);
        //在字符串后面追加整形数字
		StringBuffer sb3 = sb2.append(num);
		System.out.println(sb3);
	}
}

<3>

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

示例:

import java.util.*;
public class Yx9 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
        //接收数字串,存放于StringBuffer类型的对象中
		System.out.print("请输入一串数字:");
		String nums = input.next();
		StringBuffer str=new StringBuffer(nums);
        //从后往前每隔三位数添加逗号
		for(int i=str.length()-3;i>0;i=i-3) {
			str.insert(i,',');
		}
		System.out.print(str);
	}
}
3)StringBuffer操作字符串的方法常用的如下

<>转换成String类型:toString()

<>连接字符串:append()

<>插入字符串:insert()