practice11

question11_常用类

1、在Object类中,定义的finalize方法在_____时调用,toString()方法返回值表示_____,equals方法的作用为_____,getClass方法作用为_____。

对象被垃圾回收

对象的字符串表现形式

判断两个对象值是否相同

获得对象的实际类型

2、写出下列代码的运行结果

class Student {
	private int age;
	private String name;

	public Student() {
	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String toString(){
		return name + " " + age;
	}
}

public class TestStudent {
	public static void main(String args[]){
		Student stu1 = new Student();
		Student stu2 = new Student("Tom", 18);
		System.out.println(stu1);
		System.out.println(stu2);
	}
}

null

0

Tom

18

打印对象,相当于打印对象的字符串表现形式,即:toString方法的返回值,Student类重写覆盖toString方法,返回学生类的name和age属性,stu1对象的name属性和age属性没有被初始化,值为默认值

3、写出下面程序运行的结果

public class TestEquals {
	public static void main(String args[]){
		String str1 = new String("Hello");
		String str2 = new String("Hello");
		System.out.println(str1.equals(str2));
		System.out.println(str1 == str2);
	}
}

true

false

第一个比较使用equals,比较对象的值

第二个比较使用==,比较的是对象的地址

4、写出下面程序运行的结果

class Animal {
}

class Dog extends Animal {
}

public class TestGetClass {
	public static void main(String args[]) {
		Animal a1 = new Dog();
		Animal a2 = new Animal();
		System.out.println(a1 instanceof Animal);
		System.out.println(a1.getClass() == a2.getClass());
	}
}

true

false

第一个比较,判断a1引用所指向的对象,是否是Animal类型或者其子类,a1指向的对象是Dog类型,Dog是Animal子类比较结果为true

第二个比较,比较的是a1指向对象的实际类型(Dog)和a2指向对象的实际类型(Animal)是否相同,比较结果为false

5、Java中的内部类包括

A. 成员内部类
B. 静态内部类
C. 局部内部类
D. 匿名内部类
E. 公开内部类
F. 抽象内部类

ABCD

6、为Worker类增加equals和toString方法。

对equals和toString方法重写

public class Worker {
	private String name;
	private int age;
	private double salary;
	
	public Worker() {
		super();
	}
	
	public Worker(String name, int age, double salary) {
		super();
		this.name = name;
		this.age = age;
		this.salary = salary;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}

	@Override
	public String toString() {
		return "Worker [name=" + name + ", age=" + age + ", salary=" + salary + "]";
	}

	@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false;
		}
		if (this == obj) {
			return true;
		}
		if (obj instanceof Worker) {
			Worker w = (Worker)obj;
			if (this.name.equals(w.name) && this.age == w.age && this.salary == w.salary) {
				return true;
			}
		}
		return false;
	}

}

7、从命令行上读入一个字符串,用两种不同的方法,把该字符串转换为⼀个int 类型:

方法一:把String直接转换为int
方法二:把String转换为Integer,再把Integer转换为int类型

public class Transform {
	public static void main(String[] args) {
		System.out.println("请输入字符串:");
		Scanner input = new Scanner(System.in);
		String str = input.next();
		//第一种方法 直接转换
		int i1 = Integer.parseInt(str);
		System.out.println(i1);
		
		//第二种方法 先转为Integer 再转为int
		//String转换成包装类Integer 
		Integer i2 = new Integer(str);
		//将包装类Integer转换成int
		int i = i2.intValue();
		System.out.println(i);
	}
}

8、有下面代码,在/ 1 /位置,填入什么代码能编译通过?

class Student {
	private int age;
	private String name;

	public Student() {
	}

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String toString(){
		return name + " " + age;
	}
}

public class TestStudent {
	public static void main(String args[]){
		Student stu1 = new Student("tom", 18);
		System.out.println(/*1*/);
	}
}

A. stu1 + “ ” + 100
B. 100 + “ ” + stu1
C. “ ” + 100 + stu1
D. stu1 + 100 + “ ”

ABC

当一个对象与一个字符串相加时,会自动调用对象的toString方法,从而把该对象转化为字符串,再进行字符串的连接。

D选项错误,stu+100做的是对象和整数的加法,编译不通过

9、有下面代码,哪些代码放在//1 处能够编译通过?

class OuterClass {
	private int value1 = 100;
	private static int value2 = 200;

	public void method(int value3) {
		final int value4 = 400;
		class InnerClass {
			public void print() {
			//1
			}
		}
	}
}

A. System.out.println(value1);
B. System.out.println(value2);
C. System.out.println(value3);
D. System.out.println(value4);

ABD

局部内部类可以访问外部类的属性(A)以及静态属性(B)

局部内部类可以访问局部变量,但必须要求局部变量被final修饰(和数据的一致性有关,被内部类访问的局部变量会被拷贝一份到内部类中,例如内部类中存在一个成员变量,用于记录局部变量的值。若局部变量不是final的,其取值就可以被修改,而内部类对象中保存的是其原来的值,这就会出现数据不同步的问题。)

10、已知接口Light 定义如下,把TestLamp 类补充完整

interface Light {
	void shine();
}

//定义Lamp 类:
class Lamp {
	public void on(Light light) {
		light.shine();
	}
}

// 写⼀个类TestLamp,部分代码如下:
public class TestLamp {
	public static void main(String args[]) {
		Lamp lamp = new Lamp();
		// 1
		// 2
	}
}

要求:
10.1 在//1处使用局部内部类技术,调用lamp的on方法要求输出”shine in red”
10.2 在//2处使用匿名内部类技术,调用lamp的on方法要求输出”shine in yellow”

public class TestLamp {
	public static void main(String[] args) {
		Lamp lamp = new Lamp();
		//1局部内部类 实现接口 调用方法
		class RedLight implements Light{
			public void shine() {
				System.out.println("shine is red");
			}
		}
		RedLight redLight = new RedLight();
		lamp.on(redLight);
		
		//2 匿名内部类 重写 lamp.on()调用方法输出
		Light light = new Light() {
			
			@Override
			public void shine() {
				System.out.println("shine is yellow");
			}
		};
		lamp.on(light);
	}
}

11、获取邮箱“duan1223@foxmail.com”中的用户名”duan1223”

12、验证邮箱“duan1223@foxmail.com”是否是一个合法的邮箱格式

12.1邮箱必须包含“@”和“ . ”
12.2最后一个“ . ”的位置必须大于“@”的位置。

13、将随机获取的UUID(含义是通用唯一识别码 Universally Unique Identifier)中的”- ”去掉。

提示:java.util.UUID.randomUUID().toString() //可以获取随机UUID
格式:e6c57443-1667-4d75-98f6-a8863d95e58f

14、在给定的字符串“ABCDEFGhijklmn1234567”中获取随机的4个字符,并使用StringBuilder拼接成字符串。(随机获取到的4个字符中可以出现重复字符)

11~14

import java.util.Random;
import java.util.UUID;

class Demo {
	public static void main(String[] args) {
		//11
		String email = "duan1.223@foxmailcom";

		System.out.println("截取用户名");
		System.out.println(email.substring(0, email.indexOf("@")));
		
		//12
		System.out.println("邮箱" + email + "是否合法?");
		if (email.contains("@") && email.contains(".")) {
			if (email.lastIndexOf(".") > email.indexOf("@")) {
				System.out.println("邮箱合法");
			} else {
				System.out.println("邮箱不合法");
			}
		} else {
			System.out.println("邮箱不合法");
		}
		
		//13
		String uuid = UUID.randomUUID().toString();
		System.out.println("随机获取UUID为:" + uuid);
		System.out.println("去掉-后的结果为:" + uuid.replace("-", ""));

		//14
		String str = "ABCDEFGhijklmn1234567";
		Random r = new Random();
		StringBuilder sb = new StringBuilder();
		//随机的4个字符
		for (int i = 0; i < 4; i++) {
			int index = r.nextInt(21);
			//转换成字符
			char ch = str.charAt(index);
			//拼接
			sb.append(ch);
		}
		System.out.println(sb);
	}
}

15、给定一个由数字组成的字符串

如:"1239586838923173478943890234092";统计出每个数字出现的次数。

public class Demo2 {
	public static void main(String[] args) {
		String str = "1239586838923173478943890234092";
		int c[] = new int[10];
		for (int i = 0; i < str.length(); i++) {
			//返回指定位置的char值
			char ch = str.charAt(i);
			//转换成数字 如果数字相同,值就++
			int a = ch-48;
			c[a]++;
		}
		for (int i : c) {
			System.out.println("每个数字出现的次数:");
			System.out.println(i);
		}
	}
}
posted @ 2021-08-01 20:59  CN_Darren  阅读(194)  评论(0)    收藏  举报