博客
关于我
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/

你可能感兴趣的文章
pytorch tensor灰度图和RGB图相互转换的三种方法
查看>>
pyinstaller 打包资源文件
查看>>
PyInstaller 构建的 Windows EXE 因多处理而失败
查看>>
Pyinstaller--Windowed或--noconsole.exe不允许打开chromedriver
查看>>
Pyinstaller依赖项的许可证
查看>>
PyInstaller可执行文件找不到包含的flASK-COMPRESS
查看>>
Pyinstaller和海运
查看>>
PyInstaller图标选项在Mac上不起作用
查看>>
pyinstaller的使用
查看>>
pyinstaller超级加密 (加壳和转c)
查看>>
pyinstaller错误:OSError:找不到Python库:libpython3.4mu.so.1.0、libpython3.4m.so.1.0、libpython3.4.so.1.0
查看>>
Pyinstaller:‘;Fiona‘;没有属性‘;_loading‘;(很可能是由于循环导入)
查看>>
pyinstaller:更改应用程序图标
查看>>
Pylint“未解决的导入“;Visual Studio 代码中的错误
查看>>
pyLoad远程代码执行漏洞复现(CVE-2023-0297)
查看>>
pymongo update_one(),upsert=True,不使用$运算符
查看>>
pymongo 中的快速或批量更新
查看>>
pymongo删除操作
查看>>
PyMongo按多个关键点分组
查看>>
Pympress:强大的双屏PDF阅读器
查看>>