博客
关于我
6.3 初始化和清理(成员初始化)
阅读量:262 次
发布时间:2019-03-01

本文共 2842 字,大约阅读时间需要 9 分钟。

Java成员初始化与数组操作详解

一、成员初始化

在Java编程中,变量的初始化是保证程序正常运行的重要环节。类的成员变量如果没有被显式初始化,会根据数据类型自动获得默认值。这种默认初始化机制避免了未初始化变量可能带来的运行时错误。

1.1 指定初始化

为了提供更大的灵活性,开发者可以在定义类成员变量时直接指定初始值。例如,可以通过在字段声明时赋值来实现:

public class InitialValues2 {    boolean bool = true;    char ch = 'x';    byte b = 47;    short s = 0xff;    int i = 999;    long lng = 1;    float f = 3.14f;    double d = 3.14159;}

此外,可以通过构造器或静态初始化块来初始化对象引用。例如:

public class Measurement {    Depth d = new Depth();}

1.2 构造器初始化

构造器提供了更大的灵活性,可以用于初始化对象的成员变量。例如:

public class Counter {    int i;    Counter() {        i = 7;    }}

需要注意的是,构造器执行之前,自动初始化已经完成,因此构造器中的初始化操作是安全的。

1.3 初始化顺序

类中变量的初始化顺序由其定义顺序决定。即使变量定义散布在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化。例如:

public class OrderOfInitialization {    public static void main(String[] args) {        House h = new House();        h.f();    }}

1.4 静态数据的初始化

静态数据只在类加载时初始化一次,无论创建多少对象。例如:

public class StaticInitialization {    static Table table = new Table();    static Cupboard cupboard = new Cupboard();}

1.5 显式的静态初始化

可以通过静态块或显式语法来初始化静态数据。例如:

public class Spoon {    static int i;    static {        i = 47;    }}

1.6 非静态实例初始化

可以使用实例初始化子句来初始化对象的非静态变量。例如:

public class Mugs {    Mug mug1;    Mug mug2;    {        mug1 = new Mug(1);        mug2 = new Mug(2);        System.out.println("mug1 & mug2 initialized");    }}

二、数组操作

数组是Java中的核心数据结构,支持动态创建和初始化。以下是数组操作的详细说明。

2.1 动态数组创建

可以使用 new 运算符在程序运行时动态创建数组:

public class ArrayNew {    public static void main(String[] args) {        int[] a = new int[20];        System.out.println(Arrays.toString(a));    }}

2.2 可变参数列表

Java支持可变参数列表,使方法可以接受任意数量的参数。例如:

public class VarArgs {    static void printArray(Object... args) {        for (Object obj : args) {            System.out.print(obj + " ");        }        System.out.println();    }    public static void main(String[] args) {        printArray(47, 3.14, 11.11);        printArray("one", "two", "three");    }}

2.3 自动装箱与拆箱

Java自动处理基本类型与对象类型之间的转换。例如:

public class AutoboxingVarargs {    public static void main(String[] args) {        f(1, 2);        f(4, 5, 6, 7, 8, 9);        f(10, 11, 12);    }    static void f(Integer... args) {        for (Integer i : args) {            System.out.print(i + " ");        }        System.out.println();    }}

2.4 方法重载与可变参数

可变参数列表与方法重载结合使用时,需要注意参数类型的唯一性。例如:

public class OverloadingVarargs {    static void f(float i, Character... args) {        System.out.println("first");        for (Character c : args) {            System.out.print(" " + c);        }        System.out.println();    }    static void f(Integer... args) {        System.out.println("second");        for (Integer i : args) {            System.out.print(" " + i);        }        System.out.println();    }    public static void main(String[] args) {        f('a', 'b', 'c');        f(1);        f(2, 1);        f(0);        f(0L);    }}

通过以上内容,可以全面了解Java成员初始化与数组操作的关键知识点。

转载地址:http://yntx.baihongyu.com/

你可能感兴趣的文章
OSPF技术连载8:OSPF认证:明文认证、MD5认证和SHA-HMAC验证
查看>>
OSPF故障排除技巧
查看>>
OSPF的七种类型LSA
查看>>
OSPRay 开源项目教程
查看>>
OS模块
查看>>
OS第3章 —— 进程调度和死锁
查看>>
overlay(VLAN,VxLAN)、underlay网络、大二层概述
查看>>
OWASP漏洞原理<最基础的数据库 第二课>
查看>>
OWL本体语言
查看>>
P with Spacy:自定义文本分类管道
查看>>
P1364 医院设置
查看>>
P2260 [清华集训2012]模积和
查看>>
SpringBoot中集成influxdb-java实现连接并操作Windows上安装配置的influxDB(时序数据库)
查看>>
Padding
查看>>
paddlehub安装及对口罩检测
查看>>
SpringBoot中集成Actuator实现监控系统运行状态
查看>>
paddle的两阶段基础算法基础
查看>>
Page Object模式:为什么它是Web自动化测试的必备工具
查看>>
SpringBoot中重写addCorsMapping解决跨域以及提示list them explicitly or consider using “allowedOriginPatterns“ in
查看>>
PageHelper 解析及实现原理
查看>>