学习Java第十一天

一、内部类

1、概念:定义在方法中的类 或者是定义在类中的类

2、分类:

成员内部类:普通成员内部类 私有成员内部类 静态内部类

局部内部类:定义在方法中的内部类

匿名内部类:没有名称的内部类

3、普通成员的内部类

位置:定义在类中 方法外

语法:

访问修饰符 class 外部类名{

访问修饰符 class 内部类名{

}

}

说明:

A.内部类可以访问外部类的资源(包括私有的)

B.外部类访问内部类的资源 必须实例化对象之后 通过对象名来进行访问

C.外部类以外的类可以访问内部类的资源

语法:

外部类.内部类 对象名=new 外部类().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 外部类.内部类()

例子:

6、局部内部类

位置:定义在方法中

语法:

访问修饰符 返回值类型 方法名称(){

class 类名{

}

}

说明:

局部内部类 外部类只能间接的访问局部内部类

7、匿名内部类

概念:没有名称的内部类

前提:实例化接口(实现类) 或者是抽象类(子类)

二、jar包的管理(重点)

2.1项目打包的原因

2.2打包jar步骤

step01

step02

step03

step04

step05

step06

step07

step08打包成功

2.3使用jar包

step01 在当前项目新建文件夹 lib

step02 名称lib

step03将jar放入到lib目录下

step04添加依赖

step05

step06添加依赖成功

2.4删除jar包

2.4.1删除依赖

2.3.2删除jar包

三、API

3.1简介

概念:API 应用程序接口编程 主要就是提供查看jdk相关资源的文档

3.2作用

A.jdk中提供了一些常用的方法以及类 以及接口的使用

B.使用帮助的文档来快速查找jdk提供相关的资源 提供开发效率

3.3使用

3.3.1第一种方法 通过完整的包名以及类名来查找

step01

step02

3.3.2第二种方式 直接通过类名来搜索(推荐)

step01

3.4API使用说明

A.查看类的描述

B.查看类的构造方法

C.查看成员方法以及静态方法

参数列表 返回值类型 方法描述

3.5文档注释-注解

@author 作者

@version 版本

@since 说明

@param 参数

@return 返回值

3.6生成帮助文档

四、Object(重点)

4.1简介

1、概念:

是所有类的直接父类 或者间接父类

2、构造方法:

public object()

3、作用:

A.用于来实例化队形

B.用于给子类来进行调用

4.2toString()方法

1..public String toString() 返回该对象的字符串表示getClass().getName() + '@' + Integer.toHexString(hashCode())

2.返回字符串解释getClass().getName()==> 返回值是完整包名加上类名@==>表示一个连接符号 没有特殊的含义hashCode() 表示是hashcode值Integer.toHexString()==>表示以十六进制形式来表示

3.toString() 返回的是对象的地址值 没有实际的意义 所有需要重写

4.重写的规则: 返回对象的属性值

5.快捷键 alt+insert6.自定义对象中 重写toString() 打印对象的名称 默认会调用toString()方法

step01代码-定义学生类

package com.gkd.test01; public class Student { private String name; private int age; public Student() { } public Student(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 String toString() { // return "Student{" + // "name='" + name + '\'' + // ", age=" + age + // '}'; return name+"\t"+age; } }

step02代码-测试类

package com.gkd.test01; public class Test { public static void main(String[] args) { Student stu= new Student("老王",18); System.out.println(stu.toString()); System.out.println(stu); // System.out.println(stu); // System.out.println(stu.getClass().getName()+"@"+Integer.toHexString(stu.hashCode())); } }

4.3equals()方法

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()没有重写之前 比较的对象的地址值是否相同 重写之后 比较的是对象的属性值是否相同

step01代码-Person类

package com.gkd.test02; import java.util.Objects; public class Person { private int pid; private String name; public Person() { } public Person(int pid, String name) { this.pid = pid; this.name = name; } public int getPid() { return pid; } public void setPid(int pid) { this.pid = pid; } public String getName() { return name; } public void setName(String name) { this.name = name; } //自己重写的equals()方法 // @Override // public boolean equals(Object o) { // //向下转型 // Person p= (Person) o; // if(p.getPid()==this.getPid() &&p.getName().equals(this.getName())){ // return true; // } // return false; // } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return pid == person.pid && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(pid, name); } }

step02代码-测试类

package com.gkd.test02; public class Test { public static void main(String[] args) { Person p1=new Person(1001,"老王"); // Person p2=p1; // Person p2=new Person(1001,"老王"); // System.out.println(p1); // System.out.println(p2); Person p2=new Person(1001,"老王"); System.out.println(p1.equals(p2)); } }

五、String(重点)

5.1简介

1.String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现

2.字符串是常量 使用final来进行修饰 不能改变是地址值 可以改变的是对象的内容

3. String 对象是不可变的,所以可以共享

4.字符串字符值是存在堆内存中字符串常量吃 new String() 是存在 堆内存中

5.字符串的底层是使用字节数组来进行存储

step01代码-测试

package com.gkd.test03; public class Test { public static void main(String[] args) { //字符串字面值 String s1="abc"; System.out.println(s1); //实例化一个空的字符串对象 String s2=new String(); System.out.println(s2); byte [] bytes = new byte[]{97,98,99}; String s3=new String(bytes); System.out.println(s3); byte [] by = new byte[]{97,98,99}; String s4=new String(by,0,2); System.out.println(s4); char [] chars= new char[]{'a','b','c'}; String s5= new String(chars); System.out.println(s5); char [] ch= new char[]{'a','b','c'}; String s6=new String(ch,0,2); System.out.println(s6); } }

5.3字符串常用的方法-判断

方法名称

方法描述

public boolean contains(CharSequence s)

当此字符串包含指定的 char 值序列时,返回 true

public boolean equalsIgnoreCase(String anotherString)

此 String 与另一个 String 比较,不考虑大小写

public boolean startsWith(String prefix)

测试此字符串是否以指定的前缀开始

public boolean endsWith(String suffix)

此字符串是否以指定的后缀结束

public boolean isEmpty()

当且仅当 length() 为 0 时返回 true

public int length()

返回此字符串的长度

public boolean equalsIgnoreCase(StringanotherString)

将此 String 与另一个 String 比较,不考虑大小写

5.4案例

step01需求:键盘录入一个邮箱地址 判断优先是否合法 以com结尾 包含@ 符号 键盘一个图片的名称判断图片是否合法

step02 分析

A.实例化Scanner

B.使用字符串方法endsWith() contains()

C.使用选择结构判断是否正确

step03代码

package com.gkd.test03; import java.util.Scanner; public class Test02 { public static void main(String[] args) { //实例化Scanner Scanner input=new Scanner(System.in); System.out.println("请输入邮箱地址:"); String email=input.next(); if(email.contains("@")&&email.endsWith("com")){ System.out.println("邮箱地址输入成功!"); }else{ System.out.println("邮箱地址输入错误"); } System.out.println("请输入图片的名称:"); String filename=input.next(); if(filename.endsWith("png")||filename.endsWith("jpg")||filename.endsWith("gif")||filename.endsWith("jpeg")){ System.out.println("图片名称输入正确!"); }else{ System.out.println("图片格式输入错误…………………………"); } } }

5.5字符串常用的方法-得到型

方法名称

方法描述

public char charAt(int index)

返回指定索引处的 char 值

public int indexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引(从前往后进行查找)

public int lastIndexOf(String str)

返回指定子字符串在此字符串中第一次出现处的索引(从后往前进行查找)

public String substring(int beginIndex,int endIndex)

截取指定的字符串(包头不包尾)

5.6案例

step01 需求 键盘录入一串字符 通过a这个字符出现的次数

step02 分析

A.将字符串拆分一个字符数组substring()

B.使用循环遍历 与字符a进行对比

C.定义一个变量 统计其次数

step03 代码

package com.gkd.test03; import java.util.Scanner; public class Test04 { 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); } }

5.7案例

step01 需求 键盘录入一个银行卡的余额 123456789 将字符处理后的结果: 123,456,789

step02 分析

A.实例化Scanner

B.将字符串拆分到每一个字符串数组中C.使用循环从后往前遍历(倒着遍历)

i % 3 ==0 i !=0 拼接逗号

其它情况直接拼接 数据

step03 代码

package com.gkd.test03; 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(); String [] arrays=new String[line.length()]; //使用循环放入数组中 for(int i=0;i<arrays.length;i++){ arrays[i]=line.charAt(i)+""; } //定义一个字符串来拼接 String str=""; //使用循环来遍历数组,从后往前遍历,取前面的值 for(int i=arrays.length-1;i>=0;i--){ if(i!=0&&i%3==0){ str+=arrays[arrays.length-1-i]+","; }else{ str+=arrays[arrays.length-1-i]; } } System.out.println(str); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值