Java笔记3(内部类,API)

内部类

1、内部类的概述

在这里插入图片描述

2、内部类之一:静态内部类(了解)

1、什么是静态内部类?
在这里插入图片描述
2、静态内部类的访问拓展
在这里插入图片描述

package b1_内部类_静态内部类;

public class Outer {
    public static int a = 100;
    private String hobby;
    //静态成员内部类

    public static class Inner {
        private String name;
        private int age;

        public static String schoolName;

        public Inner() {
        }

        public Inner(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public void show(){
            System.out.println("名称:" + name);
            System.out.println(a);
            //System.out.println(hobby);无法访问,报错
        }
        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;
        }


    }
}


package b1_内部类_静态内部类;

public class Test {
    public static void main(String[] args){
        Outer.Inner in = new Outer.Inner();
        in.setName("离散");
        in.show();
    }
}

3、总结
在这里插入图片描述

3、内部类之二:成员内部类(了解)

1、什么是成员内部类?
在这里插入图片描述
2、成员内部类的访问拓展
在这里插入图片描述

package b2_内部类_成员内部类;

public class Outer {
    public static int num = 111;
    private String hobby ;
    public Outer(){

    };
    public Outer(String hobby) {
        this.hobby = hobby;
    }



    //成员内部类,不加static修饰
    public class Inner {
        private String name;
        private int age;
//        public static void test(){
//
//        }//JDK16开始支持静态方法

        public void show() {
            System.out.println(name + "很厉害!!" + age + "岁不错");
            System.out.println("数量" + num);
            System.out.println("爱好" + hobby);

        }

        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;
        }


        // public static int a;//JDK16开始支持静态成员
    }
}

package b2_内部类_成员内部类;

public class Test {
    public static void main(String[] args) {
        Outer.Inner in = new Outer().new Inner();
        in.setName("萧炎");
        in.setAge(55);
        in.show();
        //Outer.Inner.test();//访问静态方法
        System.out.println("----------------");
        Outer.Inner in1 = new Outer("爱听课!").new Inner();
        in1.setName("熏儿");
        in1.setAge(18);
        in1.show();
    }
}

3、总结
在这里插入图片描述
4、面试题
在这里插入图片描述
代码

package b2_内部类_成员内部类;
//面试题
public class Test2 {
    public static void main(String[] args) {
        People.Heart H = new People().new Heart();
        H.show();
    }

}
class People{
    private int heartbeat = 150;
    public class Heart{
        private int heartbeat = 110;
        public void show(){
            int heartbeat = 70;
            System.out.println(heartbeat);
            System.out.println(this.heartbeat);
            System.out.println(People.this.heartbeat);
        }
    }
}

4、内部类之三:局部内部类(了解)

在这里插入图片描述

package b3_内部类_局部内部类;

import 抽象类案例.Card;

//了解局部内部类
public class Test {
    static{
        class Dog{

        }
        abstract class Animal{

        }

    }
    public static void main(String[] args) {
        class Cat {
            private String name;

            public String getName() {
                return name;

            }

            public void setName(String name) {
                this.name = name;
            }

        }
        Cat c = new Cat();
        c.setName("阿瑟ui");
        System.out.println(c.getName());

    }

}

5、内部类之四:匿名内部类(重点)

在这里插入图片描述

package b4_内部类_匿名内部类;

public class Test {
    public static void main(String[] args) {

        Animal a = new Animal() {//相当于new了一个子类
            @Override
            public void run() {
                System.out.println("老虎跑的快!");
            }
        };
        a.run();
    }
}

//class Tiger extends Animal {
//    @Override
//    public void run() {
//        System.out.println("老虎跑的快!");
//
//    }


 abstract class Animal {
    public abstract void run();

}

1、总结
在这里插入图片描述
标题文本样式列表图片链接目录代码片表格注脚注释自定义列表LaTeX 数学公式插入甘特图插入UML图插入Mermaid流程图插入Flowchart流程图插入类图快捷键
标题复制

5.1、匿名内部类常见的使用形式

package b4_内部类_匿名内部类;

/*掌握匿名内部类的使用形式*/
public class Test2 {
    public static void main(String[] args) {
        //匿名内部类1
        Swimming s = new Swimming() {
            @Override
            public void swim() {
                System.out.println("学生的自由泳挺快!~~~");
            }
        };
        go(s);
        System.out.println("----------------------");
        //匿名内部类2
        Swimming s2 = new Swimming() {
            @Override
            public void swim() {
                System.out.println("老师的蛙泳很快~~");
            }
        };
        go(s2);
        System.out.println("--------------------------");
        //更简洁的匿名内部类3
        go(new Swimming() {
            @Override
            public void swim() {
                System.out.println("运动员花式游泳!!!");
            }
        });

    }


    public static void go(Swimming s) {
        System.out.println("开始!!!");
        s.swim();
        System.out.println("结束。。。。");
    }
}


   interface Swimming {
    void swim();
}

5.2、匿名内部类在开发中的使用场景演示

在这里插入图片描述

package b4_内部类_匿名内部类;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/*
* 目标:通过GUI编程 ,理解匿名内部类的真实使用场景
* */
public class Test3 {
    public static void main(String[] args) {
        //1.创建窗口
        JFrame win = new JFrame("登录界面");
        JPanel panel = new JPanel();
        win.add(panel);

        //2.创建一个按钮对象
        JButton btn = new JButton("登录");

        //注意:讲解匿名内部类的使用
//        btn.addActionListener(new ActionListener() {
//            @Override
//            public void actionPerformed(ActionEvent e) {
//                JOptionPane.showMessageDialog(win,"点我,你就是爱我!");
//            }
//        });
        //可以简化成
        btn.addActionListener(e-> JOptionPane.showMessageDialog(win,"~~别说话吻我!"));

        //3.把按钮对象添加到桌布上展示
        win.add(btn);

        //4.展示窗口
        win.setSize(400,300);
        win.setLocationRelativeTo(null);
        win.setVisible(true);
    }
}

API

1、什么是API
在这里插入图片描述

1、常用API—Object的toString方法

在这里插入图片描述

package c1_常用API_Object;


public class Student {//extends Object(默认继承)
    private String name;
    private char sex;
    private int age;

    public Student() {

    }

    public Student(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{name = " + name + ",sex=" + sex + ",age=" + age + "}";
    }

}

package c1_常用API_Object;

public class Test {
    public static void main(String[] args) {
        Student s = new Student("周杰伦", '男', 16);
        //String rs = s.toString();
        //System.out.println(rs);
        //System.out.println(s.toString());
        //直接输出对象变量,默认可以省略toString调用不写的
        System.out.println(s);
    }

}

1、总结
在这里插入图片描述

2、常用API—Object的equals方法

1、总结
在这里插入图片描述

在这里插入图片描述

package c1_常用API_Object;


import java.util.Objects;

public class Student {//extends Object(默认继承)
    private String name;
    private char sex;
    private int age;

    public Student() {

    }

    public Student(String name, char sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //官方重写的equals代码

    @Override
    public boolean equals(Object o) {
        //1.判断是否是同一个对象比较,如果是返回true。
        if (this == o) return true;
        //2.如果o是null返回false,如果o不是学生类型返回false(getClass是取类型)
        if (o == null || this.getClass() != o.getClass()) return false;
        //3.说明o是学生类型且不是null
        Student student = (Student) o;
        return sex == student.sex &&
                age == student.age &&
                Objects.equals(name, student.name);
    }



    /*
     * 自己重写equals,自己定制相等规则,
     * 两个对象的内容一样就认为是相等的
     * s1.equals(s2)
     * 比较者:s1  == this(s1调用的方法,this指向s1)
     * 被比较者: s2 ==> o
     * */

    /*@Override
    public boolean equals(Object o) {
        //1.判断o是不是学生类型
        if (o instanceof Student) {
            Student s2 = (Student) o;
            //2.判断两个对象内容是否一样
//            if (this.name.equals(s2.name) && this.age == s2.age
               && this.sex == s2.sex) {
//                return true;
//            } else {
//                return false;
//            }

            //直接用一行代码
            return this.name.equals(s2.name) && this.age ==
                    s2.age && this.sex == s2.sex;
        } else {
            //学生只能和学生比较,否则结果一定是false
            return false;

        }


    }*/


    @Override
    public String toString()
    {
        return "Student{name = " + name + ",sex=" + sex + ",age=" + age + "}";
    }

}

package c1_常用API_Object;
/*
* 目标: toString方法的使用
* */
public class Test1 {
    public static void main(String[] args) {
        Student s = new Student("周杰伦", '男', 16);
        //String rs = s.toString();
        //System.out.println(rs);
        //System.out.println(s.toString());
        //直接输出对象变量,默认可以省略toString调用不写的
        System.out.println(s);
    }

}

package c1_常用API_Object;
/*
* 目标: 掌握Object类中的equals方法的使用
*
* */
public class Test2 {
    public static void main(String[] args) {
        Student s1 = new Student("jojo",'男',88);
        Student s2 = new Student("jojo",'男',88);
        //equals 默认比较两个对象的地址是否相同
        System.out.println(s1.equals(s2));
        System.out.println(s1 == s2);
    }
}

3、常用API—Objects的equals方法

1、Objects的概述
在这里插入图片描述
2、Objects的常见方法
在这里插入图片描述

package c2_常用API_Objects;

import java.util.Objects;

/*
* 目标: 掌握Objects类的常用方法:equals
* */
public class Test {
    public static void main(String[] args) {
        String s1 = null;
        String s2 = new String("iiii");
       // System.out.println(s1.equals(s2));//留下了隐患,可能出现空指针异常
        System.out.println(Objects.equals(s1,s2));//更安全,结果也是对的

        //源码ctrl+鼠标左键
        /*public static boolean equals(Object a, Object b) {
        return (a == b) || (a != null && a.equals(b));
    }*/

    }
}

3、总结
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值