day_17 内部类,常用API类

本文深入讲解Java内部类的概念,包括成员内部类、局部内部类、匿名内部类等,并介绍了Math类、Random类、System类及包装类等常用API类的功能与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内部类

在类的内部,创建一个类,这个类就是内部类,包含内部类的类称为外部类

内部类分类成员内部类和局部内部类

成员内部类

public class OuterClass {
    private int num =10;
    private int num1 = 20;
    //成员内部类
    public class InnerClass{
        private double a = 100.1;
        public  void print(){
            System.out.println(num +"---"+num1);
            show();
        }
    }

    public  void show(){
        System.out.println(num +"---"+num1);
    }

    public static void main(String[] args) {
        OuterClass oc = new OuterClass();
        System.out.println(oc.num);
        System.out.println(oc.num1);
        oc.show();
        // 调用内部类的成员方法、成员属性
        //1 需要创建内部类的对象 需要通过 外部类 的对象来创建内部类的对象  创建出来的对象是内部类类型
        InnerClass innerClass = new OuterClass().new InnerClass();
        System.out.println(innerClass.a);
        innerClass.print();
    }
}

包含有成员内部类的类 编译之后 会产生几个class文件?
在这里插入图片描述
在成员内部类中不能存在static修饰的成员

如果在内部类中使用this此时的this代表的是内部类的当前对象

package cn.lanqiao.inner;

public class OuterClass {
    private int num =10;
    private int num1 = 20;
    //成员内部类
    private class InnerClass{
        private double a = 100.1;
         int i = 100;
         public  InnerClass(){

         }
         public InnerClass(int i){
             this.i = i;
         }
        public  void print(){
            System.out.println(num +"---"+num1);
            show();
        }
    }

    public  void show(){
        System.out.println(num +"---"+num1);
    }

    public static void main(String[] args) {
        OuterClass oc = new OuterClass();
        System.out.println(oc.num);
        System.out.println(oc.num1);
        oc.show();
        // 调用内部类的成员方法、成员属性
        //1 需要创建内部类的对象 需要通过 外部类 的对象来创建内部类的对象  创建出来的对象是内部类类型
        InnerClass innerClass = new OuterClass().new InnerClass();
        // 使用外部类已有的对象来创建外部类  同时可以使用他的重载的 构造方法
        InnerClass innerClass1 =oc.new InnerClass(100);
        System.out.println(innerClass.a);
        innerClass.print();
    }
}

局部内部类

package cn.lanqiao.inner;

public class OuterClass {
    private int num =10;
    private int num1 = 20;

    public  void show(){
        System.out.println(num +"---"+num1);
        // 局部内部类    相当于方法的一个局部变量 局部变量不能使用访问修饰符
         class  InnerClass{
            private  int i = 100;
            public void  print(){
                System.out.println(num +"--"+ num1+"--"+i);
            }
        }
        // 局部内部类的 声明周期和局部变量相同 仅限于当前方法中来使用  在方法的 外部是访问不到的
        //在方法中如果要访问局部内部类的成员  则需要创建局部内部类的 对象来访问
        InnerClass innerClass = new InnerClass();
        System.out.println(innerClass.i);
    }

    public static void main(String[] args) {
        OuterClass oc = new OuterClass();
        oc.show();

    }
}

编译后也是两个Class文件
在这里插入图片描述

匿名内部类

public interface InterDemo{
	void method();
}
public class ClassDemo {
    public  void  show(InterDemo interDemo){
        interDemo.method();
    }

    public static void main(String[] args) {
        ClassDemo demo = new ClassDemo();
        demo.show(new InterDemo() {
            @Override
            public void method() {
                System.out.println("这是使用匿名内部类来实现接口的");
            }
        });
    }
}

常用API类

1.Math类

1、Math类概述

Math 包含执行基本数字运算的方法

2、Math中方法的调用方式

Math类中无构造方法,但内部的方法都是静态的,则可以通过 类名.进行调用

3、Math类的常用方法

在这里插入图片描述

2.Random类

Math 类中虽然为我们提供了产生随机数的方法 Math.random(),但是通常我们需要的随机数范围并不是[0, 1)之间的 double 类型的数据,这就需要对其进行一些复杂的运算。如果使用 Math.random()计算过于复杂的话,我们可以使用例外一种方式得到随机数,即Random 类,这个类是专门用来生成随机数的,并且 Math.random()底层调用的就是Random 的 nextDouble()方法。

Random 类的常用方法
在这里插入图片描述
在这里插入图片描述

3.System类

在这里插入图片描述
在这里插入图片描述

4.包装类

1. 基本类型包装类

Java 是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。

比如:将基本数据类型存储到 Object[ ]数组或集合中的操作等等。
为了解决这个不足,Java 在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。

针对八种基本数据类型定义相应的引用类型—包装类(封装类)

有了类的特点,就可以调用类中的方法, Java才是真正的面向对象

常用的操作之一:用于基本数据类型与字符串之间的转换
在这里插入图片描述

2.Integer类

在这里插入图片描述

public static void main(String[] args) {
    // 如果在使用过程中,调用方法的时候,如果方法上画了删除线  则表示该方法不推荐使用,但是 依然可以使用
    Integer integer = new Integer("10");
    //使用Integer来获取最大的整数
    System.out.println(Integer.MAX_VALUE);
    System.out.println(Integer.MIN_VALUE);
    //推荐使用的 获取Integer对象的方法
    // 实现了将基本类型的数据转换为他的包装类对象
    Integer in = Integer.valueOf(100);
    // 将基本类型的String类型转换为基本 类型对应的包装类
    Integer in2 = Integer.valueOf("bac");//字符串中的内容只能为数字  否则就会出现NumberFormatException
}

自动装箱和自动拆箱

Integer in3 = 120;// 自动装箱  始于jdk1.5
int i = in;// 自动拆箱
int和String相互转换
  1. int转换称String
    方式1:基本类型数据和字符串拼接

    String s = 3 + "";
    System.out.println(s + 1);//31
    

    方式2:使用包装类提供的toString方法

    package cn.lanqiao.wrapper;
    
    public class IntegerDemo {
        public static void main(String[] args) {
            // 如果在使用过程中,调用方法的时候,如果方法上画了删除线  则表示该方法不推荐使用,但是 依然可以使用
            Integer integer = new Integer("10");
            //使用Integer来获取最大的整数
            System.out.println(Integer.MAX_VALUE);
            System.out.println(Integer.MIN_VALUE);
            //推荐使用的 获取Integer对象的方法
            // 实现了将基本类型的数据转换为他的包装类对象
            Integer in = Integer.valueOf(100);
            // 将基本类型的String类型转换为基本 类型对应的包装类
            Integer in2 = Integer.valueOf("200");//字符串中的内容只能为数字  否则就会出现NumberFormatException
            Integer in3 = 120;// 自动装箱  始于jdk1.5
            int i = in;// 自动拆箱
            String s = 3 + "";
            System.out.println(s + 1);//31
            System.out.println(in2.toString() + 100);//200100
        }
    }
    

    方式3:使用String类提供的valueOf

    System.out.println(String.valueOf(100) + 100);//100100
    
  2. String转换为int
    方式一:先使用Integer.valueOf将字符串数字转成Integer,再调用intValue()方法转换为int

    方式二:通过Integer静态方法parseInt()进行转换 public static int parseInt(String s)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

 //将String 类型转换为int类型
    //方式一:先使用Integer.valueOf将字符串数字转成Integer,再调用intValue()方法转换为int
    String str = "1000";
    Integer ii = Integer.valueOf(str);
    // 使用intValue方法
    int ii1 = ii.intValue();
    // 可以使用自动拆箱
    int ii2= ii;
    //方式二通过Integer静态方法parseInt()进行转换 public static int
    int ii3 = Integer.parseInt(str);
}

在这里插入图片描述

public class StrChangInt {
    public static void main(String[] args) {
        String  str = "91 27 46 38 50";
        String[] strArr = str.split(" ");
        Integer[] intArr = new Integer[strArr.length];
        for(int i = 0 ; i < strArr.length;i++){
            intArr[i] = Integer.parseInt(strArr[i]);
        }
        Arrays.sort(intArr);
        for(Integer integer : intArr){
            System.out.println(integer);
        }
    }
}

3.包装类的缓存问题

• 整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。

• 缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象。下面我们以Integer类为例,看一看Java为我们提供的源码,加深对缓存技术的理解
在这里插入图片描述

public class StrChangInt {
    public static void main(String[] args) {
        Integer i = new Integer(1);
        Integer j = new Integer(1);
        System.out.println(i == j);//false
        Integer m = 123;
        Integer n = 123;
        // 只要自动装箱的数据的范围在-128---127之间  都是 直接从缓存对象数组中去获取元素
        System.out.println(m == n);//true
        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);//false
    }
}

在这里插入图片描述
在这里插入图片描述

### JavaScript 常用 API 列表及其用法 以下是 JavaScript 中一些常见的 Web API 和其具体用途: #### 1. **DOM (Document Object Model)** DOM 提供了一套用于操作 HTML 文档结构的方法和属性。通过 DOM,可以动态修改网页的内容、样式以及行为。 - `document.getElementById(id)` 返回具有指定 ID 的元素[^2]。 - `element.innerHTML` 获取或设置某个元素的内部 HTML 内容。 - `document.querySelector(selector)` 使用 CSS 选择器返回第一个匹配的元素[^2]。 - `element.addEventListener(event, callback)` 添加事件监听器以响应特定事件(如点击、键盘输入等)。 ```javascript const button = document.querySelector('button'); button.addEventListener('click', () => { alert('Button clicked!'); }); ``` --- #### 2. **BOM (Browser Object Model)** BOM 主要涉及浏览器窗口的操作功能,比如导航、弹窗、定时器等。 - `window.alert(message)` 显示警告框并传递消息。 - `setTimeout(callback, delay)` 设置延迟执行函数的时间间隔。 - `clearTimeout(timeoutID)` 取消由 `setTimeout()` 设定的任务[^2]。 ```javascript let timeoutId = setTimeout(() => { console.log("This will run after 2 seconds"); }, 2000); // Cancel the timer if needed clearTimeout(timeoutId); ``` --- #### 3. **Array Methods** JavaScript 数组提供了许多实用的内置方法来简化数据处理流程。 - `array.push(element)` 向数组末尾添加新项[^4]。 - `array.pop()` 删除并返回数组的最后一项[^4]。 - `array.map(callback)` 创建一个新数组,其中包含调用回调函数后的结果。 - `array.filter(callback)` 返回满足条件的新数组[^4]。 - `array.reduce(callback, initialValue)` 对数组中的每个元素依次执行回调函数,并将其结果累积到单个值中[^4]。 ```javascript const numbers = [1, 2, 3]; const doubledNumbers = numbers.map(num => num * 2); // 输出: [2, 4, 6] const filteredNumbers = numbers.filter(num => num > 1); // 输出: [2, 3] console.log(filteredNumbers); ``` --- #### 4. **String Methods** 字符串也是 JavaScript 开发中最常使用的对象之一。 - `string.charAt(index)` 或者更现代的方式 `string[index]` 获取给定索引位置上的字符[^5]。 - `string.indexOf(searchValue)` 查找子字符串首次出现的位置。 - `string.split(separator)` 根据分隔符拆分成数组[^5]。 ```javascript const text = "hello world"; const firstChar = text[0]; // h const words = text.split(" "); // ["hello", "world"] ``` --- #### 5. **Math Functions** 对于数值计算场景下的需求,可以通过 Math 对象完成各种运算。 - `Math.random()` 生产介于 `[0, 1)` 范围内的随机数[^1]。 - `Math.floor(number)` 将数字向下取整[^1]。 ```javascript function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; } console.log(getRandomInt(1, 10)); // 随机生成 1 至 10 的整数 ``` --- #### 6. **Date and Time Handling** 日期时间相关的操作同样重要。 - `new Date().getFullYear()` 当前年份。 - `date.setDate(day)` 修改当前日期实例的具体天数[^1]。 ```javascript const today = new Date(); console.log(today.getFullYear()); // 打印今年年份 ``` --- ### 总结 以上列举了一些最基础却非常重要的 JavaScript APIs 型及其实现方式。每一种都有各自适用范围,在实际项目里合理选用能够极大提升工作效率与程序可读性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值