day11_自我总结
一、回顾
1.租车系统
2.抽象方法
概念:只有方法是声明 没有方法体使用abstract来进行修饰
语法: 访问修饰符 abstract 返回值类型 方法名称(参数列表)
说明:抽象方法必须在抽象类型中
3.抽象类
语法:访问修饰符 abstract class 类名{}
成员: 成员变量
构造方法
方法:成员方法 静态方法 抽象方法
说明:
A.抽象类是不可以实例化对象
B.抽象类中构造方法用于给子类来进行调用
C.抽象类中可以有抽象方法 还可以有其它方法 但是抽象方法必须在抽象类中
D.抽象类一般用于作为父类 抽象类的子类 必须实现抽象类中的所有的抽象方法(子类也是抽象类)
4.接口
语法: 访问修饰符 interface 接口名称{}
成员:
A.接口中的变量 都是静态的常量 默认都是使用 public static final 来进行修饰
B.方法:
a.在jdk1.8之前 接口只能有抽象方法
b.在jdk1.8之后 接口可以有 默认方法 静态方法 抽象方法
在jdk1.9之后 接口可以有私有方法
5.实现:
分类: 单实现与多实现
原则: 必须实现接口中所有的抽象方法
6.类与接口 接口与接口 类与类
类与类: 单继承 多层继承 不能多继承
接口与类: 单实现 多实现
接口与接口: 单继承 多继承 多层继承
7.代码块:
局部代码块 构造代码块 静态代码块(重点)
二、内部类
成员内部类:普通成员内部类、私有成员内部类、静态内部类
//普通的成员内部类
位置:定义在类中 方法外
语法:
访问修饰符 class 外部类名 {
访问修饰符 class 内部类名{
}
}
说明:
A.内部类可以访问外部类的资源(包括私有的资源)
B.外部类访问内部类的资源 必须实例化对象之后 通过对象名来进行访问
C.外部类以外的类可以访问内部类的资源
语法: 外类类.内部类 对象名 = new 外部类().new 内部类()
例子:OutClass.Inner in = new OutClass().new Inner();
//私有的成员内部类
位置:定义在类中 方法外
语法:
访问修饰符 class 外部类名 {
private class 内部类名{
}
}
说明:
A.内部类可以访问外部类的资源(包括私有的资源)
B.外部类访问内部类的资源 必须实例化对象之后 通过对象名来进行访问
C.外部类以外的类不可以访问内部类的资源
//静态内部类
位置: 定义在类中 方法外
语法:
访问修饰符 class 外部类名 {
static class 内部类名{
}
}
说明:
A.静态内部类只能访问外部类的静态的资源
B.外部类访问内部类的资源
a.如果访问是非静态是资源 需要实例化对象之后 通过对象名访问
b.如果访问是静态资源 直接通过类名来访问
C.外部类以外类是可以访问内部类的资源
语法: 外部类.内部类 对象名 = new 外部类.内部类()
例子: OutClass.Inner in = new OutClass.Inner();
局部内部类
定义在方法中的内部类
//局部内部类
位置:定义方法中
语法:
访问修饰符 返回值类型 方法名称(){
class 内部类名{
}
}
C.说明:
局部内部类 外部类只能间接访问其资源
匿名内部类
没有名称的内部类
//匿名内部类
概念: 没有名称内部类
前提:实例化接口(实现类) 或者是抽象类(子类)
三、jar管理(重点)
项目打包的原因:
想调用其他项目资源的时候,得导入该项目的包,于是乎项目打包出现,,方便于调用(被打包项目的)资源
(详细操作流程见备忘录"包含打包jar、使用jar、删除jar(包含删除依赖和删除jar)")
四、API
简介
概念:API 应用程序接口编程 主要就是提供查看jdk相关资源的文档
作用
A.jdk中提供了一些常用的方法以及类 以及接口的使用
B.使用帮助文档来快速查找jdk提供相关的资源 提供开发的效率
使用:(点击JDK_API_1_6_zhCN.CHM)
使用说明
A.查看类的描述
B.查看类的构造方法
C.查看成员方法以及静态方法
参数列表 返回值类型 方法描述
文档注释-注解
@author 作者
@version 版本
@since 说明
@param 参数
@return 返回值
生成帮助文档
编码格式:zh_CN
-encoding UTF-8 -charset UTF-8
五、Object(重点)
5.1简介
1.概念: 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法
Object 是所有类的直接父类 或者是间接父类
2.构造方法
public Object()
3.作用:
A.用于来实例化对象
B.用于给子类来进行调用
5.2 toString() 方法
1.public String toString() 返回该对象的字符串表示
getClass().getName() + '@' + Integer.toHexString(hashCode())
2.返回字符串解释
getClass().getName()==> 返回值是完整包名加上类名
@==>表示一个连接符号 没有特殊的含义
hashCode() 表示是hashcode值
Integer.toHexString()==>表示以十六进制形式来表示
3.toString() 返回的是对象的地址值 没有实际的意义 所有需要重写
4.重写的规则: 返回对象的属性值
5.快捷键 alt+insert
6.自定义对象中 重写toString() 打印对象的名称 默认会调用toString()方法
5.3 equals() 方法
1.方法:public boolean equals(Object obj) 指示其他某个对象是否与此对象“相等”。
2.解释:
对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true
两个对象的地址值是一样才返回true 两个指引 执行同一个堆的内存的地址
3.equals() 默认比较的是两个对象的地址值 没有实际的意义 所有需要进行重写
4.重写的规则:比较对象的属性值是否相同
5.快捷键:alt +insert
6.==与 比较equals()
相同点: 都可以用于来比较是否相等
不同点:
A.==既可以比较基本数据类型 也可以比较引用数据类型 equals() 只能比较引用数据类型
B.==比较基本数据类型 比较的数值是否相同 比较引用数据类型 比较的是地址值是否相等
equals()没有重写之前 比较的对象的地址值是否相同 重写之后 比较的是对象的属性值是否相同
六、String(重点)
6.1简介
1.String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现
2.字符串是常量 使用final来进行修饰 不能改变是地址值 可以改变的是对象的内容
3. String 对象是不可变的,所以可以共享
4.字符串字符值是存在堆内存中字符串常量吃 new String() 是存在 堆内存中
5.字符串的底层是使用字节数组来进行存储
6.2 字符串构造方法 3+1
| 构造方法名称 | 构造方法的描述 |
|---|---|
| String s ="abc" | 字面值底层也会执行字符串的构造方法 |
| public String() | 初始化一个新创建的 String 对象 |
| public String(byte[] bytes) | 将字节数组构成成一个字符串 |
| public String(byte[] bytes, int offset, int length) | 将字节数组指定的长度内容构建成一个字符串 |
| public String(char[] value) | 将字符数组构建成一个新的字符串 |
| public String(char[] value, int offset, int count) | 将字符数组指定的长度内容构建成一个字符串 |
package com.zhenglyz.day11.test2;
public class Test2 {
public static void main(String[] args) {
//字符串字面值
String s="abc";
System.out.println("s = " + s);
//实例化一个空的字符串对象
String s1=new String();
System.out.println("s1 = " + s1);
//将字节数组构建成一个字符串
byte[] bytes1={97,98,99};
String s2=new String(bytes1);
System.out.println("s2 = " + s2);
//将字节数组指定的长度内容构建成一个字符串
byte[] bytes2={97,98,99};
String s3 =new String(bytes2,0,2);
System.out.println("s3 = " + s3);
//将字符数组构建成一个新的字符串
char[] chars1={'a','b','c'};
String s4=new String(chars1);
System.out.println("s4 = " + s4);
//将字符数组指定的长度构建成一个字符串
char[] chars2={'a','b','c'};
String s5=new String(chars2,0,2);
System.out.println("s5 = " + s5);
}
}
6.3 字符常用的方法-判断性
| 方法的名称 | 方法的描述 |
|---|---|
| public boolean contains(CharSequence s) | 判断字符串中是否包含此字符 |
| public boolean equals(Object anObject) | 用于判断两个字符串内容是否相同 |
| public boolean startsWith(String prefix) | 此字符串是否以指定的前缀开始 |
| public boolean endsWith(String suffix) | 此字符串是否以指定的后缀结束 |
| public boolean isEmpty() | 当且仅当 length() 为 0 时返回 true |
| public int length() | 返回此字符串的长度 |
| public boolean equalsIgnoreCase(String anotherString) | 将此 String 与另一个 String 比较,不考虑大小写 |
package com.qf.test15;
public class Test02 {
public static void main(String[] args) {
//判断字符串是否包含篮球
System.out.println("蔡徐坤打篮球贼厉害".contains("篮球"));
System.out.println("蔡徐坤打篮球贼厉害".contains("吴亦凡"));
System.out.println("吴某某被都某某举报".startsWith("吴某某"));
System.out.println("吴某某被都某某举报".startsWith("罗志祥"));
System.out.println("吴某某被都某某举报".endsWith("举报"));
System.out.println("吴某某被都某某举报".endsWith("阿飞"));
System.out.println("abc".equalsIgnoreCase("ABc"));
System.out.println("abc".equalsIgnoreCase("Adc"));
System.out.println(" ".length());
System.out.println("".length());
System.out.println("".isEmpty());
System.out.println("吴亦凡".isEmpty());
}
}
6.4 案例
step01需求
键盘录入一个邮箱地址 判断优先是否合法 以com结尾 包含@ 符号 键盘一个图片的名称判断图片是否合法
step02 分析
A.实例化Scanner
B.使用字符串方法
endsWith() contains()
C.使用选择结构判断是否正确
//step03 代码
package com.zhenglyz.day11.test3;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
System.out.println("请输入邮箱地址");
String email = input.next();
if (email.contains("@") && email.contains("com")) {
System.out.println("邮箱输入正确");
} else {
System.out.println("邮箱输入错误");
}
System.out.println("请输入图片名称");
String fileName = input.next();
if (fileName.endsWith("jpg") || fileName.endsWith("png") ||
fileName.endsWith("gif") || fileName.endsWith("jpeg")) {
System.out.println("图片输入正确");
System.out.println(fileName.length());
} else {
System.out.println("图片输入错误");
System.out.println(fileName.length());
System.out.println(fileName.isEmpty());
}
input.close();
}
}
6.5 字符串常用的方法-得到性
| 方法的名称 | 方法的描述 |
|---|---|
| public char charAt(int index) | 返回指定索引处的 char 值 |
| public int indexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引(从前往后进行查找) |
| public int lastIndexOf(String str) | 返回指定子字符串在此字符串中第一次出现处的索引(从后往前进行查找) |
| public String substring(int beginIndex, int endIndex) | 截取指定的字符串(包头不包尾) |
//代码
package com.qf.test15;
public class Test04 {
public static void main(String[] args) {
String s1 ="聪哥与网红小姐姐约会";
char c = s1.charAt(0);
System.out.println(c);
char c1 = s1.charAt(4);
System.out.println(c1);
String s2="阿飞找了打篮球阿飞找到女朋友";
System.out.println(s2.indexOf("阿"));
System.out.println(s2.lastIndexOf("阿"));
String s3 = s2.substring(4,7);
System.out.println(s3);
String s4= s2.substring(4);
System.out.println(s4);
}
}
6.6 案例
step01 需求
键盘录入一串字符 通过a这个字符出现的次数
step02 分析
A.将字符串拆分一个字符数组
substring()
B.使用循环遍历 与字符a进行对比
C.定义一个变量 统计其次数
//step03 代码
package com.qf.test15;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一串字符");
String line = input.next();
//定义一个字符数组
char[] arrays = new char[line.length()];
//使用循环遍历 给字符数组赋值
for (int i = 0; i < arrays.length; i++) {
arrays[i] = line.charAt(i);
}
//定义一个变量记录
int count = 0;
//使用循环遍历数组
for (int i = 0; i < arrays.length; i++) {
if (arrays[i] == 'a') {
count++;
}
}
System.out.println(count);
}
}
6.7 案例
step01 需求
键盘录入一个银行卡的余额 123456789 将字符处理后的结果: 123,456,789
step02 分析
A.实例化Scanner
B.将字符串拆分到每一个字符串数组中
C.使用循环从后往前遍历(倒着遍历)
i % 3 ==0 i !=0 拼接逗号
其它情况直接拼接 数据
//step03 代码
package com.zhenglyz.day11.test5;
import java.util.Arrays;
import java.util.Scanner;
public class Test5 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
System.out.println("请输入一串字符");
String line = input.next();
String[] arrays = new String[line.length()];
for (int i = 0; i < arrays.length; i++) {
//加一个""的目的是为了是的转换后,类型从char变为String
arrays[i] = (line.charAt(i) + "");
}
//查看是否有存储到自定义类的数组内
System.out.println(Arrays.toString(arrays));
//定义一个应用类型的str来接收
String str = "";
//使用循环遍历数组
for (int i = arrays.length - 1; i >= 0; i--) {
if (i % 3 == 0 && i != 0) {
str += arrays[arrays.length - 1 - i] + ",";
} else {
str += arrays[arrays.length - 1 - i];
}
}
System.out.println(str);
}
}
浙公网安备 33010602011771号