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

你可能感兴趣的文章
ProcessOnLoading
查看>>
SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成
查看>>
PROFINET 模拟器使用教程
查看>>
Program type already present: android.support.v4.widget.EdgeEffectCompat
查看>>
PyTorch中文版官方教程来啦(附下载)
查看>>
Progress Kemp LoadMaster 远程命令执行漏洞复现(CVE-2024-1212)
查看>>
Project configuration is not up-to-date with pom.xml. Run Maven->Update Project
查看>>
Project Euler 15 Lattice paths
查看>>
Project Euler 48 Self powers( 大数求余 )
查看>>
Project Euler Problem 12: Highly divisible triangular number
查看>>
ProjectEuler 2
查看>>
projection介绍及EPSG:4326和EPSG:3857的投射转换
查看>>
project打开文件时,显示无法识别此文件格式?
查看>>
Prometheus + Grafana on Kubernetes部署
查看>>
prometheus + grafana进行服务器资源监控
查看>>
Prometheus Alertmanager 告警配置详解
查看>>
Prometheus Grafana 展示平台
查看>>
Prometheus pushgateway使用详解
查看>>
Prometheus 云原生 - Prometheus 数据模型、Metrics 指标类型、Exporter 相关
查看>>
Prometheus 云原生 - 基于 file_sd、http_sd 实现 Service Discovery
查看>>