第五周课程总结
一、第五周课程总结
1、this关键字
this可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用。当一个类的属性(成员变量)名与访问该属性的方法参数名相同时,则需要使用 this 关键字来访问类中的属性,以区分类的属性和方法中的参数。
this用于访问本类中的属性、调用本类的构造方法和表示当前对象,且如果本类没有此属性或方法则从父类中继续查找。
this调用本类构造,必须放在构造方法的首行。
2、super关键字
在以下情况下需要使用 super 关键字:
- 在类的构造方法中,通过 super 语句调用该类的父类的构造方法。
- 在子类中访问父类中的成员。
super 调用父类的构造方法:子类可以通过 super 关键字来调用一个由父类定义的构造方法
super 访问父类中的成员与 this 关键字的使用相似,只不过它引用的是子类的父类。
由于子类不能继承父类的构造方法,因此,要调用父类的构造方法,必须在子类的构造方法体的第一行使用 super() 方法。该方法会调用父类相应的构造方法来完成子类对象的初始化工作。
3、 final修饰符
final 关键字表示对象是最终形态的,对象是不可改变的意思。final 应用于类、方法和变量时意义是不同的,但本质是一样的:final 表示不可改变。
final 用在变量的前面表示变量的值不可以改变,此时该变量可以被称为常量;final 用在方法的前面表示方法不可以被重写;final 用在类的前面表示类不可以被继承,即该类是最终形态,如常见的 java.lang.String 类。
final 修饰类中的属性:表示该属性一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对对象属性来说其引用不可再变。其初始化可以在两个地方:一是其定义处,也就是说在 final 属性定义时直接给其赋值;二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时赋值,又在构造函数中赋予另外的值。
final 修饰类中的方法说明这种方法提供的功能已经满足当前要求,不需要进行扩展,并且也不允许任何从此类继承的类来重写这种方法,但是继承仍然可以继承这个方法,也就是说可以直接使用。在声明类中,一个 final 方法只被实现一次。
final 修饰类:表示该类是无法被任何其他类继承的,意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。对于 final 类中的成员,可以定义其为 final,也可以不是 final。而对于方法,由于所属类为 final 的关系,自然也就成了 final 型。也可以明确地给 final 类中的方法加上一个 final,这显然没有意义。
4、 Java 抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
5、 Java多态性
多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。
Java 实现多态有 3 个必要条件:继承、重写和向上转型。只有满足这 3 个条件,开发人员才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而执行不同的行为。
1、继承:在多态中必须存在有继承关系的子类和父类。
2、重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
3、向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才既能可以调用父类的方法,又能调用子类的方法。
实验报告三
二、实验报告:String类的应用
1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码、结果截图。)
统计该字符串中字母s
出现的次数。
public static void main(String[] args)
{
String a = "this is a test of java";
int n = 0;
char[] b = a.toCharArray(); //构建字符串数组
for (int i = 0; i < b.length; i++)
{
if (b[i] == 's')
n++;
}
System.out.println("该字符串中字母s出现的次数:" + n);
}
统计该字符串中子串“is”
出现的次数。
public static void main(String[] args)
{
String a = "this is a test of java";
int n = 0;
char[] b = a.toCharArray(); //构建字符串数组
for (int i = 0; i < b.length; i++)
{
if (b[i] == 'i' && b[i + 1] == 's')
n++;
}
System.out.println("该字符串中字母s出现的次数:" + n);
}
统计该字符串中单词“is”
出现的次数。
public static void main(String[] args)
{
String a = "this is a test of java";
String b[] = a.split(" ");
int n = 0;
for (int i = 0; i < b.length; i++)
{
if ( b[i].equals("is") )
n++;
}
System.out.println("该字符串中单词“is”出现的次数: " + n);
}
实现该字符串
的倒序输出。
public static void main(String[] args)
{
String a = "this is a test of java";
char[] b = a.toCharArray();
for (int i = b.length - 1; i >= 0; i--)
System.out.print(b[i]);
}
/*
public static void main(String[] args)
{
StringBuffer str=new StringBuffer();
str.append("this is a test of java");
System.out.print( "字符串"+"this is a test of java"+"的倒序输出: \n\n\n"+str.reverse() );
}
*/
2.请编写一个程序,使用下述算法加密或解密用户输入的英文字串。要求源代码、结果截图。
实验代码:
import java.util.Scanner;
public class Mima
{
public static void main(String[] args)
{
System.out.print("输入密码: ");
Scanner hun=new Scanner(System.in);
String password1 = hun.nextLine();
char c[]=password1.toCharArray();
System.out.print("算法加密后: ");
System.out.print(c[password1.length() - 3]);
System.out.print(c[password1.length() - 2]);
System.out.print(c[password1.length() - 1]);
for(int i=0;i<password1.length()-3;i++)
System.out.print(c[i]);
}
}
实验截图:
3.已知字符串“ddejidsEFALDFfnef2357 3ed”。输出字符串里的大写字母数,小写英文字母数,非英文字母数。
实验代码:
public static void main(String[] args)
{
String str = "ddejidsEFALDFfnef2357 3ed";
int x = 0, y = 0, z = 0;
char[] sss = str.toCharArray();
for ( int i = 0; i < str.length(); i++ )
{
if (sss[i] >= 'a' && sss[i] <= 'z')
x++;
else if (sss[i] >= 'A' && sss[i] <= 'Z')
y++;
else
z++;
}
System.out.println("小写英文字母数: " + x);
System.out.println("\n大写字母数: " + y);
System.out.println("\n非英文字母数: " + z);
}
实验截图: