类,对象&字符串

本文深入讲解了类和对象的基础概念,包括类的定义、对象的创建与使用、成员变量与封装,以及String类的构造、比较和常见操作。此外,还介绍了StringBuilder的特性及其与String的区别,实战演示了字符串处理技巧。
摘要由CSDN通过智能技术生成

1、类和对象

类的组成:属性和行为
属性:在类中通过成员变量体现(类中方法外的变量)
行为:通过成员方法来体现(去掉static关键字即可)

1.1 类的定义

例:
手机类:
类名:phone
成员变量:
brand, price
成员方法:
call, sendMessage

public class Phone{
String brand;
int price;
}

public void call(){
}

public void sendMessage(){
}

1.2对象的使用

1.2.1创建对象

格式:类名 对象名 = new 类名();
范例:Phone p = new Phone();

1.2.2 使用对象

使用成员变量:
格式:对象名.变量名
范例:p.brand
使用成员方法:
格式:对象名.方法名()
范例:p.call()

1.3 操作

1.3.1 建一个手机类

建一个package,里面new一个class,
在这里插入图片描述
使用时可以再建一个文件进行使用

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210527081757747.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzUyMzMxNDEy,size_10,color_FFFFFF,t_7

1.3.2 建一个学生类

在这里插入图片描述
测试
在这里插入图片描述

1.4 对象内存图

在这里插入图片描述
其中s1的地址给了s2,s1和s2的数据内容相同。

1.5 类变量,实例变量,类方法,实例方法

public class Person {
	
	static String name = "张三";//被static修饰,是类变量
	public int age = 30;//实例变量
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p1 = new Person();
		p1.name = "漂亮姐姐";
		p1.age = 18;
		System.out.println(p1.name + "  "+ p1.age);
		
		//name变量为类变量,已经被修改。int为实例对象,沿用之前的值
		Person p2 = new Person();
		System.out.println(p2.name + "  "+ p2.age);

		p2.doing();
		Person.kiss();
	}
	
	public void doing(){
		System.out.println("逛街");
		
	}
	
	public static void kiss(){
		System.out.println("羞羞");
	}
}

运行结果
在这里插入图片描述

2.成员变量和局部变量

在这里插入图片描述
红色为成员变量,蓝色为局部变量

区别成员变量局部变量
类中位置不同类中方法外的变量方法中的变量
内存中位置不同堆内存栈内存
初始化值有默认的初始化值没有默认的初始值

3、封装

3.1 private

在这里插入图片描述
如果一个成员变量被private修饰了,外界无法直接访问。
如,在学生类中年龄设置了private,则在测试类中无法直接访问。

若想被其他类使用
在这里插入图片描述
例子

在这里插入图片描述
private 可以对测试类中想要输入的年龄进行判断,如果不合法,输出提示语句。年龄合法才会输出。
在这里插入图片描述

3.2 private 关键字的使用

一个标准类的编写
在这里插入图片描述
一个例子:建立一个类
在这里插入图片描述
进行测试
在这里插入图片描述

3.3 this 关键字的使用

在这里插入图片描述

3.4 封装

在这里插入图片描述
外界要是想访问private修饰的变量,需要用提供的外界的方法。
在这里插入图片描述

4. 构造方法

4.1 构造方法概述

构造方法是一种特殊的方法
在这里插入图片描述

4.2 构造方法注意事项

在这里插入图片描述

区别构造方法成员方法
格式构造方法与类名相同,没有返回值和返回类型任意起名,必须有返回类型,可以没有返回值
作用用于创建对象,并进行初始化用于完成特定功能
调用在创建对象时被调用,一个对象的建立,只调用一次相应的构造函数由创建好的对象调用,可以调用多次

4.3 标准类的制作

要求
在这里插入图片描述
例:

//测试类
package com.lei;

public class StudentDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Student s1 = new Student();
		s1.setName("林青霞");
		s1.setAge(40);
		s1.show();
		
		Student s2 = new Student("朱茵", 30);
		s2.show();
	}

}

//类
package com.lei;

public class Student {
	private String name;
	private int age;
	
	public Student(){
		
	}
	
	public Student(String name, int age){
		this.name = name;
		this.age = age;
	}
	
	public void setName(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
	
	public void setAge(int age){
		this.age = age;
	}
	public int getAge(){
		return age;
	}
	
	public void show(){
		System.out.println(name + "," + age);
	}
}

2.字符串

2.1 API

应用程序编程接口
键盘录入字符串的练习

package String;

import java.util.Scanner;

public class ScannerDemo {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String line = sc.nextLine();
		
		System.out.println(line);
	}

}

2.2 String

Java程序中所有的双引号的字符串,都是String的对象

2.2.1 String类的构造方法

直接赋值:

String s4 = "abc";
System.out.println("s4 " + s4);

其他赋值方法:
在这里插入图片描述

2.2.2 字符串的比较

使用 == 做比较
基本类型:比较数据值
引用类型:比较地址值
字符串比的也是地址值
在这里插入图片描述

import java.util.Scanner;

public class ScannerDemo {

	public static void main(String[] args) {
		String s1 = "ASDF";
		String s2 = "azxc";
		String s3 = "ASDF";
		
		System.out.println(s1.equals(s2));
		System.out.println(s1.equals(s3));
		
	}

}

2.3 案例

案例一:用户登录在这里插入图片描述

public class ScannerDemo {
	public static void main(String[] args) {
		//已知用户名和密码,建立两个字符串
		String username = "文淑慧";
		String password = "qwer";
		int i;
		
		for(i=0; i<3; i++){
		//键盘录入要登陆的用户名和密码
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入用户名:");
		String name = sc.nextLine();
		System.out.println("请输入密码:");
		String pass = sc.nextLine();
		
		if(name.equals(username) && pass.equals(password)){
			System.out.println("log in successfully");
			break;
		}
		else if(2-i == 0){
			System.out.println("你的账户被锁定,请尽快与管理员联系!");
		}
		else {
			System.out.println("你还有" + (2-i) +"次机会");
		}
	}
		
	}

}

案例二:遍历字符串

在这里插入图片描述

public class traversal {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个字符串:");
		String s = sc.nextLine();
		
		for(int i=0; i<s.length(); i++)
			System.out.println(s.charAt(i));
	}

}

使用了charAt方法:指定索引处的字符值

案例三:统计字符个数
在这里插入图片描述

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		System.out.println("please input a string:");
		String s = sc.nextLine();
		
		int bigCount = 0;
		int smallCount = 0;
		int numberCount = 0;
		for(int i=0; i<s.length(); i++){
			char ch = s.charAt(i);
			
			if(ch>='A' && ch<='Z')
				bigCount++;
			else if (ch>='a' && ch<='z')
				smallCount++;
			else if (ch>='0' && ch<='9')
				numberCount++;
		}
		System.out.println("Capital:" + bigCount);
		System.out.println("small letter:" + smallCount);
		System.out.println("number:" + numberCount);
		
	}

案例四:拼接字符串

public class joint {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] arr = {1, 2, 3};
		String s = arrayToString(arr);
		System.out.println("s:"+ s);
	}
	
	//定义一个方法,用于把int数组中的数据按照指定格式拼接成一个字符串返回
	public static String arrayToString(int[] arr){
		String s = "";
		s = s+"[";
		
		for(int i=0; i<arr.length; i++){
			if(i==arr.length-1)
				s = s+arr[i];
			else{
				s = s+arr[i];
				s = s+",";
			}
				
		}
		s = s+"]";
		
		return s;
	}
}

案例五:字符串反转
在这里插入图片描述

public class reversal {

	public static void main(String[] args) {
		Scanner reader = new Scanner(System.in);
		System.out.println("please input a string: ");
		String s = reader.nextLine();
		
		String result = reverse(s);
		System.out.println(result);
		
	}
	public static String reverse(String s){
		String re ="";
		for(int i=0; i < s.length(); i++){
			re = re+s.charAt(s.length()-1-i);
		}
		return re;
	}
}

2.4 StringBuilder

2.4.1 String 和StringBuilder的区别

String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

String str="abc";
System.out.println(str);
str=str+"de";
System.out.println(str);

代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,

2.4.2 String Builder的添加和反转方法

在这里插入图片描述

public class StringBuilder_learn {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		
		//sb.append("hello ");
		//sb.append("world ");
		//sb.append("java ");
		//sb.append(100);
		
		//链式编程
		sb.append("every ").append("thing ").append("is ").append("going ").append("well");
		System.out.println("sb:"+sb);
		
		sb.reverse();
		System.out.println("sb:" + sb);
	}
}

在这里插入图片描述

2.4.3 StringBuilder 和String相互转换

StringBuilder里有两个好用的方法,append() 和 reverse()
在这里插入图片描述

public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuilder sb = new StringBuilder();
		sb.append("hello");
		String s = sb.toString();
		System.out.println(s);
		
		String s = "hello-";
		StringBuilder sb = new StringBuilder(s);
		System.out.println(sb);
	
	}
}

2.4.4 拼接字符串

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值