java基础学习5

2020/4/19java学习笔记

内部类与包装器

内部类和内部接口

非静态成员内部类:

非静态成员内部类作为外部类或外部接口的成员,不带有关键字static
性质

  • 在非静态成员内部类中,如果是访问自己定义的属性,可以直接访问,也可以通过this关键字来访问。
  • 在非静态成员内部类中,可以访问外部类的所有成员,包括private修饰的。
  • 在非静态成员内部类中,如果外部类和内部类的定义的属性同名,则可以通过外部类类名.this.外部类变量名的形式来访问.

实例化途径

  • 通过外部类的非静态方法实例化内部类, 在方法去实例化一个内部类对象
  • 通过外部类的静态main方法实例化内部类,Outer.inner in5 = new Outer().new Inner();
  • 在内部类中通过this来表示内部类的实例。

局部内部类:

局部内部类也叫方法内部类,即在方法内部定义的内部类。
性质:

  • 可以通过this访问自己的成员,访问外部类的成员属性,Outer.inner in5 = new Outer().new Inner();也可以直接访问参数
  • 在局部类中,如果要访问外部类的局部变量,则此变量必须是final修饰的(提高局部变量的生命周期)。
  • 内部类的对象中保存有外部类对象的引用,即Outer.this,也就是在内部类中有通过组合this关键字指向外部类对象的引用,因而在内部类不能定义静态的属性。
  • 内部类的实例化必须先实例化外部类。

静态内部类:

用static修饰的内部类叫静态内部类,一个内部类用static修饰,这个类就相当于是一个外部定义的类,所以static的内部类中可声明static成员或费静态成员,并且可以通过public,private,protected修饰。

  • 静态内部类只能访问外部类的静态变量或方法,非静态的不能访问。可以访问静态内部类自己定义的非静态成员,因此默认情况下静态内部类的内部都是静态的。
  • 生成一个静态内部类不需要外部类成员。静态内部类的对象可以直接生成:Outer.Inner in = new Outer.Inner();

匿名内部类:

没有名字的内部类,类内部没有构造器。如果其是继承带有参数构造器的父类,则创建它点的时候必须带上参数,在实现过程中用super关键字调用相应内容。

匿名内部类不能定义任何静态成员、方法和类,并且不能用属性修饰,只能创建匿名内部类的一个实例。一个匿名内部类一定是在new的后面,用其隐式实现一个接口或实现一个类。因匿名内部类为局部内部类,局部内部类的限制对其生效

对象包装器:

把基本类型转化为对象来处理。

  1. 包装器类的使用
    专门用来包裹基本类型的类就交包装类,也叫包装器。主要目的是提供一个对象实例作为壳,将基本类型包到这个对象中,然后提供很多操作数据的方法。

  2. 字符串、包装类、原始数据类间的转换

  • String to Integer.
    Integer integer = new Integer("158");
    或者Integer integer = Integer.valueOf(str);

  • Integer to String.
    Sring str = integer.toString();

  • Integer 转成 int.
    int i = integer.intValue();

  • int to Integer.
    Integer integer2 = new Integer(i);
    Integer integer2 = Integer.valueOf(i);

  • String to int.
    int i2 = Integer.parseInt(str);

  • int to String.
    String str3 = String.valueOf(i2);
    String str4 = i2 + "";

装箱和拆箱

自动装箱boxing , 拆箱unboxing
装箱:将基本数据类型包装为对应的包装类对象
Integer integer = 10;
拆箱:将包装类对象转换成对应的基本数据类型

Integer fooInteger = 10;
int fooPrimitive = fooInteger

JAVA编译器会根据源代码的语法来觉得是否进行装箱或拆箱。

Integer i = 10;//装箱
System.out.println(i + 10);//拆箱

注意点:

  • 防止没有初始化就使用变量所引起的空指针异常问题
  • 特殊情况:“==”也用于判断两个对象参考名称是否指向同一个对象,在自动装箱时对于一个-128到127之间的值,他们被装箱为Integer对象后,会在内存之中被重用。

2020/4/20--常用类介绍

知识要点

  • String类
  • 字符串高级匹配搜索
  • 时间获取与计算
  • Java语言国际化

String类

String类和StringBuffer两个类来封装对字符串的处理,在java.lang包中

使用双引号得到的其实是一个String类的对象,new String(String)构造方法对传入的参数创建了一个副本,形成了String对象,增加了性能开销

字符串常量

  • 字符串双引号括起来
  • 字符串的字符是Unicode国际统一编码,一个字符占两个字节
  • String是一个final类,代表不可变的字符序列
  • 字符串是immutabel的,不可变,内容被配置,它的内容就是固定的(改变字符串的值其实是改变了指向)

对于一些可以共享的字符串对象,会现在String池中查找是否存在相同的String内容, 如果存在则无需创建直接指向,“”创建一个字符串就会被存储在字符串常量池

intern()函数

判断常量池中是否存在该对象,存在则返回该对象,反之原对象会被加入池中,并返回引用。

字符串对象操作

  1. length()方法

    返回字符串的长度,汉字按一个字符计算

  2. charAt(index)方法

    返回下标为index的字符

  3. equals、equalsIgnoreCase方法

    equals(String s)方法用来比较当前字符串对象实体是否与参数字符串的实体相同,忽略大小写,就是字符串值的比较。

    "=="在比较对象时,比较是否是引用同一个对象,在比较常量时是比较常量的值是否相等;

  4. compareTo、compareToIgnoreCase

    按字典顺序与参数s比较大小,相同返回0,当前大于参数返回是正值,小于参数返回负值

  5. 与indexOf相关的方法

    常用的搜索方法:

    • public int indexOf(String s)方法,表示从当前字符串开始检索首次s出现的位置,没有检索到则返回-1
    • public int indexOf(String s, int startpoint)从startpoint位置开始检索字符串s,返回首次出现的位置,没有则返回-1
    • public int lastIndexOf(String S)从头开始检索返回最后s出现的位置,没有则返回-1
    • public int lastIndexOf(String s, int startpoint)从startpoint开始向前检索返回最后一个s出现的位置没有返回-1
  6. startsWith、endWith方法检查是否以指定的开头或结尾

  7. regionMatches方法

    regionMatches(int firstStart, Stirng other, int otherStart, int length);

    从当前字符串的firstStart开始截取长度为length长度的子串与从other字符串的otherStart位置开始截取长度为length的子串,最后将这两个进行比较,返回比较的真假值

字符串对象修改

给定字符串的修改操作都不会改变原有对象的值。

类型转换

  1. 转化为整形

    public static int parseInt(String s);

  2. 转为float或double型

    public static int parseFloat(String s);

  3. 数值转为字符串

    public Stirng valueOf(int n);

    public Stirng valueOf(byte n);

  4. string到字符数组

    public void getChars(int start , int end, char c[], int offset)

    将当前字符串的一部分字符拷贝到参数c指定的数组中, 字符串的位置start 到 end -1,必须确保c能存下该复制的字符

StringBuffer类的使用

String对象的长度是固定,不能改变内容。

StringBuffer封装了一个字符数组允许变长和修改操作, java.lang.StringBuffer

StringBuffer类不像String类那样为了线程访问安全创建大量副本对象。因此,需要在字符串上进行的操作可以使用StringBuffer提高性能,没有特殊需求还是选择String类进行操作

StringBuilder类的使用

StringBuilder类是一个可变的字符序列。

日期类简介

  • System类
  • Date类
  • Calendar类
  1. java.lang.System类

    public static long currentTimeMillis()返回当前时间与1970/1/1

    0:0:0之间的以毫秒为单位的时间差(不太精确)。

    UTC(Universao Coordinated Time): 世界协调时间、世界统一时间或世界标准时间

    GMT(Greenwich Mean Time): 格林威治标准时间

    UTC 比GMT更加精确, 差值不超过0.9

  2. java.util.Date类

    Date类表示特定的瞬间, 精确到毫秒。

    • getTime():返回1970毫秒数
    • toString: 把Date对象转化为String : dow mon dd hh:mm:ss zzz yyyy即星期 月 日 时:分:秒 时区 年
posted @ 2020-04-20 17:27  DengSchoo  阅读(128)  评论(0编辑  收藏  举报