首页 > 编程语言 >java_day9_包的划分、形式参数、返回值、修饰符、内部类、匿名内部类

java_day9_包的划分、形式参数、返回值、修饰符、内部类、匿名内部类

时间:2024-10-07 10:43:49浏览次数:10  
标签:java fun1 day9 void 修饰符 class new public

一、包

包的划分好处:
    1、方便管理我们的代码文件
    2、不同包下的文件名可以是一样的

常见的包命名规则:
    1、按照功能划分
        增加
            - 学生增加
            - 老师增加
        删除
            - 学生删除
            - 老师删除
        修改
            - 学生修改
            - 老师修改
        查询
            - 学生查询
            - 老师查询
    2、按照角色划分
        学生
            - 学生增加
            - 学生删除
            - 学生修改
            - 学生查询

        老师
            - 老师增加
            - 老师删除
            - 老师修改
            - 老师查询
若某一维度不会大幅度或经常性修改的话,就可以考虑将该维度定义成一个包

springboot中层划分:
    configs: 存放配置文件
    controller: 主要前端页面与后端交互的入口
    dao: 主要是与数据库操作相关的代码
    entity[pojo]: 实体类层
    service: 业务层

二、形式参数

形式参数
    基本类型: 当基本数据类型作为参数传递的时候,传递是具体的数值
    引用类型:
        数组:当数组作为方法的参数类型的时候,将来需要传递数组的地址值
        具体的类:当你看到一个类作为方法的参数类型的时候,将来调用需要传入该类或该类的子类的对象
        抽象类:当你看到一个抽象类作为方法的参数类型的时候,将来调用需要传入该抽象类具体实现子类的对象
        接口:当你看到一个接口作为方法的参数类型的时候,将来调用需要传入实现了该接口的具体子类对象

具体的类:当你看到一个类作为方法的参数类型的时候,将来调用需要传入该类或该类的子类的对象
代码案例

class Student{
    public void fun1(){
        System.out.println("好好学习,天天向上!");
    }
}

class StudentDemo1{
    //当你看到一个类作为方法的参数类型的时候,将来调用需要传入该类或该类的子类的对象
    public void show1(Student student){
        student.fun1();
    }
}

public class Demo1 {
    public static void main(String[] args) {
        StudentDemo1 studentDemo1 = new StudentDemo1();
        studentDemo1.show1(new Student());
    }
}

当你看到一个抽象类作为方法的参数类型的时候,将来调用需要传入该抽象类具体实现子类的对象

代码案例

abstract class Student2{
    public abstract void fun1();
}

class Student2Zi extends Student2{
    @Override
    public void fun1() {
        System.out.println("江川是世界上手速最快的男人!");
    }
}

class StudentDemo2{
    //当你看到一个抽象类作为方法的参数类型的时候,将来调用需要传入该抽象类具体实现子类的对象
    public void show1(Student2 student2){ //Student2 student2 = new Student2Zi()
        student2.fun1();
    }
}

public class Demo2 {
    public static void main(String[] args) {
        StudentDemo2 studentDemo2 = new StudentDemo2();
        studentDemo2.show1(new Student2Zi());
    }
}

当你看到一个接口作为方法的参数类型的时候,将来调用需要传入实现了该接口的具体子类对象

代码案例

interface Inter1{
    void fun1();
}

class Student3 implements Inter1{
    @Override
    public void fun1() {
        System.out.println("钱志强是世界上最有钱的男人!");
    }
}

class StudentDemo3{
    //当你看到一个接口作为方法的参数类型的时候,将来调用需要传入实现了该接口的具体子类对象
    public void show1(Inter1 inter1){ //Inter1 inter1 = new Student3()
        inter1.fun1();
    }
}

public class Demo3 {
    public static void main(String[] args) {
        StudentDemo3 studentDemo3 = new StudentDemo3();
        studentDemo3.show1(new Student3());
    }
}

三、返回值

返回值
    基本类型: 当基本数据类型作为方法的返回值类型的时候,方法中return具体类型的数值即可
    引用类型:
        数组:当数组作为方法的返回值类型的时候,将来需要在方法中return该一个数组的地址值
        具体的类:当类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的对象
        抽象类:当抽象类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的具体子类对象
        接口:当接口作为方法的返回值类型的时候,将来需要在方法中return该一个实现了该接口的具体子类对象

当类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的对象
代码案例

class Student1{
    public void fun1(){
        System.out.println("李刚觉得自己是亿万富翁...");
    }
}

class StudentDemo1{
    //当类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的对象
    public Student1 show1(){
        return new Student1();
    }
}


public class Demo1 {
    public static void main(String[] args) {
        StudentDemo1 studentDemo1 = new StudentDemo1();
        Student1 s1 = studentDemo1.show1(); // new Student1()
        s1.fun1();
    }
}

当抽象类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的具体子类对象
代码案例

abstract class Student2{
    public abstract void fun1();
}

class Student2Zi extends Student2{
    @Override
    public void fun1() {
        System.out.println("好好学习,天天向上!");
    }
}

class StudentDemo2{
    //当抽象类作为方法的返回值类型的时候,将来需要在方法中return该一个该类的具体子类对象
    public Student2 show1(){
        return new Student2Zi();
    }
}

public class Demo2 {
    public static void main(String[] args) {
        StudentDemo2 studentDemo2 = new StudentDemo2();
        Student2 s1 = studentDemo2.show1(); //Student2 s1 = new Student2Zi()
        s1.fun1();
    }
}

当接口作为方法的返回值类型的时候,将来需要在方法中return该一个实现了该接口的具体子类对象

代码案例

interface Inter1{
    void fun1();
}

class Inter1Impl implements Inter1{
    @Override
    public void fun1() {
        System.out.println("好好学习,天天向上!");
    }
}

class Student3{
    //当接口作为方法的返回值类型的时候,将来需要在方法中return该一个实现了该接口的具体子类对象
    public Inter1 show1(){
        return new Inter1Impl();
    }
}


public class Demo3 {
    public static void main(String[] args) {
//        Student3 student3 = new Student3();
//        Inter1 i = student3.show1(); //Inter1 i = new Inter1Impl()
//        i.fun1();
//        Student3 s = new Student3();
//        Inter1 i = new Student3().show1(); //Inter1 i = new Inter1Impl()

        //当一个方法结果是一个对象的时候,可以继续.调用返回对象中的其它方法
        //像这种对象调用方法继续调用的编程方式,称之为叫做链式调用【链式编程】
        new Student3()
                .show1()
                .fun1();
    }
}

四、修饰符

权限修饰符:
                     public      protected       默认的     private
同一类中                √           √               √           √
同一包子类,其他类        √            √              √
不同包子类              √            √
不同包其他类            √


目前为止学过的修饰符:
    权限修饰符:public,protected,默认的,private
    静态修饰符:static
    抽象修饰符:abstract
    最终修饰符:final

类:
    权限修饰符:public,默认的
    抽象修饰符:abstract
    最终修饰符:final
成员变量:
    权限修饰符:public,protected,默认的,private
    静态修饰符:static
    最终修饰符:final
构造方法:
    权限修饰符:public,protected,默认的,private
成员方法:
    权限修饰符:public,protected,默认的,private
    静态修饰符:static
    最终修饰符:final
    抽象修饰符:abstract

常见的修饰符组合:
    1、public static final
    2、public abstract

五、内部类

内部类:在一个类中定义一个类
    根据定义的位置不同,分为两种内部类
    成员内部类:将类定义在类中成员的位置【类中方法外】上
        常见修饰成员内部类的修饰词:
            private
            static
    局部内部类:将一个类定义在一个方法的内部,只能在方法的内部使用

成员内部类

//class Outer{
//    //成员方法
//    int a = 10;
//    //成员方法
//    public void show1(){
//        System.out.println(this.a);
//    }
//
//    //成员内部类
//    class Inner{
//        int a = 20;
//        public void fun1(){
//            int a = 30;
//            System.out.println(a); // 30
//            System.out.println(this.a); // 20
//            System.out.println(Outer.this.a); // 10
//        }
//    }
//}

class Outer{
    //成员方法
    int a = 10;
    //成员方法
    public void show1(){
        System.out.println(this.a);
    }

    //成员内部类
//    private class Inner{
//        int a = 20;
//        public void fun1(){
//            int a = 30;
//            System.out.println(a); // 30
//            System.out.println(this.a); // 20
//            System.out.println(Outer.this.a); // 10
//        }
//    }

    static class Inner{
        int a = 20;
        public void fun1(){
            int a = 30;
            System.out.println(a); // 30
            System.out.println(this.a); // 20
//            System.out.println(Outer.this.a); // 10
        }
    }

//    public void show2(){
//        Inner inner = new Inner();
//        inner.fun1();
//    }


}

public class InnerClassDemo1 {
    public static void main(String[] args) {
        //创建成员内部类对象
        //外部类名.内部类名 对象名 = new 外部类名().new 内部类名();
//        Outer.Inner inner = new Outer().new Inner();
//        inner.fun1();

        //若成员内部类使用static修饰的话,可以直接使用外部类名获取内部类的构造方法进行创建
        Outer.Inner inner = new Outer.Inner();

    }
}

局部内部类

class Outer2{

    public void fun1(){
        //局部变量
        int a = 10;
    }

    public void show1(){
        int b = 11; // 若是被局部内部类使用的话,JDK1.8之后JVM默认会加上final
        //局部内部类
        class Inner{
            public void function(){
//                b = 22;
                System.out.println("好好学习,天天向上!");
//                System.out.println(b);
            }
        }
        b = 22;
        Inner inner = new Inner();
        inner.function();
    }
}

public class InnerClassDemo2 {
    public static void main(String[] args) {
        Outer2 outer2 = new Outer2();
        outer2.show1();
    }
}

六、匿名内部类

匿名内部类:
    new 接口名/抽象类名(){
        //重写接口或者抽象类中的方法
    }

就意味着JVM在运行过程中做了几件事:
    1、JVM内部自己创建一个类
    2、这个类实现一个接口或者继承了一个抽象类
    3、将这个类的对象创建出来
interface Inter1{
    void fun1();
}

//class Inter1Impl1 implements Inter1{
//    @Override
//    public void fun1() {
//        System.out.println("李刚今天下午没有睡觉...");
//    }
//}
//
//class Inter1Impl2 implements Inter1{
//    @Override
//    public void fun1() {
//        System.out.println("江川今天下午睡觉了...");
//    }
//}

class Demo1{
    //当你看到一个接口作为方法参数类型的时候,将来调用时需要传入实现该接口的具体类对象
    public void show1(Inter1 inter1){ //Inter1 inter1 = new Inter1Impl1()
        inter1.fun1();
    }
}

public class NiMingClassDemo1 {
    public static void main(String[] args) {
        Demo1 demo1 = new Demo1();
//        demo1.show1(new Inter1Impl1());
//
//        demo1.show1(new Inter1Impl2());

        demo1.show1(new Inter1() {
            @Override
            public void fun1() {
                System.out.println("李刚今天下午没有睡觉...");
            }
        });

        demo1.show1(new Inter1() {
            @Override
            public void fun1() {
                System.out.println("江川今天下午睡觉了...");
            }
        });

标签:java,fun1,day9,void,修饰符,class,new,public
From: https://www.cnblogs.com/w-ll/p/18449799

相关文章

  • 基于java+springboot的医院预约挂号系统小程序(源码+lw+部署文档+讲解等)
    课题简介医院预约挂号系统基于Java和SpringBoot开发,是改善医疗服务流程、提高患者就医体验的重要工具。该系统利用Java的稳定性和强大性能,以及SpringBoot的便捷开发框架,确保系统可靠运行和易于维护。它包含了患者信息管理、医生信息管理、科室信息管理、预约管......
  • 基于java+springboot的医学电子技术线上翻转课堂系统(源码+lw+部署文档+讲解等)
    课题简介医学电子技术线上翻转课堂系统基于Java和SpringBoot开发,是为医学教育领域量身打造的创新教学平台。该系统借助Java的稳定性和强大性能,以及SpringBoot的高效开发特性,确保系统能够稳定运行且易于维护和扩展。它涵盖了丰富的功能模块,包括课程资源管理、学......
  • 基于java+springboot的医疗设备管理系统(源码+lw+部署文档+讲解等)
    课题简介医疗设备管理系统基于Java和SpringBoot开发,是专为医疗机构设计的全面高效的设备管理解决方案。该系统利用Java的稳定性和强大性能,以及SpringBoot的便捷开发框架,确保系统可靠运行和易于维护。它涵盖了设备信息管理、采购管理、库存管理、维修管理、报废......
  • java_day8_多态、抽象类、接口
    一、多态多态的好处:1、提高了程序的维护性(由继承保证)2、提高了程序的扩展性(由多态保证)代码案例(多态的拓展性)classAnimal{publicvoideat(){System.out.println("吃");}publicvoidsleep(){System.out.println("睡");}}clas......
  • java之使用CompletableFuture入门2
    Java17- 序章本文介绍用过的allOf、anyOf函数的用法。 allOf 函数原型两点:1、没有返回值。2、参数cfs中任何一个都不能是null。 anyOf函数原型两点:1、有返回值,为Object。2、参数cfs中任何一个都不能是null。 allOf测试意图:多个任务正常执......
  • Day10-JavaDoc
    Day10-JavaDocJavaDoc介绍JavaDoc:javadoc命令是用来生成自己API文档的。javadoc是一个工具,它可以读取源代码中的文档注释,并将其转换为格式规范的API文档。javadoc通过解析文档注释中的特定标记,如@author、@version、@since、@param、@return、@throws等,来提取关键信......
  • java中,8个字节的long为什么可以自动转换为4个字节的float
    在Java中,long类型是8个字节(64位)的整数,而float类型是4个字节(32位)的单精度浮点数。虽然long有更大的字节数,但它可以自动转换为float。这是因为两者的表示形式和数据范围不同。1.表示方式的差异long类型:long是64位有符号整数,表示的数值范围是-2^63到2^......
  • 基于java+springboot的酒店预定网站、酒店客房管理系统
    该系统是基于Java的酒店客房预订系统设计与实现。是给师弟开发的毕业设计。现将源代码开放出来,感兴趣的同学可以下载。演示地址前台地址:http://hotel.gitapp.cn后台地址:http://hotel.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https://git......
  • 基于java+springboot的租房网站、房屋出租管理系统
    该系统是基于java+springboot+vue开发的租房管理系统。是给师弟开发的课程作业。学习过程中,遇到问题可以留言咨询。演示地址前台地址:http://zf.gitapp.cn后台地址:http://zf.gitapp.cn/admin后台管理帐号:用户名:admin123密码:admin123源码地址https://github.com/g......
  • Java vs JavaScript:类型系统的艺术 - 从 Object 到 any,从静态到动态
    关键词:Java,JavaScript,TypeScript,类型系统,静态类型,动态类型,软件开发,编程语言比较摘要:本文深入探讨Java、JavaScript和TypeScript三种语言的类型系统特点,从建筑学角度比喻它们的设计理念,分析各自在处理灵活数据结构时的优劣,并思考类型系统对软件开发的深......