失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 折纸的不归路(12)

折纸的不归路(12)

时间:2022-10-14 20:22:14

相关推荐

折纸的不归路(12)

一.包装类

装饰者模式

String —> 不可变的字符串

“a”+“b”+“c” --> “ab”+“c” --> “abc”

对基本数据类型包装成为引用数据类型

为什么要包装?

Java中编程单元是类 —> 引用类型

如何用引用类型MyInt,包装一下基本类型。

基本数据存在的意义

简单的四则运算

存储方便

static 补充使用

在import里静态导入

如 :import static java.lang.Math.*;

之前调用静态变量PI:Math.PI

静态导入之后调用方法改变:直接使用PI

二.equals 和 == 号

==等号左右两侧为引用类型,对比的是地址值

equals方法属于Object,每个类都有,提供重写

默认的equlas方法的判断逻辑和==是一样的,我们可以根据自己的需求去重写equals判断逻辑

1、判断地址是否相同

2、判断类型是否相同

3、提出自己的判断规则

equals测试

package com.briup.day10;import com.briup.day06.Student;import com.briup.day08.Address;/*** 测试等号和equals* @author mastercgx**/public class EqualsTest {public static void main(String[] args) {String s1 = "hello";String s2 = "hello";String s3 = new String("hello");String s4 = new String("hello");System.out.println(s3.equals(s4));Address add1 = new Address("中国", "江苏", "苏州");Address add2 = new Address("中国", "江苏", "苏州");Student stu1 = new Student("tom",20,"男",add1);Student stu2 = new Student("tom",20,"男",add2);System.out.println(stu1 == stu2); //falseSystem.out.println(stu1.equals(stu2));//falseSystem.out.println(stu1);System.out.println(stu2);}}

toString()方法

当我们输出对象的时候,会默认输出toString方法的返回值,Object的toString()方法提供重写

默认的toString()方法会输出该对象的全限类名@十六位的哈希码的地址值

三.内部类

public class Computer{int year;class Mouse{int year;}class Keyboard{int count;}}

定义

在类的内部进行类的声明和使用

讨论的重点

外部类和内部类之间成员的互相调用

内部类的实例化方式

了解内部类的实际的应用场景

分类

静态内部类

1、静态内部类中可以直接访问外部类的静态成员,如果要访问外部类的实例成员,需要通过外部类的实例去访问

2、静态内部类的实例化方式

A.B a = new A.B();

3、静态内部类中可以定义静态成员,也可以定义实例成员

4、可以通过类名直接调用静态内部类中的静态成员

实例内部类

1、实例内部类的实例化方式要依靠外部类的实例来创建

A.C c = new A().new C();

相当于

A a = new A(); A.C c = a.new C();

2、实例内部类中不能够定义静态成员

3、如果实例内部类C中和外部类A中有同名的参数,则

就近原则 this.ai 代表C的

A.this.ai 代表A的

4、实例内部类中可以访问到外部类的所有成员

5、每一个实例内部类的实例都只对应一个外部类的实例,一个外部类的实例可以对应多个内部类的实例

局部内部类

1、局部内部类不能够使用权限修饰符(public、private、protected)以及static

2、局部内部类中不可以定义静态成员

3、局部内部类中可以访问到外部类的所有成员,可以访问到外部类的final修饰的变量

4、局部内部类的作用范围在当前方法内,如果要使用必须声明在类定义之下,外部类无法创建局部内部类的实例

匿名内部类

可能是在实际应用中接触最多的一个内部类

1、匿名内部类的使用方式,new 接口/抽象类(){ 实现其中未实现的方法 }

2、匿名内部类是唯一一个没有构造器的类

3、匿名内部类不可以拥有静态成员

4、可以访问外部类的所有成员

5、一般用作放在方法的参数中,只使用一次的那种

内部类相关测试

package com.briup.day10;import parator;import java.util.TreeSet;import com.briup.day06.Student;import com.briup.day09.Fish;import com.briup.day09.Food;public class InnerClass {public static void main(String[] args) {A a = new A();a.readB();//B是静态内部类A.B b = new A.B();//静态内部类的实例方式b.showB();//通过完整的类名来访问内部类中的静态成员A.B.showSb();//C是实例内部类//A.C c= new A().new C();A.C c= a.new C();c.showC();A.D d = a.new D();//E和F是局部内部类a.AshowE();}}class A{//外部类/外围类int ai = 10;static int asi = 20;final static String sa = "a final String";public void readB() {B b = new B(); //外部类使用内部类直接new即可b.showB();B.showSb();//外部类可以直接使用内部类的类名调用静态的成员}public void readC() {C c = new C();c.showC();//外部类只能通过实例内部类的对象去访问实例内部类的成员}static class B{//静态内部类int bi;static int bsi;//构造器public B() {System.out.println("静态内部类B的构造器");}public void showB() {System.out.println(new A().ai);System.out.println(asi);}public static void showSb() {System.out.println(new A().ai);System.out.println(asi);}}class C{//实例内部类int ci = 20;int ai = 30;//static csi = 30;public void showC() {System.out.println("====showc=====");System.out.println("----"+A.this.ai);System.out.println(asi);System.out.println(sa);}//public static void showSc() {////}}class D implements Food {@Overridepublic void whatDo() {// TODO Auto-generated method stub}@Overridepublic void eat() {// TODO Auto-generated method stub}}public void AshowE() {final String s = "hello";//执行一下食物的eat方法class E {//局部内部类int ei;//static int esi;public void showE() {class F{public void showF() {System.out.println("F 输出");}}F f = new F();f.showF();System.out.println("=======");System.out.println(ei);System.out.println(s);System.out.println(ai);System.out.println(asi);System.out.println(sa);readC();}//public static void showSE(){////}}E e = new E();e.ei = 20;e.showE();}//匿名内部类的使用//自使用//new 接口的时候,并不是产生了一个接口的实例//而是产生了一个匿名的该接口的实现类的实例Food fish = new Fish();Food food = new Food() {@Overridepublic void whatDo() {// TODO Auto-generated method stub}@Overridepublic void eat() {// TODO Auto-generated method stub}};//经常使用//集合 TreeSet ,具有排序功能,按什么排序?//实例内部类的例子class MC implements Comparator<Integer>{@Overridepublic int compare(Integer o1, Integer o2) {return o1-o2;}}MC mc = new MC();TreeSet<Integer> ts = new TreeSet<Integer>(mc);//匿名内部类TreeSet<Integer> ts1 = new TreeSet<Integer>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o2-o1;}});TreeSet<Student> ts2 = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {//按名字来排序return o1.getName().compareTo(o2.getName());}});Shape shape = new Shape() {int si;//static int ssi;public void showShape() {}//public static void showSShape() {////}@Overridepublic String getType() {// TODO Auto-generated method stubreturn null;}@Overridepublic double getPerimeter() {// TODO Auto-generated method stubreturn 0;}};}

四.心得

今天学习的内容也比较好理解,内部类给我的直观感觉就是不断套娃禁止套娃所以多余的时间还是用来看之前的内容了,现在对多态相关也有了更深层次的认识,也深刻理解了"编译看左边,运行看右边"这句话.明天继续加油!

如果觉得《折纸的不归路(12)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。