1.概念:定义在方法中的类,或者定义在类中的类
2.分类:
成员内部类:普通成员内部类、私有成员内部类、静态内部类
局部内部类:定义在方法中的内部类
匿名内部类:没有名称的内部类
3.普通成员内部类
位置:定义在类中,方法外
语法:
访问修饰符 class 外部类类名{
访问修饰符 class 内部类类名{
}
}
说明:
A.普通成员内部类可以访问内部类的资源(包括私有的资源)
B.外部类访问普通成员内部类的资源必须实例化普通成员内部类的对象 通过对象名进行访问
C.外部类以外的类可以访问普通成员内部类的资源
语法:外部类类名.普通成员内部类类名 对象名 = new 外部类().普通成员内部类()
例子:OutClass.Inner in = new OutClass().new Inner();
4.私有内部类
位置:定义在类中,方法外
语法:
访问修饰符 class 外部类名{
private class 内部类名 {
}
}
说明:
A.私有内部类可以访问外部类的资源(包括私有资源)
B.外部类访问私有内部类必须实例化对象之后,通过对象名来进行访问
C.外部类以外的类不可以访问私有内部类
5.静态内部类
位置:定义在类中,方法外
语法:
访问修饰符 class 外部类类名{
static class 内部类类名{
}
}
说明:
A.静态内部类只能访问外部类的静态资源
B.外部类访问访问静态内部类的资源
a.如果访问的是非静态资源 需要实例化对象后,通过对象名进行访问
b.如果访问的是静态资源 ,可以直接通过类名进行访问
C.外部类以外的类可以访问静态内部类的资源
语法:外部类类名.静态内部类名 对象名 = new 外部类类名.静态内部类类名()
例子:OutClass.Inner in = new OutClass.Inner();
6.局部内部类
位置:定义在方法中
语法:
访问修饰符 返回值类型 方法名称(){
class 局部内部类类名{
}
}
说明:
局部内部类 外部类只能间接访问其资源
7..匿名内部类
概念:没有名称的内部类
前提:实例化接口(实现类)或者是抽象类(子类)
二、jar包管理1.项目打包的原因
打包项目步骤:
2.使用jar包步骤
将jar添加项目依赖
3.删除jar包步骤
然后删除jar包
三、API1.简介
概念:API 应用程序接口编程 主要就是提供查看jdk相关资源的文档
2.作用
A.jdk中提供了一些常用的方法以及类 以及接口的使用
B.使用帮助文档来快速查找jdk提供相关的资源 提供开发的效率
3.使用:
第一种方式 通过完整的包名以及类名来查找
直接通过类名来进行搜索(推荐)
4.使用说明
A.查看类的描述
B.查看类的构造方法
C.查看成员方法以及静态方法
参数列表 返回值类型 方法描述
5.文档注释-注解
@author 作者 、@version 版本 、@since 说明、 @param 参数 、@return 返回值
6.生成帮助文档步骤
四、Object 1.简介1.概念: 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象(包括数组)都实 现这个类的方法 Object 是所有类的直接父类 或者是间接父类
2.构造方法 public Object()
3.作用:
A.用于来实例化对象
B.用于给子类来进行调用
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()方法
package com.qf.test.test01;
public class Sttudent {
private String name;
private int age;
public Sttudent() {
}
public Sttudent(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
//重写toString方法 返回为对象属性
@Override
public String toString() {
return "Sttudent{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
package com.qf.test.test01;
public class Test {
public static void main(String[] args) {
//实例化对象
Sttudent s = new Sttudent("张三",20);
System.out.println(s.toString());
//重写toString方法后直接打印输出对象名 会默认调用自定义对象重写后的toString方法
System.out.println(s);
}
}
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()没有重写之前 比较的对象的地址值是否相同 重写之后 比较的是对象的属性值是否相同
package com.qf.test.test02;
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public boolean equals(Object o) {
//向下转型
Person p = (Person) o;
//判断对象属性值是否相同
if (p.getName().equals(this.getName()) && p.getAge() == this.getAge()){
return true;
}
return false;
}
}
package com.qf.test.test02;
public class Test {
public static void main(String[] args) {
Person p1 = new Person("张三",10);
Person p2 = new Person("张三",10);
// System.out.println(p2.equals(p1));
System.out.println(p1.equals(p2));
}
}
五、String
1.简介:
String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现
字符串是常量,使用final进行修饰 不能改变其地址值,可以改变其对象的内容
String对象是不可变的,所以可以共享
字符串的字符值是存在堆内存中的字符串常量池里, new String() 是存在堆内存里
字符串的底层是使用字节数组来进行存储的
2.字符串的构造方法3+1package com.qf.test.test02;
public class Test02 {
public static void main(String[] args) {
String s = "abc";
System.out.println(s);
byte [] bytes = {65,66,67};
String s1 = new String(bytes);
System.out.println(s1);
String s2 = new String(bytes,0,2);
System.out.println(s2);
char [] chars = {'a','b','c'};
String s3 = new String(chars);
System.out.println(s3);
String s4 = new String(chars,1,2);
System.out.println(s4);
System.out.println("123".concat(s));
System.out.println(s1.concat(s));
}
}
3.字符串常用的方法--判断性
4.案例
需求:键盘录入一个邮箱地址 判断优先是否合法 以com结尾 包含@ 符号 键盘一个图片的名 称判断图片是否合法
分析:
package com.qf.test.test02;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
String s = "abc";
String s1 = "中国";
System.out.println(s.length());
System.out.println(s1.length());
System.out.println("wwW".equalsIgnoreCase("www"));
System.out.println("请输入邮箱");
String email = input.next();
if (email.contains("@") && email.endsWith("com")){
System.out.println("邮箱输入正确");
}else {
System.out.println("邮箱输入错误");
}
System.out.println("请输入图片");
String img = input.next();
if (img.endsWith("jpg")||img.endsWith("png")){
System.out.println("图片格式正确");
}else {
System.out.println("图片格式错误");
}
}
}
5.字符串常用方法--得到性
6.案例
需求:键盘录入一串字符 通过a这个字符出现的次数
分析:
package com.qf.test.test02;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
System.out.println("请输入一组字符串");
String line = input.next();
//定义一个字符数组
char [] arrays = new char[line.length()];
//使用for循环给数组赋值
for (int i=0;i
7.案例
需求:键盘录入一个银行卡的余额 123456789 将字符处理后的结果: 123,456,789
分析:
package com.qf.test.test02;
import java.util.Arrays;
import java.util.Scanner;
public class Test05 {
public static void main(String[] args) {
//实例化Scanner
Scanner input = new Scanner(System.in);
System.out.println("请输入银行卡余额");
String line = input.next();
//定义一个字符串数组接收line
String [] arrays = new String[line.length()];
//使用循序遍历倒着line给数组赋值
for (int i=0;i=0;i--){
if (i!=0 && i%3==0){
str +=arrays[i]+",";
}else {
str +=arrays[i];
}
}
System.out.println(str);
}
}



