- 浏览: 515220 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 1434从JDK1.5开始,Java提供了一个更简单的循环:forea ... -
可变参数
2013-06-24 15:38 1193从JDK1.5开始,Java允许使用可变参数为方法指定数量不确 ... -
泛型(core java 笔记)
2013-06-18 16:18 20211.为什么引入泛型 package generic; ... -
两个程序的说明
2010-10-19 09:26 11301、程序1的结果是: clas ... -
构造器初始化
2010-10-18 14:42 1478可以用构造器来进行初始化。在运行时刻,可以调用方法或执行某些动 ... -
线程的死锁
2010-10-11 19:21 1466当两个线程相互等待对方释放同步监视器时就会发生死锁,Java虚 ... -
线程的同步
2010-10-11 19:00 1246一个经典的关于线程安全性的问题:银行取钱问题。 银行取钱的基 ... -
java网站收集
2010-10-10 18:13 1228JAVA开发者最常去的25个英文网站:http://www.i ... -
控制线程
2010-10-10 16:06 19871、线程睡眠:sleep 如果我们需要让当前正在执行的线程暂 ... -
线程的状态
2010-09-28 19:00 1001线程从创建到执行完毕的整个过程称为线程的生命周期,在整个生命周 ... -
Java中Thread类的start()和run()的区别
2010-09-27 15:33 40781、start()方法来启动线程,真正实现了多线程运行,这时无 ... -
Java中创建线程的两种方法
2010-09-26 10:18 5610在Java中创建线程有两种方法:继承Thread类和实现Run ... -
创建String对象过程的内存分配小结
2010-09-23 20:32 2746常量池(Constant Pool):指的是在编译期被确定,并 ... -
Java堆和栈的区别 经典总结(转载)
2010-09-18 16:48 1240栈与堆都是Java用来在Ram中存放数据的地方。 与C++不 ... -
Java初学者都必须理解的七大问题
2010-09-18 10:36 1098问题一:我声明了什么 ... -
关于计算java程序运行时间(转载)
2010-09-18 09:22 1092//第一种,伪代码 long startTime= ... -
for循环的优化
2010-09-17 20:29 2109在程序中经常用到for循环,当一些算法实时性要求非常高时,对f ... -
详细解析Java中抽象类和接口的区别(转载)
2010-09-17 10:16 1076在Java语言中,abstract class和inter ... -
集合类(四):Map集合
2010-09-16 20:26 21215、Map集合 Map集合为映射类型,映射与集和列表有明显的区 ... -
集合类(三):Set集合
2010-09-16 19:43 28724、Set集合 Set集合为集类型,集是最简单的一种集合,存放 ...
相关推荐
C++类成员和数据成员初始化总结 C++为类中提供类成员的初始化列表 类对象的构造顺序是这样的: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员 2.进入构造函数后在构造函数中执行一般计算 1.类...
C++中成员初始化列表的使用 <br>适合初学者
C++ Primer中在讲构造函数初始化列表的时候有这么一段话:无论是在构造函数初始化列表中初始化成员,还是在构造函数体中对它们赋值,最终结果是相同的。不同之处在于,使用构造函数初始化列表的版本初始化数据成员,...
2.3命名返回值优化和成员初始化队列共3页.pdf.zip
本文档详细介绍了Java 成员初始化要注意的两种不同的情况,并对初始化的相关内容进行了一定的说明。希望能帮助到某些同学!
下面小编就为大家带来一篇关于C++类的成员初始化列表的相关问题。小编觉得挺
java 数组初始化 详解 doc
关于“C++构造函数初始化列表 ”的实例分析
通常静态数据成员在类声明中声明,在包含类方法的文件中初始化.初始化时使用作用域操作符来指出静态成员所属的类.但如果静态成员是整型或是枚举型const,则可以在类声明中初始化
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
今天小编就为大家分享一篇Java关于含有继承类的成员初始化过程讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
这里直接给出C#类成员一般初始化顺序: 子类静态字段 子类静态构造 子类实例字段 父类静态字段 父类静态构造 父类实例字段 父类实例构造 子类实例构造 为什么说是“一般”初始化顺序呢?因为根据类结构的...
掌握C++初始化成员列表的相关用法,一般初学者对类的初始化列表总是很陌生.
了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识。不说太多,直接看下面的例子 class Father { static{ System. out.println("父类静态代码块初始化" ); } { System. out.println...
无论是类成员(静态变量)合适实例变量,我们都应该充分利用初始化器的语法。 C#编程在,一般在声明一个变量的同时我们会对其进行初始化: 代码如下:1 class Employee 2 { 3 private List<Employee> empList = new ...
这是我获得的java的代码,这个主要关于成员的初始化顺序和多态性,这个代码主要用于学习和交流,希望大家喜欢。