• Java基础学习07--内部类与常用类


    1 内部类

    定义:在一个类的内部再定义一个完整的类。

    特点:

    (1)编译之后可以生成独立的字节码文件。

    (2)内部类可以直接访问外部类的私有成员。

    (3)内部类可以为外部类提供功能组件。

    1.1 成员内部类

    把一个类定义在另一个类内部,作为实例成员。与实例变量、实例方法同级。创建内部类对象时,必须依赖外部类对象。

     1 package javabasic.internalclass;
     2 
     3 public class OuterClass01 {
     4     private String name ="zs";
     5     private Integer age = 20;
     6     
     7     //可以使用访问修饰符:public/private/protected
     8     class Inner{
     9         private String address = "beijing";
    10         private String phone = "123";
    11         
    12         private String name = "lisi";
    13         
    14         //静态内部类不能包含静态变量
    15         //private static String country = "zhongguo";
    16         
    17         //静态内部类里可以包含静态常量
    18         private static final String country = "china";
    19         
    20         public void show() {
    21             //内部类与外部类同名,优先访问内部属性
    22             System.out.println(name);
    23             
    24             //内部类与外部类同名,需要加前缀来访问外部类属性
    25             System.out.println(OuterClass01.this.name);
    26             //打印外部类的属性
    27             System.out.println(age);
    28             
    29             //打印内部类的属性
    30             System.out.println(address);
    31         }
    32     }
    33 
    34     public static void main(String[] args) {
    35         // 1.调用内部类的方法
    36         OuterClass01 d1 = new OuterClass01();
    37         d1.new Inner().show();
    38     }
    39 }

    1.2 静态内部类

    把一个类定义在另一个类内部,作为静态成员。静态内部类创建时,不依赖外部类对象,可直接创建或通过类名访问,可以声明静态成员。

     1 package javabasic.internalclass;
     2 
     3 //2.静态内部类
     4 public class OuterClass02 {
     5     
     6     private String name ="zs";
     7     private Integer age = 20;
     8     
     9     //静态内部类的级别,和外部类相同
    10     static class Inner{
    11         
    12         private String address = "beijing";
    13         private String phone = "123";
    14         
    15         private String name = "lisi";
    16         
    17         private static Integer count = 100;
    18         
    19         public void show() {
    20             //内部类与外部类同名,优先访问内部属性
    21             System.out.println(name);
    22             
    23             //内部类与外部类同名,需要加前缀来访问外部类属性
    24             System.out.println(new OuterClass02().name);
    25             //打印外部类的属性
    26             System.out.println(new OuterClass02().age);
    27             
    28             //打印内部类的属性
    29             System.out.println(address);
    30             
    31             //打印静态内部类的静态属性
    32             //类名.静态属性 或 直接用静态属性
    33             System.out.println(Inner.count);
    34         }
    35     }
    36     
    37     public static void main(String[] args) {
    38         // 直接
    39         OuterClass02.Inner inner2 = new OuterClass02.Inner();
    40         inner2.show();
    41     }
    42 }

    1.3 局部内部类

    把一个类定义在另一个类的方法的内部,作为局部变量。作用范围和创建对象范围仅限于当前方法。

     1 package javabasic.internalclass;
     2 
     3 //3.局部内部类
     4 public class OuterClass03 {
     5 
     6     private String name ="zs";
     7     private Integer age = 20;
     8     
     9     public void show() {
    10         //在jdk 1.8 这个局部变量会自动变为final常量,后续不能再修改
    11         String address = "abc";
    12         
    13         //局部内部类,不能加访问修饰符
    14         class Inner{
    15             private String name = "ls";
    16             private String phone="1234567";
    17             private String email="1@1.com";
    18                         
    19             //private static Integer newcount = 200;//不能定义静态变量
    20             private final static int newcount = 200;//可以定义静态常量
    21 
    22             public void show2() {
    23                 //访问外部类的方法中的局部"常量"
    24                 System.out.println(address);
    25                 
    26                 //访问内部类的属性
    27                 System.out.println(name);
    28                 System.out.println(phone);
    29                 System.out.println(email);
    30                 
    31                 //访问外部类属性
    32                 System.out.println(OuterClass03.this.name);
    33                 System.out.println(OuterClass03.this.age);
    34                 
    35             }
    36         }
    37         //在外部类的方法中,调用内部类的方法
    38         Inner inner = new Inner();
    39         inner.show2();
    40     }
    41     
    42     public static void main(String[] args) {
    43         OuterClass03 oc3 = new OuterClass03();
    44         oc3.show();
    45     }
    46 }

    1.4 匿名内部类

    没有名字的内部类,一般用在接口/抽象类中。没有定义名字的局部内部类。

     1 package javabasic.internalclass;
     2 
     3 public class OuterClass04 {
     4     public static void main(String[] args) {
     5         // 1.普通调用
     6 //        USB usb = new Mouse();
     7 //        usb.service();
     8         
     9         // 2.使用局部内部类
    10 //        class Fan implements USB{
    11 //            @Override
    12 //            public void service() {
    13 //                // TODO Auto-generated method stub
    14 //                System.out.println("风扇开始工作");
    15 //            }
    16 //        }
    17 //        
    18 //        USB usb = new Fan();
    19 //        usb.service();
    20         
    21         // 3.使用匿名内部类
    22         USB usb = new USB() {
    23             @Override
    24             public void service() {
    25                 // TODO Auto-generated method stub
    26                 System.out.println("风扇开始工作");
    27             }
    28         };
    29         usb.service();
    30     }
    31 }

    2 Object类

    (1)超类、基类,所有类的直接或间接父类,位于继承树的最顶层。

    (2)任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。

    (3)Object类中所定义的方法,是所有对象都具备的方法。

    (4)Object类型可以存储任何对象

    2.1 getClass()

    返回此Object的运行时类。

    2.2 hashCode()

    返回该对象的hash值(内存地址)。

    2.3 toString()

    返回该对象的字符串表示。

    2.4 equals(Object obj)

    指示其他对象是否与此对象“相等”。

    2.5 finalize()

    当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法。

    3 包装类

    这些包装类定义在java.lang.*包里面。

    数据的实际值存储在堆中,而在栈中存储的是这个对象的引用(堆的内存地址)。

    装箱:从基本类型转换成包装类型。包装类名.valueOf()

    拆箱:从包装类型转换成基本类型。实例对象.xxxValue()

    jdk 1.5之后,可以自动装箱/拆箱,其内部调用了相应的方法。

    基本数据类型 包装类型
    byte Byte
    short Short
    int Integer
    long Long
    float Float
    double Double
    boolean Boolean
    char Character
     1 package javabasic.internalclass;
     2 
     3 public class demo01 {
     4     public static void main(String[] args) {
     5         // 1. 装箱与拆箱
     6         //装箱
     7         int a = 10;
     8         Integer A = Integer.valueOf(a);
     9         
    10         //拆箱
    11         a = A.intValue();
    12         // 在jdk 1.5 以后可以自动装箱/拆箱
    13         int b = 9;
    14         Integer B = b;//装箱
    15         b = B;//拆箱
    16         
    17         //2. 数字与字符串
    18         Integer C = 8;
    19         String SC = Integer.toString(C,10);//按十进制转为字符串
    20         System.out.println(SC);//"8"
    21         
    22         String SC2 = Integer.toOctalString(C);//将数字转为字符串,并按八进制表示
    23         System.out.println(SC2);//"10"
    24         
    25         Integer D = Integer.parseInt(SC2, 8);//将八进制表示的字符串以转为数字
    26         System.out.println(D);//8
    27         
    28         //3. Integer的缓冲区
    29         //Integer类型在调用valueOf()方法时,会判断数字是否在-128~127之间
    30         //在这个区间的数字,不会额外生成,而是从缓存中取出
    31         
    32         Integer X1 = Integer.valueOf(127);
    33         Integer X2 = 127;//自动装箱,底层会调用valueOf()方法
    34         System.out.println(X1==X2);//true
    35         
    36         Integer Y1 = Integer.valueOf(128);
    37         Integer Y2 = 128;
    38         System.out.println(Y1==Y2);//false
    39     }
    40 }

    4 String类

    字符串是常量,创建之后不可改变。

    字符串字面值存储在字符串池中,可以共享。 

    4.1 length()方法

    返回字符串的长度

    4.2 charAt(int index)

    根据下标获取字符

    4.3 contains(String str)

    判断当前字符串中是否包含str

    4.4 toCharArray()

    将字符串转换成数组

    4.5 indexOf(String str)

    查找str首次出现的下标,存在则返回下标,不存在则返回-1

    4.6lastIndexOf(String str)

    查找str最后一次出现的下标

    4.7 trim()

    去掉字符串前后的空格

    4.8 toUpperCase()/toLowerCase()

    将字符串转换为全大写/小写

    4.9 startWith(String str)/endWith(String str)

    判断字符串是否以str开始/结尾

    4.10 replace(char oldChar,char newChar)

    将旧字符替换成新字符

    4.11 split(String str)

    根据str做拆分

    4.12 intern()

    返回字符串对象的规范化表示形式

    1 String a = "a";
    2 String b = a + "b";
    3 String c = "ab";
    4 String d = new String(b);
    5 
    6 System.out.println(b == c);//false
    7 System.out.println(d == c);//false
    8 System.out.println(c == d.intern());//true
    9 System.out.println(b.intern() == d.intern());//true

    5 可变字符串

    5.1 StringBuilder

    运行效率快,线程不安全

    5.2 StringBuffer

    运行效率慢,线程安全

    6 BigDecimal

    作用:精确计算浮点数,存储在java.math包中。

    1 BigDecimal bd1 = new BigDecimal("1.0");
    2 BigDecimal bd2 = new BigDecimal("0.9");
    3 BigDecimal bd3 = bd1.subtract(bd2);
    4 System.out.println(bd3);//0.1

    7 日期时间

    7.1 Date类

     1 package javabasic.internalclass;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Date;
     5 
     6 public class DateDemo01 {
     7 
     8     public static void main(String[] args) {
     9         // 1. Date类
    10         Date d1 = new Date();
    11         System.out.println(d1);//Wed Jan 27 15:00:52 CST 2021
    12         System.out.println(d1.getTime());//1611731006864
    13         System.out.println(d1.toLocaleString());//Jan 27, 2021 3:01:29 PM
    14         
    15         Date d2 = new Date(1611731006864L);
    16     }
    17 }

    7.2 Calendar类

     1 public class Calendar01 {
     2 
     3     public static void main(String[] args) {
     4         // 1.创建Calendar对象
     5         Calendar calendar = Calendar.getInstance();
     6         System.out.println(calendar.getTime().toLocaleString());
     7         System.out.println(calendar.getTimeInMillis());
     8         
     9         //2.获取时间信息
    10         int year = calendar.get(calendar.YEAR);
    11         System.out.println(year);
    12         
    13         int month = calendar.get(calendar.MONTH);
    14         System.out.println(month);
    15         
    16         //3.修改时间
    17         Calendar calendar2 = calendar.getInstance();
    18         calendar2.set(calendar.DAY_OF_MONTH, 1);
    19         System.out.println(calendar2.getTime().toLocaleString());
    20     }
    21 }

    7.3 SimpleDateFormat类

     1 package javabasic.internalclass;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Date;
     5 
     6 public class DateDemo03 {
     7 
     8     public static void main(String[] args) {
     9         // 3.SimpleDateFormat
    10         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    11         Date d1 = new Date();
    12         String strDate = sdf.format(d1);
    13         System.out.println(strDate);//2021-01-27 15:15:53.596
    14     }
    15 }

    8 System类

    主要用于获取系统的属性和其他操作,构造方法私有的。

    8.1 System.arrayCopy()

    复制数组

    8.2 System.currentTimeMillis()

    获取时间戳

    8.3 System.gc()

    简易JVM启动垃圾回收

    8.4 System.exit(int status)

    推出jvm,参数0表示正常退出,非0表示异常退出jvm

  • 相关阅读:
    114DNS Public DNS+ 阿里DNS 百度DNS 360 DNS派 Google DNS公共DNS评测体验报告
    无需任何软件!斐讯K2 V22.x.xx.xx版本刷机教程(2016年11月更新)
    Gmail技巧之无限别名
    XP系统中,系统属性→计算机名中,网络ID是灰色的不可用状态,还有下面的“更改”按钮点进去,“隶属于”的域和工作组也是灰色不可用
    winForm窗体的close、dispose
    Taro的学习1
    react-redux的学习
    IOS 单页面状态栏文字白色,其余黑色
    IOS连续退出多个界面(回退到指定界面)
    iPhone真机调试iPhone is not available.Pleasere connect the device问题
  • 原文地址:https://www.cnblogs.com/asenyang/p/14333720.html
Copyright © 2020-2023  润新知