- 浏览: 525302 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (114)
- C基础 (1)
- C指针 (0)
- C语言库函数相关 (1)
- Linux (2)
- Linux网络编程 (1)
- PostgreSQL (0)
- Redis (2)
- Java Web (2)
- JAVA基础 (35)
- Ubuntu (8)
- Android (2)
- MySQL (3)
- 日志 (1)
- 书虫 (1)
- 数据结构 (0)
- 算法 (0)
- 开发工具 (1)
- 转载 (13)
- 英语 (18)
- tomcat启动脚本分析 (3)
- Oracle基础 (4)
- tomcat源码分析 (3)
- tomcat (1)
- Java相关 (1)
- Oracle基本原理--Oracle体系结构 (0)
- Oracle基本原理--表 (0)
- Oracle基本原理--索引 (0)
- Oracle基本原理--事务 (0)
- Oracle开发--SQL (1)
- Oracle基本原理--PL/SQL (0)
- Oracle基本原理--常用函数 (0)
- Oralce管理--用户及权限管理 (0)
- Oracle管理--安装调试 (0)
- Oracle管理--备份恢复 (0)
- Oralce管理--数据迁移 (0)
- Oracle管理--闪回 (0)
- Oracle管理--故障处理 (0)
- Oracle优化原理--统计信息 (0)
- Oracle优化原理--执行计划 (0)
- Oracle优化原理--诊断工具 (0)
- Oracle优化原理--深入理解表 (0)
- Oracle优化原理--深入理解索引 (0)
- Oracle优化原理--表连接原理 (0)
- Java--OOP (0)
- Java--异常 (0)
- Java--泛型 (0)
- Java--集合 (0)
- Java--IO (0)
- Java--枚举类型 (0)
- Java--注释 (0)
- Java--多线程 (0)
- Java--XML (0)
- Java--JDBC (3)
- Servlet (0)
- JSP (0)
- JSTL (0)
- 设计模式 (0)
- DAO与MVC (0)
- Javascript (2)
- Ajax (0)
- JQuery (0)
- HTML/CSS (0)
- 前端相关 (1)
- HTTP (0)
- TCP/IP (0)
- GO基础 (0)
最新评论
-
jsonmong:
推荐一个开发平台,采用的是插件化的设计思想,效果很不错的。ht ...
构建Java Web开发环境 -
wxm198427:
首先表示辛苦了!我想问个问题:我的是windows 7 x64 ...
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤 -
握着橄榄枝的人:
我之前按照你的update mysql.user set pa ...
Windows7下MySQL5.5.20免安装版的配置 -
confident_f:
安装了32的客户端后,用plsql导入导出表有问题,生成不了d ...
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤 -
confident_f:
安装数据库的时候第9步卡住了 是怎么回事呢?
Oracle 11g R2 for Win7旗舰版(64位)的安装步骤
Java尽力保证:所有变量在使用前都能得到恰当的初始化。
对于定义在方法内部的局部变量,Java以编译时错误的形式来贯彻这种保证。例如:
该段代码会得到一条出错消息,告诉你i可能尚未初始化。当然,编译器也可以为i赋一个默认值,但是未初始化的局部变量更有可能是程序员的疏忽,所以采用默认值反而会掩盖这种失误。所以强制程序员提供一个初始值,往往能够帮助找出程序里的bug。
对于类的数据成员是基本数据类型,情况会变得不同。因为类中的任何方法都可以初始化或用到这些数据成员,所以强制用户一定要在使用数据前将其初始化成一个适当的值并不现实。然而,任其含有无意义的值同样也是不安全的。因此,类的每一个基本数据类型的数据成员保证都会有一个初始值。
例如:
程序运行结果如下:
可见尽管类中的数据成员的初值没有给出,但它们确实有初值(char的初值为0,所以显示为空白)。这样至少不会冒“未初始化变量”的风险了。
在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。
1、指定初始化
如果想为某个变量赋初值,该怎么做呢?有一种很直接的办法,就是在定义类的成员变量的地方为其赋值。以下代码片段修改了InitialValues类成员变量的定义,直接提供了初值。
也可以用同样的方法初始化非基本数据类型的对象,如果Depth是一个类,那么可以像下面这样创建一个对象并初始化它:
如果没有为d指定初始值就尝试使用它,就会出现运行时错误,告诉你产生了一个“异常”。
甚至可以通过调用某个方法来提供初值:
这个方法也可以带有参数,但这些参数必须是已经被初始化了的。因此,可以这样写:
但是像下面这样写就不对了:
显然,上述程序的正确性取决于初始化的顺序,而与其编译方式无关。所以,编译器恰当地对“向前引用”发出了警告。
这种初始化方法既简单又直观。但有个限制:类InitialValues的每个对象都会具有相同的初值。有时,这正是所希望的,但有时却需要更大的灵活性。
对于定义在方法内部的局部变量,Java以编译时错误的形式来贯彻这种保证。例如:
void f(){ int i; i++;//Error--i not initialized }
该段代码会得到一条出错消息,告诉你i可能尚未初始化。当然,编译器也可以为i赋一个默认值,但是未初始化的局部变量更有可能是程序员的疏忽,所以采用默认值反而会掩盖这种失误。所以强制程序员提供一个初始值,往往能够帮助找出程序里的bug。
对于类的数据成员是基本数据类型,情况会变得不同。因为类中的任何方法都可以初始化或用到这些数据成员,所以强制用户一定要在使用数据前将其初始化成一个适当的值并不现实。然而,任其含有无意义的值同样也是不安全的。因此,类的每一个基本数据类型的数据成员保证都会有一个初始值。
例如:
public class InitialValues{ boolean t; char c; byte b; short s; int i; long l; float f; double d; void print(String s){ System.out.println(s); } void printInitialValues(){ print("Data Type Intial value"); print("boolean "+t); print("char ["+c+"]"); print("byte "+b); print("short "+s); print("int "+i); print("long "+l); print("float "+f); print("double "+d); } public static void main(String args[]){ InitialValues iv = new InitialValues(); iv.printInitialValues(); } }
程序运行结果如下:

可见尽管类中的数据成员的初值没有给出,但它们确实有初值(char的初值为0,所以显示为空白)。这样至少不会冒“未初始化变量”的风险了。
在类里定义一个对象引用时,如果不将其初始化,此引用就会获得一个特殊值null。
1、指定初始化
如果想为某个变量赋初值,该怎么做呢?有一种很直接的办法,就是在定义类的成员变量的地方为其赋值。以下代码片段修改了InitialValues类成员变量的定义,直接提供了初值。
public class InitialValues{ boolean t = true; char c = 'x'; byte b = 47; short s = 0xff; int i = 999; long l = 1; float f = 3.14f; double d = 3.14159; //…… }
也可以用同样的方法初始化非基本数据类型的对象,如果Depth是一个类,那么可以像下面这样创建一个对象并初始化它:
classs Depth{} public class Measurement{ Depth d = new Depth(); //...... }
如果没有为d指定初始值就尝试使用它,就会出现运行时错误,告诉你产生了一个“异常”。
甚至可以通过调用某个方法来提供初值:
public class MethodInit{ int i = f(); int f(){return 11;} }
这个方法也可以带有参数,但这些参数必须是已经被初始化了的。因此,可以这样写:
public class MethodInit2{ int i = f(); int j = g(i); int f(){return 11;} int g(int n){return n*10;} }
但是像下面这样写就不对了:
public class MethodInit3{ //! int j = g(i);//Illegal forward reference int i = f(); int f(){return 11;} int g(int n){return n*10;} }
显然,上述程序的正确性取决于初始化的顺序,而与其编译方式无关。所以,编译器恰当地对“向前引用”发出了警告。
这种初始化方法既简单又直观。但有个限制:类InitialValues的每个对象都会具有相同的初值。有时,这正是所希望的,但有时却需要更大的灵活性。
发表评论
-
foreach循环
2013-06-24 16:15 1506从JDK1.5开始,Java提供了一个更简单的循环:forea ... -
可变参数
2013-06-24 15:38 1235从JDK1.5开始,Java允许使用可变参数为方法指定数量不确 ... -
泛型(core java 笔记)
2013-06-18 16:18 20861.为什么引入泛型 package generic; ... -
两个程序的说明
2010-10-19 09:26 11821、程序1的结果是: clas ... -
构造器初始化
2010-10-18 14:42 1556可以用构造器来进行初始化。在运行时刻,可以调用方法或执行某些动 ... -
线程的死锁
2010-10-11 19:21 1545当两个线程相互等待对方释放同步监视器时就会发生死锁,Java虚 ... -
线程的同步
2010-10-11 19:00 1310一个经典的关于线程安全性的问题:银行取钱问题。 银行取钱的基 ... -
java网站收集
2010-10-10 18:13 1305JAVA开发者最常去的25个英文网站:http://www.i ... -
控制线程
2010-10-10 16:06 20381、线程睡眠:sleep 如果我们需要让当前正在执行的线程暂 ... -
线程的状态
2010-09-28 19:00 1098线程从创建到执行完毕的整个过程称为线程的生命周期,在整个生命周 ... -
Java中Thread类的start()和run()的区别
2010-09-27 15:33 41581、start()方法来启动线程,真正实现了多线程运行,这时无 ... -
Java中创建线程的两种方法
2010-09-26 10:18 5662在Java中创建线程有两种方法:继承Thread类和实现Run ... -
创建String对象过程的内存分配小结
2010-09-23 20:32 2810常量池(Constant Pool):指的是在编译期被确定,并 ... -
Java堆和栈的区别 经典总结(转载)
2010-09-18 16:48 1307栈与堆都是Java用来在Ram中存放数据的地方。 与C++不 ... -
Java初学者都必须理解的七大问题
2010-09-18 10:36 1144问题一:我声明了什么 ... -
关于计算java程序运行时间(转载)
2010-09-18 09:22 1152//第一种,伪代码 long startTime= ... -
for循环的优化
2010-09-17 20:29 2174在程序中经常用到for循环,当一些算法实时性要求非常高时,对f ... -
详细解析Java中抽象类和接口的区别(转载)
2010-09-17 10:16 1139在Java语言中,abstract class和inter ... -
集合类(四):Map集合
2010-09-16 20:26 21695、Map集合 Map集合为映射类型,映射与集和列表有明显的区 ... -
集合类(三):Set集合
2010-09-16 19:43 29504、Set集合 Set集合为集类型,集是最简单的一种集合,存放 ...
相关推荐
总结来说,C++中的类成员和数据成员初始化是一个严谨的过程,需要理解构造函数的机制,以及`const`、`static`和数组的特殊性。正确初始化成员可以确保对象的有效性和代码的健壮性。遵循这些规则,可以帮助我们编写出...
### C++中成员初始化列表的使用 在C++编程中,成员初始化列表是一个非常重要的概念,尤其是在类的设计和实现过程中。本文将详细解释成员初始化列表的概念、用途以及它与传统构造函数内初始化的区别,并通过具体示例...
本话题主要探讨了两个关键概念:命名返回值优化(NRVO)和成员初始化队列。这两个特性都是为了提高程序的性能和代码的清晰度。 首先,让我们深入理解命名返回值优化(NRVO)。NRVO是一种编译器优化技术,它减少了...
在Java编程语言中,成员初始化是创建对象时为类的实例变量赋予初始值的过程。本文将详细探讨Java成员初始化的两种不同情况,以及与之相关的基础知识。 首先,我们来看第一种情况:类内的变量初始化。当声明一个类的...
C++类的成员初始化列表是构造函数中一种特殊的形式,用于在对象实例化时直接对类的成员变量进行初始化。这种列表在特定情况下是必要的,因为它可以提高代码的效率并确保正确的初始化顺序。 首先,成员初始化列表在...
总之,C++类的静态成员初始化需要根据其类型和const属性来确定初始化的位置。整型和枚举型const静态成员可以直接在类声明中初始化,而其他类型的静态成员则需要在类声明之外初始化,并使用作用域解析运算符指定所属...
C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,...
2. **const成员变量的强制初始化**:对于声明为const的成员变量,必须在构造函数初始化列表中进行初始化,因为在构造函数体内不允许修改const成员变量。 3. **效率与安全性的提升**:直接初始化比赋值更高效,尤其是...
Java关于含有继承类的成员初始化过程讲解 titre1:Java中的继承类成员初始化过程 在Java中,继承类的成员初始化过程是一个复杂且容易让人困惑的地方。今天,我们将通过一个具体的实例来讲解这个过程,以帮助读者...
Java 数组初始化详解 Java 数组初始化是 Java 编程语言中的一种基本概念,它允许开发者创建和初始化数组,以便于存储和操作数据。在本文中,我们将对 Java 数组初始化进行详细的介绍,包括一维数组和二维数组的声明...
Java类成员初始化顺序详解 Java类成员初始化顺序是Java编程中一个非常重要的概念,它直接关系到Java类的实例化和成员变量的初始化顺序。下面我们将通过详细的示例代码来介绍Java类成员初始化顺序。 首先,Java类中...
##### 步骤一:成员初始化顺序 成员变量的初始化顺序遵循以下规则: 1. **实例变量的初始化**:按照它们在类中出现的顺序进行初始化。 2. **构造函数中的初始化**:在构造函数内部,可以显式初始化成员变量,这...
2. **子类静态成员初始化**:随后是子类中的静态成员初始化。 3. **基类非静态成员初始化**:当创建一个子类对象时,会首先调用基类的构造函数来初始化基类的非静态成员变量。 4. **子类非静态成员初始化**:接着是...
1. 类里的 const 成员初始化 在一个类里,const 成员变量不能在类定义中赋初值,因为编译器不知道 const 的内容是什么,所以不能把它用作编译期间的常量。因此,const 成员变量必须在构造函数中初始化,而不可以在...
初始化结构体时,通常有两种方式:构造函数初始化(如果结构体是类)和成员初始化列表。由于 `struct` 在C++中等同于类,但不支持构造函数,所以我们必须使用成员初始化列表。例如,对于 `PhotoInfo` 结构体,其初始...
这个问题涉及到C++的构造函数和成员初始化列表。 在C++中,当创建一个类的对象时,构造函数会被调用。在构造函数的成员初始化列表中,成员变量的初始化顺序并不是由它们在初始化列表中出现的顺序决定的,而是由它们...
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
这里直接给出C#类成员一般初始化顺序: 子类静态字段 子类静态构造 子类实例字段 父类静态字段 父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是“一般”初始化顺序呢?因为根据类结构的...
因此,推荐使用成员初始化器而非赋值语句,这一做法可以显著简化构造函数的编写,同时确保成员变量在构造过程中得到正确且一致的初始化。 成员初始化器是在变量声明的时候就对成员变量进行初始化的语法结构。这不仅...