返回顶部
首页 > 资讯 > 后端开发 > Python >JavaSE学习之内部类及常用API
  • 211
分享到

JavaSE学习之内部类及常用API

2024-04-02 19:04:59 211人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1.内部类1.1内部类概述1.2成员内部类1.3局部内部类1.4匿名内部类1.5匿名内部类在开发中的使用2.常用api2.1Math2.2System2.3Object2.4Ar

1.内部类

1.1 内部类概述

内部类:就是在一个类中定义一个类。例如:在一个类A内部定义一个类B,类B就被称为内部类

格式:public class 类名{修饰符 class 类名{}}

范例


public class Outer{
   public class Inter{//内部类
   }
}

内部类的访问特点

1. 内部类可以直接访问外部类成员,包括私有

2. 外部类如果想访问内部类就要创建对象

举例


public class Outer {//创建外部类
    private  int age=9;
    public class Inter{//创建内部类
        //内部类创建方法
        public void show(){
            //内部类可直接访问外部类
            System.out.println(age);
        }
    }
    public void method(){
        //这里是外部类的调用,那么不能直接像下面一样调用show()方法,
        //不然就会报错,不能直接访问
        //show();不能这样
        //应改为创建内部类对象,通过对象进行访问
         Inter i=new Inter();
         i.show();
    }
}

1.2 成员内部类

按照内部类在类中的位置不同,可以分为两种形式

  • 在类的成员位置:成员内部类
  • 在类的局部位置:局部内部类

//类
public class Outer {//创建外部类
    private  int age=9;
    public class Inter{//创建内部类
        //内部类创建方法
        public void show(){
            //内部类可直接访问外部类
            System.out.println(age);
        }
    }
  }

//测试

在这里插入图片描述

那么怎么不让它报错呢?如何创建呢

  • 外部类.内部类 对象名=new 外部类.new内部类();
  • Outer.Inter oi=new Outer().new Inter();

//测试类
public class Main {
    public static void main(String[] args) {
     Outer.Inter oi=new Outer().new Inter();//构造内部类对象
     oi.show();
    }
}

但是,一般情况下,为了安全性不会将内部类定义为公有,会设置为私有,上面的Outer.Inter oi=new Outer().new Inter();就不能这样构造内部类的对象了,否则就会报错,那么该如何创建呢?

很简单,因为外部类可以通过创建内部类的对象进行访问内部类,那么就可以在测试类中写外部类的方法,从而进行间接访问。


//类
public class Outer {//创建外部类
    private  int age=9;
   private class Inter{//创建内部私有类
        //内部类创建方法
        public void show(){
            //内部类可直接访问外部类
            System.out.println(age);
        }
    }
    public void method(){
    Inter i=new Inter();//创建内部类对象间接访问
    i.show();  //调用方法             
    }
  }

这样就可以输出内部类的值了

运行结果

9

1.3 局部内部类

局部内部类是在方法中定义的类,所以外界是无法访问的,需要在方法内部创建对象并使用该类可以直接访问外部类的成员,也可以访问方法内部的局部变量


//类
public class Outer {//创建外部类
    private int age = 9;

    public void method() { //在方法中局部创建内部类

        class Inter {//创建内部类
            private int age2 = 2;//局部变量也可以

            public void show() {
                System.out.println(age);
                System.out.println(age2);
            }
        }
        Inter i = new Inter();//创建内部类对象间接访问
        i.show();  //调用方法
    }
}

public class Main {
    public static void main(String[] args) {
     Outer o=new Outer();
     o.method();//间接调用方法
    }
}

1.4 匿名内部类

  • 前提:存在一个类或者接口,这里的类可以是具体类,也可以是抽象类
  • 格式:new 类名或者接口名(){重写方法}
  • 范例:new Inter(){public void show(){}};
  • 解释: new Inter()是匿对象,继承了这个类,或实现了这个接口
  • 本质: 是一个继承了该类或者实现了该接口的子类匿名对象,

匿名内部类是局部内部类的一种形式,写的时候也应该在方法中


//前提:一个类或者接口
public interface Inter {//写接口
    void show();//写抽象方法
}

那么既然是对象,就可以通过对象调用方法


public class Outer {//创建外部类

    public void method() {
     new Inter() {//这个是对象
         @Override//重写方法
         public void show() {
             System.out.println("匿名内部类");
         }
     }.show();//通过对象调用方法
    }
}

这块是重点:new Inter() {//这个是对象 @Override//重写方法 public void show() { System.out.println("匿名内部类"); } }.show();//通过对象调用方法,这里采用了对象调用方法,上面整体是对象,然后.show()调用方法


//测试类
public class Main {
    public static void main(String[] args) {
     Outer o=new Outer();
     o.method();//调用方法
    }
}

接下来,有个疑问,你会说,如果我想多次调用方法,是不是要写很多次这个方法呢?答案是否定的,既然是内部类,那么就可以通过多态形式进行,即:Inter i=new Inter(){};然后通过i来调用show()方法


public class Outer {//创建外部类

    public void method() {
    Inter i =new Inter() {//多态形式,左面接口名,右面对象
         @Override//重写方法
         public void show() {
             System.out.println("匿名内部类");
         }
     };
     i.show();//遵循编译看左面,执行看右面
     i.show();
    }
}

1.5 匿名内部类在开发中的使用

学完了匿名内部类之后,那么它在开发中有哪些运用呢?

在开发时,如果要实现一个接口方法时,不需要再创建类,比如之前写的猫跳高了,如果想写狗跳高了还要重建一个类,这样显得太过于繁琐,而且占用空间,既然内部类本质是类的对象,那么直接使用就会大量降低代码的低效性


//接口
public interface Jummping {
    void jump();//抽象类
}

//操作类
public class JumppinGoperator {
    public void useOperator(Jummping j){//接口名作为形参,new Jumpping(){}
        j.jump();//内部类对象调用方法
    }


public class Jumpping {
    public static void main(String[] args) {
        JumppingOperator j = new JumppingOperator();//创建操作类对象
        j.useOperator(new Jummping() {
            @Override
            public void jump() {
                System.out.println("猫跳高了");
            }
        });//用匿名内部类实现
        //重复使用,就不用再创建Cat类或者Dog类了
        j.useOperator(new Jummping() {
            @Override
            public void jump() {
                System.out.println("狗跳墙了");
            }
        });
    }
}

2.常用API

2.1Math

public final class Math extends Object被final修饰,是最终类,详细内容见APi手册

在这里插入图片描述

通过帮助文档知道,它没有构造方法,那么如何使用类中的成员呢?

这时候就需要看成员是否都是静态的,如果是,通过类名就可以直接调用

常用方法

在这里插入图片描述


public class Main {
        public static void main(String[] args) {
                //绝对值
                System.out.println(Math.abs(-88));
                System.out.println(Math.abs(88));
                System.out.println("----------");
                //返回大于或者等于参数的double值为一个整数,(向上取整)
                System.out.println(Math.ceil(1.12));
                System.out.println("----------");
                //返回0小于或者等于参数的double值为一个整数,(向下取整)
                System.out.println(Math.floor(1.21));
                System.out.println("----------");
                //返回最大值
                System.out.println(Math.max(1,2));
                System.out.println("----------");
                //返回最小值
                System.out.println(Math.min(2,6));
                System.out.println("----------");
                //返回a的b次幂
                System.out.println(Math.pow(2,2));
                System.out.println("----------");
                //返回四舍五入的整数值
                System.out.println(Math.round(1.51));
                System.out.println("---------");
                //返回随机值,[0-1.0)
                System.out.println(Math.random());
                //返回1-100整数随机值
                System.out.println((int)(Math.random()*100)+1);


        }
} 

运行结果

88

88

----------

2.0

----------

1.0

----------

2

----------

2

----------

4.0

----------

2

---------

0.6041376042702374

78

2.2 System

在这里插入图片描述

不能实例化,不能创建对象,静态修饰

常用方法

在这里插入图片描述


public class Main {
        public static void main(String[] args) {
                System.out.println("start");
                System.exit(0);
                //java虚拟机已经停止运行,无法在进行执下面的语句
                System.out.println("end");
        }
}
 

运行结果

start


public class Main {
        public static void main(String[] args) {
                System.out.println(System.currentTimeMillis()*1.0/1000/60/60/24/365+"年");
                System.out.println("开始计算下面程序执行的时间");
               long start=System.currentTimeMillis();//用lang定义,因为数字太大
                for(int i = 0; i <10000;i++){
                        System.out.println(i);
                }
                long end=System.currentTimeMillis();//用lang定义
                System.out.println("程序运行时间为:"+(end-start)+"毫秒");
        }
}

2.3 Object

概述

Object是类层次结构的根,每个类都可以将Object作为超类。所有类都直接或者间接的继承自该类

构造方法: public Object()

回想面向对象中,为什么说子类的构造方法默认访问的是父类的无参构造方法?

因为它们的顶级父类只有无参构造方法心

toString()方法的使用

可以使得单独的多个属性变得有联系,让人一眼就能够看明白什么意思,例如我们在前面讲到的创建学生实体类时,在测试类输出时还要用getXxx()+setXxx才能进行输出,有了这种方法,我们就可直接进行使用了,这个方法建议所有子类进行重写使用,在使用时可以直接使用方法,快捷键还是Alt+Inster下面可以看到toString()方法

下面进行举例:


public class Student {//其实这里继承了Object,所以Student这个类理论上是子类,
//所以可以使用toString()方法,但要重写
    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 +
                '}';
    }
}

在这里插入图片描述


//测试类
public class Main {
        public static void main(String[] args) {
            Student s=new Student("张三",18);//采用有参构造
                System.out.println(s);//因为使用了toString()方法,
                // 就不用再用getName(),getAge()输出了,直接输出s

        }
} 

运行结果

Student{name='张三', age=18}

这样就可以让他们之间建立一种联系

equal()方法

在这里插入图片描述

比较的是内容值,当然,如果按照上面的方法进行比较姓名,年龄,它返回的的地址,因为地址不同,那么就会返回false,这个还需要在子类中重写方法,快捷键依然是那个

在这里插入图片描述

在这里插入图片描述

然后一直点下一步

再删掉这部分即可

在这里插入图片描述


//测试类
public class Main {
        public static void main(String[] args) {
            Student s1=new Student("张三",18);//采用有参构造
                System.out.println(s1);
                Student s2=new Student("张三",18);//采用有参构造
                System.out.println(s2);
                 System.out.println(s1.equals(s2));
                 //这里因为是new出来的,所以比较地址就会返回false,那么只有重写了方法才会
                
        }
}

//学生类
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 boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Student student = (Student) o;

        if (age != student.age) return false;
        return name != null ? name.equals(student.name) : student.name == null;
    }

}

这是对equals()方法代码内容的解释

在这里插入图片描述

2.4 Array的排序

对于封装好的排序方法,不用岂不是太可惜,但是用之前我们也要思考自己能否写出一个高效的算法排序的方法。

下面进行介绍Arrays类的使用,由于APi中方法太多,详细内容还请到API中自行查看,这里讲述两种常用的方法:

在这里插入图片描述

工具类的设计思想:

1. 构造方法用private修饰:为了防止外界创建对象

2. 成员用public static修饰:使用类名来访问该成员变量


import java.util.Arrays;

public class Main {
        public static void main(String[] args) {
           int []arr={2,7,3,4,9,5};
            System.out.println("排序前: "+Arrays.toString(arr));
            Arrays.sort(arr);
            System.out.println("排序后: "+Arrays.toString(arr));

        }
} 

运行结果:

排序前: [2, 7, 3, 4, 9, 5]

排序后: [2, 3, 4, 5, 7, 9]

现要求从键盘录入数字,要求数组是动态的,对数据进行排序


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

            Scanner sc=new Scanner(System.in);
            System.out.println("请你输入一个数n:");
            int []arr=new int[sc.nextInt()];//动态数组
            for(int i=0;i< arr.length; i++){
                arr[i]=sc.nextInt();
            }
            Arrays.sort(arr);
            System.out.println("排序后:"+Arrays.toString(arr));
        }
} 

录入:

5

1 5 3 7 9

运行结果:

[1, 3, 5, 7, 9]

以上就是JavaSE学习之内部类及常用API的详细内容,更多关于JavaSE内部类 API的资料请关注编程网其它相关文章!

--结束END--

本文标题: JavaSE学习之内部类及常用API

本文链接: https://lsjlt.com/news/159959.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaSE学习之内部类及常用API
    目录1.内部类1.1内部类概述1.2成员内部类1.3局部内部类1.4匿名内部类1.5匿名内部类在开发中的使用2.常用API2.1Math2.2System2.3Object2.4Ar...
    99+
    2024-04-02
  • JavaSE中内部类及常用API有哪些
    这篇文章将为大家详细讲解有关JavaSE中内部类及常用API有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.内部类1.1 内部类概述内部类:就是在一个类中定义一个类。例如:在一个类A内部定义一个类...
    99+
    2023-06-22
  • Java--内部类学习笔记
    本文介绍了什么是内部类,Java中的内部类:实例内部类. 静态内部类.局部内部类.匿名内部类的语法和注意事项,以及每个内部类的运用场景,以及简单介绍了匿名内部类更简洁更特殊的语法->lambda表...
    99+
    2023-09-11
    java 学习 笔记
  • java内部类之成员内部类、局部内部类和匿名内部类用法及说明
    目录内部类概念分类成员内部类使用成员内部类间接方式访问内部类直接方式访问内部类外部类和内部类变量重名问题局部内部类修饰内部类的权限匿名内部类测试类 一、匿名内部内应用总结内部类概念 ...
    99+
    2022-12-23
    java成员内部类 java局部内部类 java匿名内部类 java内部类
  • selenium学习(3)常用API
    查找元素使用操作如何找到页面元素Webdriver的findElement方法可以用来找到页面的某个元素,最常用的方法是用id和name查找。下面介绍几种比较常用的方法。By ID假设页面写成这样:<input type=”text”...
    99+
    2023-01-31
    常用 selenium API
  • Java中的内部类怎么学习
    这篇文章的内容主要围绕Java中的内部类怎么学习进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!看了很多源码,都有用到内部类,但是自己以前在生产环境上...
    99+
    2023-06-16
  • Python学习之str 以及常用的命令
    目录str 字符串str 里有一些常用的命令1、capitalize2、casefold和lower3、center4、count5、endswith和startswith6、exp...
    99+
    2024-04-02
  • JAVA内部类示例详解及练习
    目录1 内部类概述2 特点3 练习 : 内部类入门案例4 成员内部类4.1 练习 : 被private修饰4.2 练习 : 被static修饰5 局部内部类6 匿名内部类1 内部类概...
    99+
    2024-04-02
  • Golang学习之无类型常量详解
    目录什么是无类型常量无类型常量的特性默认的隐式类型类型自动匹配无类型常量带来的便利无类型常量的坑总结因为虽然名字很陌生,但我们每天都在用,每天都有无数潜在的坑被埋下。包括我本人也犯过...
    99+
    2023-03-20
    Golang无类型常量 Golang 常量
  • Java内部类和异常类的概念以及使用
    目录1 内部类2 匿名类2.1 和子类有关的匿名类2.2 和接口有关的匿名类3 异常类3.1 try-catch语句3.2 自定义异常类4 断言图4.1图4.25 综合案例1 内部类...
    99+
    2024-04-02
  • InfluxDB学习之InfluxDB常用函数(一)聚合类函数
    1)count()函数返回一个(field)字段中的非空值的数量。语法:SELECT COUNT(<field_key>) FROM <measure...
    99+
    2024-04-02
  • InfluxDB学习之InfluxDB常用函数(二)选择类函数
    1)BOTTOM()函数作用:返回一个字段中最小的N个值。字段类型必须是长整型或float64类型。语法:SELECT BOTTOM(<field_key>[,<tag_...
    99+
    2024-04-02
  • InfluxDB学习之InfluxDB常用函数(三)变换类函数
    1)DERIVATIVE()函数作用:返回一个字段在一个series中的变化率。InfluxDB会计算按照时间进行排序的字段值之间的差异,并将这些结果转化为单位变化率。其中,单位可以指定,默认为1s。语法:...
    99+
    2024-04-02
  • Java基础学习之ArrayList类概述与常用方法
    目录一、ArrayList类概述二、ArrayList类常用方法三、ArrayList存储字符串并遍历四、ArrayList存储学生对象并遍历五、ArrayList存储学生对象并遍历...
    99+
    2024-04-02
  • Java 基础之内部类详解及实例
     Java 基础之内部类详解及实例内部类不是很好理解,但说白了其实也就是一个类中还包含着另外一个类如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)显然,...
    99+
    2023-05-31
    java 内部类 ava
  • Python学习手册之内部方法、操作符重
     在上一篇文章中,我们介绍了 Python 的类和继承,现在我们介绍 Python 的内部方法、操作符重载和对象生命周期。  查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10016359.ht...
    99+
    2023-01-30
    手册 操作 方法
  • java常用API介绍之包装类
    目录 前言一、包装类包装类有以下特点: 前言 在学习本课题之前,我们首先需要知道什么是API。 API,即Application Programming Inte...
    99+
    2023-05-16
    java常用API java包装类
  • Redis入门及常用命令学习
    Redis简介 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中...
    99+
    2014-06-16
    Redis入门及常用命令学习
  • python常用机器学习及深度学习库有哪些
    本篇内容介绍了“python常用机器学习及深度学习库有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言目前,随着人工智能的大热,吸引了...
    99+
    2023-06-30
  • String类的学习笔记(上):介绍String类及其常用方法的使用
    本文介绍了Java中用来描述操作字符串的String类,和其一些常用的基本操作方法,字符串的创建输出,字符串对象的比较,字符串查找,字符串的转化,字符串的替换,字符串拆分,字符串截取,和大小写转换...
    99+
    2023-09-02
    学习 笔记 java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作