MSDN是很好,不过,有时需要自己动手实践一下,才能更好的理解和记住一些东西. 我看过很多技术文章,结果到用时,仍然是下不了手.似是而非的. 像上次写的“四舍六入五成双/四舍六入五留双/四舍六入五单双”一样,光看MSDN,还是不清楚,直接写一个小例子,就明白了. 这次,搜了一下“基类 派生类 转换”,结果看了,也是不清不楚,不明白. 于是写了一个例子,试一下,就解惑了.不过具体的原理还不清楚,如果有知其所以然的朋友,不吝赐教. 为了让更多和我一样,还在学习过程中的朋友能省时间,在此献丑了,如果你…
/* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ import static java.lang.System.out; public class PersonDemo { public static void main(String[] args) { //*********测试父类与子类之间的循环调用的问题 out.println("main1&quo…
执行顺序:父类静态块-->子类静态块-->父类非静态块-->父类构造方法-->子类非静态块-->子类构造方法 当父类或子类中有多个静态方法时按在代码中的顺序执行 package day1015; /** * @author donleo * date 2019-10-15 * code 代码执行顺序 */ public class Father { static { System.out.println("Father中静态代码块一"); } static…
顺序 1. 父类中静态成员变量和静态代码块 2. 子类中静态成员变量和静态代码块 3. 父类中普通成员变量和代码块,父类的构造函数 4. 子类中普通成员变量和代码块,子类的构造函数 其中“和”字两端的按照代码先后顺序执行. 举例 先看代码: Father类 public class Father { public String fStr1 = "father1"; protected String fStr2 = "father2"; private String …
父类有无参构造函数时(显示或隐式),子类的有参和无参构造函数都是默认调用父类的无参构造函数:当父类只有有参构造函数时,子类可以有有参和无参构造函数,子类有参构造函数必须显式调用父类的有参构造函数,子类无参构造函数也必须显式调用父类的有参构造函数,但需给父类有参构造函数赋实参.…
之前徒弟问了一个问题, 在Java中, 父类对象到底能不能转换成对应的子类对象? 到底能不能, 今天就来说说这个问题, 先看下面一段代码: package cn.com.hanbinit.test; /** * 检验父类是否可以强转为子类 * @author icer * */ public class ConvertPro extends Father { public static void main(String[] args) { Father father = new Father()…
在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换.因为子类拥有比父类更多的属性.更强的功能,所以父类转换为子类需要强制.那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的. 当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了.在Java中我们可以通过…
在平时开发中,经常遇上强制转换,在这过程中经常遇上null对象转换为值类型,如果不判断的情况下在编译的时候不会出错,但程序一运行就抛出错误.好在C#为我们提供了is ,它判断一个对象如果成立就转换,如果不成立就返回null. 下面是具体的一个例子运用. public partial class Org        {            public string OrgID { get; set; }            public string OrgName { get; set;…
 托管和非托管资源 1.托管资源是指GC管理的内存空间,非托管资源是指文件句柄,网络连接,数据库连接等. 2.方法中临时申请的变量,被存放在栈中.栈存储非对象成员的值数据.例如在方法中有B b=new B(); b的值在栈中,new B()的数据在堆中,相当于指针与目标数据的关系. 3.GC工作的主要方式是将不被引用的内存进行释放,然后进行数据移动,从而使得被引用的内存空间总是连接成片的.例如某个对象的位置被移动后,new B()的结果的实例的数据被移动,那么b的值也会变动,从而始终指向new…
近日,在项目的一个类中如果碰上想要将子类强制转换成父类,然后再调用其父类版本的virtual虚函数. 就会出现gcc编译错误提示:error: ld returned 1 exit status gcc提示原因:在link过程中,发现了无法找到的reference symbol, 该reference symbol是此父类的拷贝构造函数. 由此,我推断问题的原因是:在子类转换成父类的过程中,默认地调用了父类的拷贝构造函数.而由于项目中针对大部分类都使用了DISALLOW_COPY_AND_ASS…
import static java.lang.System.*; public class SuperParent{ public static void main(String[] args){ Parent2 p2=new Parent2(); //-因为变量str在Parent2中是private修饰,虽然覆写了Parent1中的str,但是隐藏起来,这样访问调用会报错 //out.println(p2.str); //-虽然Parent2中的覆写变量str已经隐藏起来,但可以通过强制转…
最近,微信群友在讨论子类父类的转换问题,其实不难,给大家用实例来说明一下就很明了了. 我们知道Java中子类转换成父类是没有任何问题的,那父类可以转换成子类吗? 来看下面这段程序: public class TestObjectConvert { public static void main(String[] args) { test1(); test2(); } private static void test1() { Fruit fruit1 = new Fruit(); Apple a…
目录 定义 要点: 子类转父类 父类转子类 定义 A是B的子类,A比B多几条属性 要点: A是B的子类,但List<A>不是List<B>的子类.所以想直接转换是不行的. 子类转父类 List<A> childList = getxxxxxx; List<B> dadList = new ArrayList<B>(); for(A a : childList){ dadList.add(a); //依次加到父类List里 } 父类转子类 List…
c++中的强制转换static_cast.dynamic_cast.reinterpret_cast的不同用法儿   虽然const_cast是用来去除变量的const限定,但是static_cast却不是用来去除变量的static引用.其实这是很容易理解的,static决定的是一个变量的作用域和生命周期,比如:在一个文件中将变量定义为static,则说明这个变量只能在本Package中使用:在方法中定义一个static变量,该变量在程序开始存在直到程序结束:类中定义一个static成员,该成员…
#include <iostream> using namespace std; class Father { public: virtual void show() { cout<<"this is Father"<<endl; } }; class Son:public Father { public: virtual void show() { cout<<"this is Son"<<endl; }…
一.C语言的强制转换1.1 隐性转换 不同数据类型之间赋值和运算,函数调用传递参数等等,由编译器完成        int        nTmp = 10;        short    sTmp = nTmp; //这个时候就需要注意转换时数据是否溢出(大字节转小字节)1.2 显性转换 在变量的前面加上(Type)进行显性转换,如:        class Test;        Test *test;        T* obj = (T*)test;//将对象强制转换成T二.C++…
强制转换中分为两种,第一种就只临时转换,和永久转换.在临时转换中呢,首先可以通过第一中方式来显示,就是小括号的形式,临时转换成整型我们可以通过(int)都是这样的形式,或者是(integer)临时转换成整型,再往下再来看,临时转成浮点类型可以通过(float)或者是(double)或者是(rea!)临时转换成浮点类型,第三个临时转换成布尔类型,可以通过(boolean)或者你可以试验一下(bool)缩写的形式,我们可以来尝试写上一个布尔类型,再往下呢还可以转换成字符串型.字符串型可以通过(str…
1.1.1 摘要 C#是一门强类型语言,一般情况下,我们最好避免将一个类型强制转换为其他类型,但有些时候难免要进行类型转换. 先想想究竟哪些操作可以进行类型转换(先不考虑.NET提供的Parse),一般我们都有以下选择: 使用as操作符转换, 使用传统C风格的强制转型 使用is来做一个转换测试,然后再使用as操作符或者强制转 1.1.2 正文 正确的选择应该是尽可能地使用as操作符,因为它比强制转型要安全,而且在运行时层面也有比较好的效率(注意的是as和is操作符都不执行任何用户自定义的转换,只…
哈哈,这个标题有点搞笑了!笑一笑,十年少,希望大家都嗨心! 在C++中主要有四种强制类型转换:static_cast,reinterpret_cast,const_cast,dynamic_cast. 1)static_cast<T*>(a) 将地址a转换成类型T,T和a必须是指针.引用.基本数据类型或枚举类型.在运行时转换过程中,不进行类型检查来确保转换的安全性. class B { ... }; class D : public B { ... }; void f(B* pb, D* pd…
在Objective-C中,以数字格式组成的字符串经常需要转换为NSNumber对象后再使用.例如有一个字符串对象@"111.22",需要转为NSNumber对象,最简单的方法就是这样:[NSNumber numberWithFloat:[@"111.22" floatValue]]. 这个方法先使用NSString的floatValue方法将字符串转成float,再使用NSNumber的numberWithFloat方法将结果转成NSNumber.但它有一个前提条…
在百度上遇到一个问题,描述如下: 在java中,定义两个变量 byte x = (byte) 128; byte y = (byte)-129; 输出后,为什么结果是-128和128? 借此机会,自己也认真的思考了一下这个问题,并得出了正确的结果,下面就谈谈我的理解. 这种问题在刚开始学习java的时候确实令我很费解来的,因为如果只是局限在java语言本身中,这个问题是没法得到真正的解的,顶多也是知其然不知其所以然.一年多来对计算机系统的更深入的学习,我在现可以尝试着去解答这个问题了. 首先你要…
原码 反码 补码的定义与运算 1原码: 原码是将十进制或者其他进制的数转换为二进制表示(且要根据数据的类型转换) 如:130 (默认是Int类型,则是4个字节) 原码是:00000000 00000000 00000000 100000010 2反码: 1.当原码是正数时,反码就是原码 2.当原码是负数时,反码是除了第一位的符号位以外的位数全部取反 3补码: 1.当原码是正数时,反码就是原码 2.当原码是负数时,补码是反码+1 byte b = (byte) 130 ; 计算机操作中对数据的分析…
父类能调用子类的方法吗? 答:能. 怎么做? ● 把子类传递到父类的有参构造中,然后调用. ● 使用反射的方式调用,你使用了反射还有谁不能调用的?! ● 父类调用子类的静态方法. 案例展示: package com.ywq; public class Test2{ public static void main(String[] args) { Son son = new Son(); Father father=new Father(son); father.fun1(); father.fu…
C语言中不同类型的结构体的指针间可以强制转换,很自由,也很危险.只要理解了其内部机制,你会发现C是非常灵活的. 一. 结构体声明如何内存的分布, 结构体指针声明结构体的首地址, 结构体成员声明该成员在结构体中的偏移地址. 变量的值是以二进制形式存储在内存中的,每个内存字节对应一个内存地址,而内存存储的值本身是没有整型,指针,字符等的区别的,区别的存在是因为我们对它们有不同的解读,param的值就是一个32位值,并且存储在某个内存单元中,通过这个32位值就能找到param所指向的结构的起始地址,通…
http://blog.csdn.net/cooldragon/article/details/18991973 iOS开发中基于ORM的框架很多,如SQLitePersistentObject,实际开发中需求不同或场景不同,方式方法也就不同,有时项目中用不上ORM框架,或者出于公司或项目组习惯或规范.实际项目需求或技术要求等等原因,不会采用完整的ORM框架,但一些重复啰嗦的代码使用一定的ORM功能还是很能提高效率的. 基于性能或灵活性考虑,或复杂查询的需求,或项目组要求,项目中数据库存取一般直…
实例化子类时,父类与子类中的静态代码块.实例代码块.静态变量.实例变量.构造函数的执行顺序是怎样的? 代码执行的优先级为: firest:静态部分 second:实例化过程 详细顺序为: 1.父类静态代码块与父类静态变量(取决于代码书写顺序) 2.子类静态代码块与子类静态变量(取决于代码书写顺序) 3.父类实例变量与父类代码块(取决于代码书写顺序) 4.父类构造函数 5.子类实例变量与父类代码块(取决于代码书写顺序) 6.子类构造函数 在JVM加载完类以后,类在被使用的时候初始化,静态部分只在类…
Python 2.7中的继承 在Python 2.7中,继承语法稍有不同,ElectricCar 类的定义类似于下面这样: class Car(object): def __init__(self, make, model, year): --snip-- class ElectricCar(Car): def __init__(self, make, model, year): super(ElectricCar, self).__init__(make, model, year) --sni…
父类静态(代码块,变量赋值二者按顺序执行) 子类静态 父类构造代码块 父类构造方法 子类构造代码块 子类构造方法 普通方法在实列调用的时候执行,肯定位于上面之后了 //父类A public class A { A() { System.out.println("A构造方法"); } { System.out.println("A构造代码块"); } static{ System.out.println("A静态码块"); } public sta…
C++中强制类型转换有四种: 1.static_cast 格式:static_cast<Type>(Value); --用于基本类型间的转换,但不能用于基本类型指针间的转换: int i = 0; char c = 'C';int *pi = &i;char *pc = &c; c = static_cast<char>(i); //没问题,将i转换为char型pc = static_cast<char*>(pi); //不可以,不能用于指针间转换 --…
1.toString()方法 底层代码 public String toString() { return this; } 其返回值为String类型的字符串本身 Map<String, Object> params = new HashMap<String, Object>(); //Map集合中没有key为1的键值对 String result = params.get("1").toString(); if (result == null) { Syste…