zoukankan      html  css  js  c++  java
  • 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即星期 月 日 时:分:秒 时区 年
  • 相关阅读:
    解决chrome console打印的信息一闪而过
    Docker 构建自定义镜像
    Docker 镜像、容器、仓库
    Docker 简介、下载安装
    执行yum list installed | grep xxx 命令时报错:未提供依赖perl-DBD-SQLite、perl-DBI
    SpringBoot 配置多种运行环境
    SpringCloud Config 分布式配置管理
    SpringCloud Sleuth+Zipkin 分布式链路追踪
    Dubbo 配置中心、元数据中心
    dubbo admin的使用
  • 原文地址:https://www.cnblogs.com/DengSchoo/p/12739163.html
Copyright © 2011-2022 走看看