内部类,包装类,System

复习:接口

定义

访问权限修饰符 interface 接口名{
​
}

组成

1.公共静态常亮

2.公共静态方法

3.公共抽象方法

4.default修饰的普通方法(default和public差不多)

使用

场景1:一个接口继承多个接口

语法:
    访问权限修饰符 interface 子接口名 extends 父接口名1,父接口名2,父接口名3{
        
    }
    接口数量随意,接口对接口用extends,是继承

注意 :

1.如果多个父接口提供相同的方法(方法名相同,形参列表也相同),此时子类将会将其合并,如果是default修饰的方法,那么子类必须重写

2.父接口的静态方法不能被继承

3.不能直接创建对象,也有人会把创建对象称为实例化对象

场景2:一个类可以实现多个接口

语法:
    访问权限修饰符 class 类名 implements 接口名1,接口名2{
    
    }

这个类就是接口1,2的实现类

如果实现的接口中有抽象方法,那么实现类要重写所有的抽象方法(自己是抽象类也可以)

今日

内部类

概念:在类中写类,就是内部类

//例
public class A{
    public class B{
        
    }
}
//此时B就是内部类,A就是外部类

内部类分类

1.成员内部类

定义位置: 类中,方法外

没有使用static修饰

2.静态内部类

定义为重: 类中方法外

使用static修饰

3.局部内部类

定义位置: 类中,方法中

4.匿名内部类 ☆☆

定义位置: 值或实参中

成员内部类

定义位置 : 类中,方法外

可以定义什么?

除静态成员(静态属性,静态方法和静态代码块)外皆可定义

如何创建对象?

情况1 : 在所在外部类中创建该类的内部类对象
    内部类名 内部类对象名 = new 内部类名(实参列表);
​
只是省略this关键字,所以这种创建方式不能在静态方法中使用
this省略在new前,表示的的是外部类的对象.外部类的成员(此时指的是"new 内部类...")
class A{        //外部类
 B b = new B(); //内部类对象
 B b = this.new B();    //没有省略this的创建内部类对象
 class B{       //内部类
 }
}

情况2:
    外部类类名.内部类类名 对象名 = 外部类对象.new 内部类类名(实参列表);
class A{        //外部类
 class B{       //内部类
 }
}
class C{    //和A(外部类)没有关系的类
 A.B ab = new A().new B();  //new A(),创建A的对象,也可以分开写,如下
 A a = new A(); //创建A的对象
 A.B ab2 = a.new B();   //需注意,如果C类不在同一个包下,需导包
}

静态内部类

定义位置 : 类中,方法外

可以定义什么?

什么都可以定义

如何创建对象?

外部类类名.内部类类名 对象名 = new外部类类名.内部类类名(实参列表);
public class Test { //外部类
 Test.A a = new Test.A();   //创建内部类对象
 public static void main(String[] args) {
     Test.A a = new Test.A();   //创建内部类对象
 }
 static class A{    //内部类
 }
}

局部内部类

定义位置 : 类中,方法中

注意 :

1.此时不能使用访问权限修饰符

2.只能在当前方法中使用

可以定义什么?

除静态成员(静态属性与静态方法等)以外皆可定义

如何创建对象? 内部类类名 对象名 = new 内部类类名(实参列表);

class Test {
 public void aa(){  //方法
     class A{       //写在方法中
     }
     A a = new A(); //创建对象,,千万注意,写在内部类的顺序之下
 }
}

匿名内部类☆☆

先来了解匿名对象

匿名对象

类名 对象名 = new 类名(实参列表);  //这是正常的对象,有对象名
对象名.方法();   //用对象名调方法
​
new 类名(实参列表).方法名;   //这就是上面的简写,没有对象名
//new 类名(实参列表)就是创建对象,也就是说上面可以理解为对象调用方法

没有对象名的对象

语法:

new 类名(实参列表).方法名();

缺点 : 只能使用一次

优点 : 编写方便

匿名内部类

一般用于只创建一次对象的类,用匿名内部类

概念 : 没有类名的内部类称为内部类

定义位置:值或实参中

Int a = 10; 10的位置就是值的位置

aa(Int a); Int a的位置就是实参位置, (这是调用方法)

语法:

父类名或父接口名 对象名 = new 父类名或父接口名(){
    属性
    方法
    //没有构造函数,因为没有类名
};
"="后面的才是匿名内部类,前面的就是接收一下.

注意 :

1.一个类只创建一个对象时,可以使用匿名内部类

2.不能定义静态的成员与方法

包装类

概念:8个基本数据类型对应的引用数据类型

包装类有

byte Byte

short Short

int Integer

float Float

double Double

char Char

boolean Boolean

其实这8个基本数据类型也是引用数据类型,只是包装了一下

Scanner sca = new Scanner(System.in);
//分析一下,Scanner说白了也是个类,所以是引用数据类型
//这句代码就是创建了Scanner的对象(工具)
Integer a = new Integer(10);    //和int对应
//Ctrl加鼠标左键点击Integer,可以看源码

提供的方法

自动装箱

概念:将基本数据类型转换为其对应的引用数据类型的对象

如 :

Integer i = 10;     //是int的包装类
​
String str = new String("XXX");
String str02 = "xxx"    //和上面一样,只不过sString有自动装箱

自动拆箱

概念 : 将引用数据类型的对象转换为对应的基本数据类型的变量

String str03 = str;
//str明显是对象"new String("XXX")",这就是自动拆箱

整数缓冲区

-128~127

原因: 因为系统中已经创建了-128到127之间的对象(用数组存的),在系统自动装箱时,如果值在该范围内,直接使用已经创建好的对象,如果超过这个,返回需要重新创建对象

    Integer i1 = 127;
    Integer i2 = 127;
    i1 == i2;               true
    i1 = 128;
    i2 = 128;
    i1 == i2;               false

System

含义:系统

本质:由JDK提供的一个类

提供的属性和方法:

static native void arraycopy(Object src,int  srcPos,
                       Object dest, int destPos,
                       int length)
作用:将原数组中的一段数据复制到新数组
    1参:原数组
    2参:复制开始的位置
    3参:新数组
    4参:新数组开始的位置
    5参:复制的长度
​
☆☆      计算代码执行时间
static native long currentTimeMillis()
作用:获取当前时间与1970年1月1日00:00:00:000的时间差(格林威治时间)
​
static void exit(int status)
作用:结束当前程序
    1参:终止状态码
        0:正常退出
        1:异常退出
​
static void gc()
作用:手动调用垃圾回收机制
​
...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值