初始化列表

《Think in Java》

断了今生、忘了曾经 提交于 2020-01-01 02:04:15
chapter 1 对象导论 面向对象程序设计(Object-oriented Programming ,OOP) chapter 2 一切都是对象 字段和方法 若类的某个 成员变量 是基本数据类型,即是没有进行初始化,java也会确保它获得一个默认值。    局部变量 没有默认值,必须初始化。 方法、参数和返回值 static 关键字    chapter 3 操作符 import static 是导入这个类中的静态方法,然后调用静态方法就可以直接用方法名,而不用"类名.",但要注意导入的方法名有相同的调用时会报错。 java操作符   String 类支持“+”和“+=”。 优先级 关系操作符   对于引用型数据,==和!=比较的是对象的引用,基本类型数据可以直接比较值。equals()可以比较引用型数据的值,equals方法内部是将引用型数据的值转换为基本类型并用== 比较。 字符串操作符   如果表达式以一个字符串起头,那么后续所有操作数都必须是字符串型。 类型转换操作符    chapter 4 控制执行流程 逗号操作符   for循环中用到逗号操作符。 for(int i=1,j=i+10;i<5;i++,j=i*2) { System.out.println("i="+i+",j="+j); } Foreach 语法   for(float x : f){} /

Java Class类常用方法描述

左心房为你撑大大i 提交于 2019-12-29 17:55:19
一 生成Class对象的三种方式   1 Class.forName("全路径名")   2 类名.Class   3 实例对象.getClass() 接着看三种方式生成Class对象的区别 package com.shangcg.reflect; /** * * <p> * 三种方式生成Class对象的区别测试 * 说明:测试一、二、三可屏蔽代码分开进行看输出结果 * </p> */ public class ClassDemo { public static void main(String[] args) { try { /* * 测试一 测试类名.class * 输出为: * testTypeClass---class com.shangcg.reflect.AnyOneObject 没有执行构造函数没有执行静态块 */ Class<?> testTypeClass = AnyOneObject.class; System.out.println("testTypeClass---" + testTypeClass); /*测试二 测试Class.forName() * 输出为: ---静态的参数初始化--- 说明执行静态块 testForName---class com.shangcg.reflect.AnyOneObject */ Class<?>

C++之类的构造函数,不得不学明白的重点

点点圈 提交于 2019-12-29 04:50:06
一、认识构造函数 当创建一个类类型对象时,类通过一个或者几个特殊的成员函数来控制对象的初始化,这种函数就是构造函数。它的任务就是用来初始化类对象的成员的,所以当创建类对象或者类对象被创建就会调用构造函数。 构造函数的几个特点: 1.函数名和类名必须一样,没有返回值。 2.当没有显式的定义构造函数时,系统会自己生成默认的构造函数。 3.构造函数可以重载。 1 class Date 2 { 3 public: 4 Date() 5 { } 6 Date(int day) 7 { 8 _year = 1949; 9 _month = 10; 10 _day = day; 11 } 12 void print() 13 { 14 cout << _year << "-" << _month << "-" << _day << endl; 15 } 16 17 private: 18 int _year=1990; 19 int _month; 20 int _day; 21 }; 在上面的代码中,定义了一个简单的Date类类型,可以看到有显式的给出了构造函数,第一个是没有参数列表且函数不做任何事的,还有一个是有一个整型参数day的,就是当我传了一个day参数,则在函数内部把它的year和month初始化为1994和10。这样的两个构造函数就构成了重载,因为能够重载

C++之类和对象的使用(三)

本秂侑毒 提交于 2019-12-29 04:49:25
   对象数组 如果构造函数只有一个参数,在定义数组时可以直接在等号后面的花括号内提供。Student stud[3]={90,92,01};//合法 如果构造函数有多个参数,则不能用在定义时直接所提供所有实参的方法。 但可以如下定义: //构造函数有三个参数:学号,年龄,成绩 Student stud[3]{ Student(1000,19,22); Student(1001,19,22); Student(1002,19,22); };   对象指针 指向对象的指针 class Box {public: Box(int h=10,int w=10,int len=10); int s; int volume(); private: int height; int width; int length; }; Box::Box(int h,int w,int len) { height=h; width=w; length=len; } int Box::volume(){ return(height*width*length); }Box *ptr;//定义指向对象的指针Box t1;//定义Time类对象ptr=&t1;//将t1的起始地址赋给ptr 指向对象成员的指针 1)指向对象数据成员的指针 定义的一般形式为: 数据类型名 *指针变量名; int *p1; p1=&t1

Java语言与C++语言的差异总结

为君一笑 提交于 2019-12-28 19:38:43
Java的设计者曾说过,设计这门语言的灵感主要来自于C++。 世上先有C++,然后才有Java,整个Java语言的发展历史就是一部对C++的填坑史。所以在Java语言学习过程中,将其与C++语言对比是一件有意义的事情。通过这些对比,我们能够了解到Java语言相对于C++语言有哪些改进,能带给我们哪些进步,这样对于更加深入理解这两种语言是大有裨益的。 下面我总结一下Java语言与C++语言的各种差异。 1、Java用来操纵对象的引用可以先初始化再指向对象,而C++的引用必须在初始化时就指向对象。 2、Java类除static和final外其他函数定义默认是虚函数,而C++用virtual关键字定义定义函数才是虚函数。 3、Java有一套继承自object类型的单根继承结构,而C++没有标准库内置的类继承体系。 4、Java只能通过new在堆上创建对象,基本类型除外,而C++除了new还是可以创建全局对象或者栈对象。 5、Java有自带垃圾回收机制,不用关心对象的内存释放,而C++需要手动释放通过new创建的对象。 6、Java数组成员能初始化默认值null,提供未初始化的访问和越界访问保护,而C++不提供这个机制。 7、Java局部作用域定义的变量不能隐藏更大作用域定义的变量,而C++可以隐藏。 8、Java类的基本类型成员变量可以自动初始化为默认值

3.对象的创建

佐手、 提交于 2019-12-28 01:37:34
3对象的创建 文章目录 3对象的创建 对象创建过程 类加载 初始化开始时间 加载 连接-验证 文件格式验证 元数据验证 字节码验证 符号引用验证 连接-准备 解析 初始化 类加载器 类加载器的分类 对象空间分配 对象内存布局 对象初始化 对象初始化 对象创建过程 类加载 -> 对象空间分配 -> 设置对象头 -> 对象初始化 类加载 java类加载连接初始化是在程序运行期间完成的。 类的生命周期: 加载 , 验证 准备 解析 (都属于连接过程), 初始化 , 使用 , 卸载 。 解析可能在初始化之后,其他阶段可能是交叉进行的。 初始化开始时间 new , 调用静态方法 , 反射调用 , 初始化子类的时候先触发父类的初始化 , 先初始化main方法在的主类 , 使用动态语言支持时 。 注:以上为有且只有,因此例如通过子类调用父类的静态变量时不会初始化子类,只初始化父类、声明对象数组不会导致初始化,调用类中的常量也不会导致初始化。 接口初始化与类的区别:同类初始化时间相同,但当子接口初始化的时候不需要父类接口初始化。 加载 通过类的全限定名获得class文件的二进制流-》将字节流转化到方法区中-》生成一个代表此类的class对象代作为方法区这个类的各种数据的访问入口(此对象不一定存在堆中可能在方法区)。 数组类的加载不同,数组类由jvm创建不经过类加载器

3.对象的创建

谁说我不能喝 提交于 2019-12-27 18:55:04
3对象的创建 文章目录 3对象的创建 对象创建过程 类加载 初始化开始时间 加载 连接-验证 文件格式验证 元数据验证 字节码验证 符号引用验证 连接-准备 解析 初始化 类加载器 类加载器的分类 对象空间分配 对象内存布局 对象初始化 对象初始化 对象创建过程 类加载->对象空间分配->设置对象头->对象初始化 类加载 java类加载连接初始化是在程序运行期间完成的。 类的生命周期:加载,验证 准备 解析(都属于连接过程),初始化,使用,卸载。 解析可能在初始化之后,其他阶段可能是交叉进行的。 初始化开始时间 new,调用静态方法,反射调用,初始化子类的时候先触发父类的初始化,先初始化main方法在的主类,使用动态语言支持时。 注:以上为有且只有,因此例如通过子类调用父类的静态变量时不会初始化子类,只初始化父类、声明对象数组不会导致初始化,调用类中的常量也不会导致初始化。 接口初始化与类的区别:同类初始化时间相同,但当子接口初始化的时候不需要父类接口初始化。 加载 通过类的全限定名获得class文件的二进制流-》将字节流转化到方法区中-》生成一个代表此类的class对象代作为方法区这个类的各种数据的访问入口(此对象不一定存在堆中可能在方法区)。 数组类的加载不同,数组类由jvm创建不经过类加载器,如果数组里存储的是引用类型则调用此引用类的加载过程

值类型和引用类型

こ雲淡風輕ζ 提交于 2019-12-27 14:05:34
值类型和引用类型 值类型 值类型这个概念经常出现在类似C#,JAVA等编程语言的书籍中."值类型"直接将内存存储在栈内,由系统自动释放资源的数据类型. 与值类型相对应的有引用类型.C#语言中还对应指针类型. 值类型编辑 每一种编程语言的值类型都有一些非常细小的不同.下文所指的内容仅仅是.NET框架中C#编程语言的值类型定义. 整体来说C#的值类型有: [1] 整型:Int; 长整型:long; 浮点型:float; 字符型:char; 布尔型:bool 枚举:enum 结构:struct 在C#中所有的值类型都继承自:System.ValueType 主要功能编辑 基于值类型的变量直接包含值。 [2] 将一个值类型变量赋给另一个值类型变量时,将复制包含的值。这与引用类型变量的赋值不同,引用类型变量的赋值只复制对对象的引用,而不复制对象本身。 所有的值类型均隐式派生自SystemValueType。 与引用类型不同,不能从值类型派生出新的类型。但与引用类型相同的是,结构也可以实现接口。 与引用类型不同,值类型无法包含null值。但是,可以为 null 的类型功能允许值类型分配给null。 每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。 中值类型编辑 在使用 C# 中的局部变量之前,必须对其进行初始化。 [3] int myInt; 那么在将其初始化之前,无法使用此变量

C++有哪几种情况只能用初始化列表,而不能用赋值?

主宰稳场 提交于 2019-12-23 15:57:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> C++有哪几种情况只能用初始化列表,而不能用赋值? (1)对于const和reference类型成员变量,它们只能够被初始化而不能做赋值操作,因此只能用初始化列表; 初始化与赋值是不同的: 赋值是删除原值,赋予新值, 构造函数 的意思是先开辟空间然后为其赋值, 只能算是赋值 , 不算初始化; 初始化列表就不一样了,开辟空间和初始化是同时完成的,直接给予一个值; 常量不能被赋值,只能被初始化,所以必须在初始化列表中完成; C++的引用也一定要初始化,所以必须在初始化列表中完成。 【 1) 引用必须被初始化,指针不必; 2) 引用初始化以后不能被改变,指针可以改变所指的对象; 3) 不存在指向空值的引用,但是存在指向空值的指针。 】 上面这一段摘自: http://blog.csdn.net/yuliu0552/article/details/6631509 另外,子类在初始化自己时,如果父类没有默认的构造函数那么也必须用初始话列表进行初始化,在列表里调用父类的构造函数。 来源: oschina 链接: https://my.oschina.net/u/138210/blog/126727

C++ 类构造函数初始化列表

心已入冬 提交于 2019-12-23 15:14:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。例如: class CExample { public: int a; float b; //构造函数初始化列表 CExample(): a(0),b(8.8) {} //构造函数内部赋值 CExample() { a=0; b=8.8; } }; 上面的例子中两个构造函数的结果是一样的。上面的构造函数(使用初始化列表的构造函数)显式的初始化类的成员;而没使用初始化列表的构造函数是对类的成员赋值,并没有进行显式的初始化。 初始化和赋值对内置类型的成员没有什么大的区别,像上面的任一个构造函数都可以。对非内置类型成员变量,为了避免两次构造,推荐使用类构造函数初始化列表。但有的时候必须用带有初始化列表的构造函数: 1.成员类型是 没有默认构造函数的类 。若没有提供显示初始化式,则编译器隐式使用成员类型的默认构造函数,若类没有默认构造函数,则编译器尝试使用默认构造函数将会失败。 2. const 成员 或 引用类型 的成员。因为 const 对象或引用类型只能初始化,不能对他们赋值。 初始化数据成员与对数据成员赋值的含义是什么?有什么区别? 首先把数据成员按类型分类并分情况说明: 1. 内置数据类型,复合类型