第五周学习总结
1.学习了继承的相关知识点:
(1) 继承的格式为class 子类 extends 父类{}
(2) 继承实际上是通过子类去扩展父类的功能
(3) 一个子类只能继承一个父类,也就是说,继承只允许多层继承不能多重继承
(4) 子类不能直接访问父类中的私有属性,但是可以调用父类中的getter或者setter去访问
(5) 子类对象在实例化之前必须首先调用父类中的构造方法再调用子类自己的构造方法,子类也可以直接使用super()调用父类中的无参构造
(6) 方法的覆写即子类定义了与父类同名的方法,但被子类覆写的方法不能有比父类更为严格的访问权限,当方法被覆写之后,子类对象调用的将是被覆写后的方法
7) 子类如果和父类定义了相同名称的属性,则在子类中直接访问时采用就近原则,即先找到本类中的属性,直接用super属性
(8) 还学习了重载和覆写的区别
区别点 | 重载 | 覆写 |
单词 | Overloading | Overriding |
定义 | 方法名称相同,参数的类型和个数不同 | 方法名称,参数的类型,返回值类型全部相同 |
定义 | 对权限没有要求 | 被覆写的方法不能拥有更为严格的权限 |
范围 | 发生在一个类中 | 发生在继承类中 |
(8)super关键字的运用
使用super可以从子类中调用父类的构造方法,普通方法以及属性
区别点 | this | super |
属性访问 | 访问本类中的属性,如果本类中没有此属性则从父类中查找 | 访问父类中的属性 |
方法 | 访问本类中的方法,如果没有则从父类中继续查找 | 直接访问父类中的方法 |
调用构造 | 调用本类构造,必须放在构造方法的首行 | 调用父类构造,必须放在子类构造方法的首行 |
特殊 | 表示当前对象 | 无此概念 |
(9)final关键字
使用final声明的类不能有子类
使用final声明的方法不能被子类所覆写
使用finai声明的变量即为常量,不可更改
(10)抽象类
一个子类只能继承一个抽象类
包含一个抽象方法的类必须是抽象类
抽象方法只需要声明而不需要实现,子类必须覆写抽象类中的抽象方法
(11)接口以及对象的多态性
在进行对象的向下转型之前,必须首先发生对象向下转型
第三次实验报告
实验三 String类的应用
实验目的
掌握类String类的使用;
学会使用JDK帮助文档;
实验内容
1.已知字符串:"this is a test of java".按要求执行以下操作:(要求源代码、结果截图。)
(1)统计该字符串中字母s出现的次数。
package project;
public class Test1 {
public static void main(String[] args) {
String str = "This is a test of Java";
int count = 0;
char[] c = str.toCharArray();
for(int i = 0;i<c.length;i++){
if(c[i]=='s'){
count++;
}
}
System.out.println(count);
}
}
(2)统计该字符串中子串“is”出现的次数
package project;
public class Test2 {
public static void main(String[] args) {
String str = "This is a test of java";
int count = str.indexOf("is");
System.out.println(count);
}
}
(3)统计该字符串中单词“is”出现的次数
package project;
public class Test3 {
public static void main(String[] args) {
String str = "This is a test of java";
int count = 0;
String[] s = str.split(" ");
for(String e:s){
if(e.equals("is")){
count++;
}
}
System.out.println(count);
}
}
(4)实现该字符串的倒序输出
package project;
public class Test4 {
public static void main(String[] args) {
String str = "This is a test of java";
StringBuffer sb = new StringBuffer(str);
System.out.println(sb.reverse().toString());
}
}
总结:感觉第一大题没有什么难度,就是String类方法的简单应用,老师上课也讲过其中的一些题
2.请编写一个程序,使用下述算法加密或解密用户输入的英文字串。要求源代码、结果截图
package project;
import java.util.Scanner;
public class Coad {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
String str1 = sc.nextLine();
char c[] = str1.toCharArray();
char a[] = new char[str1.length()];
int i,j=0;
if(str1.length()==1) {
System.out.println(c);
}
else if(str1.length()==2) {
System.out.print(c[1]);
System.out.print(c[0]);
}
else {
for(i = c.length-3;i<c.length;i++) {
a[j] = c[i];
j++;
}
for(i=0;i<c.length-3;i++) {
a[j]=c[i];
j++;
}
}
System.out.println(a);
}
}
总结:直接用public char[] toCharArray(),将字符串变成字符数组,然后用数组去解决问题,先前不知道应该怎么去解决问题,但有自己的思考方向与朋友讨论解决了问题.
3.已知字符串“ddejidsEFALDFfnef2357 3ed”。输出字符串里的大写字母数,小写英文字母数,非英文字母数。
package project;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
String str="ddejidsEFALDFfnef2357 3ed";
int letters = 0;
int capitalLetters = 0;
int noEnglishLetters = 0;
char c[] = str.toCharArray();
for(char a:c){
if(a>='a'&&a<='z'){
capitalLetters++;
}
else if(a>='A'&&a<='Z'){
letters++;
}
else{
noEnglishLetters++;
}
}
System.out.println("小写英文字母数:"+letters);
System.out.println("大写英文字母数:"+capitalLetters);
System.out.println("非英文字母数:"+noEnglishLetters);
}
}
总结:直接用String类方法将字符串转换为字符数组,然后用数组,for循环就可以解决问题
时间过得很快,转眼间就第五周了,感觉对知识点还不是很熟悉,也缺乏一定的练习,希望自己能利用课外的时间好好加油,不忘初心,方得始终.