java基础第二十五篇 Java 中的内部类

内部类

内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类

内部类的主要作用如下:

1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

内部类可分为以下几种:

  • 成员内部类
  • 静态内部类
  • 方法内部类
  • 匿名内部类

例子:

package MyTest1;
//外部类MyTest20
public class MyTest20 {
    // 内部类Inner,类Inner在类HelloWorld的内部
       public    class  Internal{
        // 内部类的方法
              public void Test(){
                  System.out.println("这是一个内部类方法");
              }
          }



    public static void main(String args[]){
             // 创建外部类对象
              MyTest20 myTest20=new MyTest20();
             // 创建内部类对象
              Internal internal=myTest20.new Internal();
              // 调用内部类对象的方法
              internal.Test();

    }

}

成员内部类

内部类中最常见的就是成员内部类,也称为普通内部类,成员内部类一般放在外部类的成员变量的位置。

 

成员内部类的使用

1、 内部类定义在 外部类的内部,相当于 外部类的一个成员变量的位置,内部类可以使用任意访问控制符,如 public 、 protected 、 private 等

2、 内部类中定义的 方法可以直接访问 外部类中的数据,而不受访问控制符的影响,如直接访问 外部类中的私有属性a

3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:

内部类 对象名 = 外部类对象.new 内部类( );

4.成员内部类的 .class 文件总是这样:外部类名$内部类名.class

注意:

1、 外部类是不能直接使用内部类的成员和方法,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

2、 如果外部类和内部类具有相同的成员变量或方法内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用 this 关键字

例:

package honor;

public class Outer {
    int b=9;
    public class Inner{
        int b=5;

        public void Test(){
            System.out.println("访问外部类中的变量b"+Outer.this.b);//访问外部类的成员属性b
            System.out.println("访问内部类中的变量b"+b);
        }
    }

}

静态内部类

静态内部类是 static 修饰的内部类,这种内部类的特点是:

1、 静态内部类不能直接访问外部类的非静态成员,但可以通过

 new 外部类().成员 

的方式访问 

2、 如果外部类的静态成员与内部类的成员名称相同,可通过

类名.静态成员

访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员

3、 创建静态内部类的对象时,不需要外部类的对象,可以直接创建

 内部类 对象名= new 内部类();

例子:

package honor;

public class AOuter {
    private int a=1;//外部类的私有变量
    static int b=2;//外部类的静态变量

    //静态内部类
    public static class AInner{
      int b=2;//内部类的变量

      public void  test(){
          System.out.println("访问外部类中的b:"+AOuter.b);
          System.out.println("访问内部类中的b:"+b);
      }
    }


    public static void main(String args[]){
        AInner aInner=new AInner();//直接创建内部类的对象
        aInner.test();
    }
}

输出结果:

方法内部类

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

例子:

package honor;

public class BOuter {
    //外部类的方法
    public void rain(){

        final int a=1;//常量
        int b=2;// 变量

        //方法内部类
          class BInner{

            int c=3;//内部类的变量

            public void  test(){
                System.out.println("访问外部类中的常量a:"+a);
                System.out.println("访问内部类中的变量c:"+c);
            }
        }
        BInner bi=new BInner();//创建内部类的对象
        bi.test();//调用内部类的方法
    }

    public static void main(String args[]){
        BOuter bo=new BOuter();//创建外部类的对象
        bo.rain();//调用外部类的方法
    }
}

总结:只有通过调用含有方法内部类的方法,才能调用方法内部类里面的方法或者获得其属性。

注意:由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符

 

参考来自慕课网

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 Java 实现冒泡排序的方法如下: ```java public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (arr[j] > arr[j + 1]) { // swap arr[j+1] and arr[i] int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } ``` 其,数组arr是需要排序的数组。第一层循环控制有多少趟排序,第二层循环每一趟进行相邻元素比较,如果顺序不对就交换。 ### 回答2: 冒泡排序是一种简单的排序算法,它依次比较相邻的两个元素,如果顺序错误,则交换位置。这个过程不断重复,直到整个数组排好序为止。在Java实现冒泡排序可以按照以下步骤进行: 1. 创建一个与原始数组等长的临时数组,用于存储排序结果。 2. 使用for循环遍历整个数组,每次遍历都执行以下步骤: a. 再使用一个for循环遍历当前元素之后的其他元素,每次遍历都执行以下步骤: i. 如果当前元素大于下一个元素,则交换它们的位置。 b. 将经过遍历后的当前元素存入临时数组。 3. 循环结束后,将临时数组的元素复制回原始数组。 以下是一个简化版的Java代码示例,演示了如何实现冒泡排序: ```java public class BubbleSortExample { public static void bubbleSort(int[] array) { int n = array.length; int[] temp = new int[n]; System.arraycopy(array, 0, temp, 0, n); // 复制原始数组到临时数组 for (int i = 0; i < n - 1; i++) { for (int j = 0; j < n - i - 1; j++) { if (temp[j] > temp[j + 1]) { // 交换位置 int tempValue = temp[j]; temp[j] = temp[j + 1]; temp[j + 1] = tempValue; } } } // 将临时数组的元素复制回原始数组 System.arraycopy(temp, 0, array, 0, n); } public static void main(String[] args) { int[] array = {5, 2, 8, 7, 1}; bubbleSort(array); System.out.println(Arrays.toString(array)); // 输出排序后的数组 } } ``` 以上代码演示了如何使用两个嵌套的for循环实现冒泡排序。内部循环用于比较并交换元素,而外部循环用于遍历整个数组。经过排序后,程序输出排序结果。 ### 回答3: 冒泡排序是一种简单的排序算法,它通过不断地比较和交换相邻的元素,将最大的元素逐渐移动到数组的最后位置,从而实现排序的目的。 在Java实现冒泡排序,可以按照以下步骤进行: 1. 首先创建一个待排序的数组。可以通过输入或者随机生成的方式来获取待排序的数组。 2. 接下来,需要使用双重循环实现冒泡排序。外层循环控制需要进行比较的轮数,内层循环用于相邻元素的比较和交换。 3. 在内层循环,通过比较相邻的元素大小,如果前一个元素大于后一个元素,则交换它们的位置,将较大的元素逐渐向后移动。 4. 在每轮比较结束后,最大的元素将会“冒泡”到数组的末尾位置。 5. 外层循环重复执行 n-1 轮,直到所有的元素都排好序。 6. 最后,得到一个已经排序好的数组。 以下是一个简单的Java代码示例实现冒泡排序: ``` public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { // 交换相邻元素 int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(arr); System.out.println("排序结果:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } } ``` 以上就是在Java实现冒泡排序的方法。冒泡排序虽然简单,但是在大规模数据排序时效率较低,不适用于大规模数据的排序需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随风而行无疾而歌

看官,觉得不错,奖励一下呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值