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

你可能感兴趣的文章
Nginx的是什么?干什么用的?
查看>>
Nginx访问控制_登陆权限的控制(http_auth_basic_module)
查看>>
nginx负载均衡和反相代理的配置
查看>>
nginx负载均衡器处理session共享的几种方法(转)
查看>>
nginx负载均衡的5种策略(转载)
查看>>
nginx负载均衡的五种算法
查看>>
nginx转发端口时与导致websocket不生效
查看>>
Nginx运维与实战(二)-Https配置
查看>>
Nginx配置Https证书
查看>>
Nginx配置ssl实现https
查看>>
Nginx配置TCP代理指南
查看>>
Nginx配置——不记录指定文件类型日志
查看>>
nginx配置一、二级域名、多域名对应(api接口、前端网站、后台管理网站)
查看>>
Nginx配置代理解决本地html进行ajax请求接口跨域问题
查看>>
nginx配置全解
查看>>
Nginx配置参数中文说明
查看>>
nginx配置域名和ip同时访问、开放多端口
查看>>
Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
查看>>
Nginx配置如何一键生成
查看>>
Nginx配置实例-负载均衡实例:平均访问多台服务器
查看>>