构造函数

C# new运算符

倖福魔咒の 提交于 2020-04-07 01:58:20
一、C# new运算符 1. 用于创建对象和调用构造函数。 例如: Class_Test obj = New Class_Test(); 2. 用于为值类型调用默认的构造函数。 例如: int myInt = New int();上述语句中,myInt初始化为0,它是int类型的默认值。该语句的效果等同于: int myInt = 0; 3. 不能重载new运算符。 4. 如果new运算符分配内存失败,那么它将引发OutOfMemoryException异常。 二、在C#中,new关键字可用作运算符、修饰符或约束。 new运算符:用于创建对象和调用构造函数。 new修饰符:用于向基类成员隐藏继承成员。 new修饰符 在用作修饰符时,new关键字可以显式隐藏从基类继承的成员。隐藏继承的成员时,该成员的派生版本将替换基类版本。虽然可以在不使用new修饰符的情况下隐藏成员,但会生成警告。如果使用new显示隐藏成员,则会取消此名警告,并记录要替换为派生版本这一事实。 对同一成员同时使用new和override是错误的做法,因为这两个修饰符的含义互斥。new修饰符会用同样的名称创建一个新成员并使原始成员变为隐藏的。override修饰符会扩展继承成员的实现。 new约束:用于在泛型声明中约束可能用作类型参数的参数的类型。 new约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数

SSM第一天 springDI

不打扰是莪最后的温柔 提交于 2020-04-07 00:00:16
SpringDI(Dependency Injection) DI作用:因为IOC解除了程序间的依赖关系,所以DI就是weil维护程序间的依赖关系,称:依赖注入 能注入的三类数据类型: 基本类型和String 其他bean类型(在配置文件中或者注解配置过的bean) 复杂类型/集合类型 注入的三种方式: 使用构造函数注入 优势: 可以实现,在获取某对象时,注入数据时必须的操作,否则对象无法创建成功 弊端: 改变了bean对象的实例化方式,导致我们在创建对象时,如果用不到这些属性,也必须提供 <bean id="userService" class="com.xp.service.impl.UserServiceImpl"> <constructor-arg name="name" value="哈哈哈"></constructor-arg> <constructor-arg name="age" value="18"></constructor-arg> <constructor-arg name="date" ref="now"></constructor-arg> </bean> <bean id="now" class="java.util.Date"></bean> 参数说明: 一个constructor-arg标签代表一个依赖 constructor-arg属性:

C++之保护和私有构造函数与析构函数

落花浮王杯 提交于 2020-04-06 19:07:58
原文: http://blog.chinaunix.net/uid-22312037-id-3811654.html 参考: http://blog.sina.com.cn/s/blog_4c4d6e740100upwp.html 一、构造函数 1、保护 构造函数定义为protected后,就意味着你不能在类的外部构造对象了,而只能在外部构造该类的子类的对象,比如: class Base { protected: Base() {} ... }; class Derived : public Base { public: Derived() {} ... }; Base b; //error Derived d; //ok 2、私有 构造函数定义为private后,意味着不仅仅不能在类的外部构造对象了,而且也不能在外部构造该类的子类的对象了,只能通过类的static静态函数来访问类的内部定义的对象,单件singleton模式就是私有构造函数的典型实例: class CLog { private: CLog() {}; public: ~CLog() {}; public: static CLog* GetInstance() { if (NULL == m_sopLogInstance) { CLock oInstanceLock; oInstanceLock.Lock(); if

JavaScript的public、private和privileged模式

非 Y 不嫁゛ 提交于 2020-04-06 18:24:36
JavaScript 的public、private和privileged模式 原文: Private Members in JavaScript 公共/私有变量和方法 通过一个简单的的例子,来展示如何使用JavaScript在类里面创建私有变量和方法 Summary 私有变量 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问。 私有函数 在对象的构造函数里声明(或者是通过var functionName=function(){...}来定义),它能被特权函数调用(包括对象的构造函数)和私有函数调用。 特权方法 通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用。它可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数。 公共属性 通过this.variableName来定义而且在对象外部是可以读写的。不能被私有函数所调用。 公共方法 通过ClassName.prototype.methodName=function(){...}来定义而且可以从对象外部来调用。 原型属性 通过ClassName.prototype.propertyName=someValue来定义。 静态属性 通过ClassName.propertyName=someValue来定义。

C\\C++代码优化的27个建议

喜你入骨 提交于 2020-04-06 11:52:34
1. 记住 阿姆达尔定律 : funccost 是函数func运行时间百分比, funcspeedup 是你优化函数的运行的系数。 所以,如果你优化了函数 TriangleIntersect 执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。 这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。 这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。 2. 代码先保证正确,然后再考虑优化 这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。 分多步来做性能优化。 先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。 然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。所有频繁调用的函数,都需要优化。 3. 我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。 4.跳转和分支执行代价高,如果可能,尽量少用。 函数调用需要两次跳转,外加栈内存操作。 优先使用迭代而不是递归。 使用内联函数处理短小的函数来消除函数调用开销。 将循环内的函数调用移动到循环外(例如,将 for(i=0;i <100;i++) DoSomething(); 改为 DoSomething() { for(i=0;i <100;i++)

C\\C++代码优化的27个建议

这一生的挚爱 提交于 2020-04-06 10:35:18
1. 记住 阿姆达尔定律 : func cost 是函数func运行时间百分比, func speedup 是你优化函数的运行的系数。 所以,如果你优化了函数 TriangleIntersect 执行40%的运行时间,使它运行快了近两倍,而你的程序会运行快25%。 这意味着不经常使用的代码不需要做较多优化考虑(或者完全不优化)。 这里有句俗语:让经常执行的路径运行更加高效,而运行稀少的路径正确运行。 2. 代码先保证正确,然后再考虑优化 这并不意味着用8周时间写一个全功能的射线追踪算法,然后用8周时间去优化它。 分多步来做性能优化。 先写正确的代码,当你意识到这个函数可能会被经常调用,进行明显的优化。 然后再寻找算法的瓶颈,并解决(通过优化或者改进算法)。通常,改进算法能显著地改进瓶颈——也许是采用一个你还没有预想到的方法。所有频繁调用的函数,都需要优化。 3. 我所了解的那些写出非常高效代码的人说,他们优化代码的时间,是写代码时间的两倍。 4.跳转和分支执行代价高,如果可能,尽量少用。 函数调用需要两次跳转,外加栈内存操作。 优先使用迭代而不是递归。 使用内联函数处理短小的函数来消除函数调用开销。 将循环内的函数调用移动到循环外(例如,将 for(i=0;i <100;i++) DoSomething(); 改为 DoSomething() { for(i=0;i <100;i+

方法引用、构造函数引用

核能气质少年 提交于 2020-04-06 09:50:46
import java.util.Arrays; import java.util.List; import static java.util.Comparator.comparing; /** * 方法引用 */ public class Quote{ public static void main(String[] args){ List<Apple> list = Arrays.asList(new Apple("red",120),new Apple("green",100)); list.sort(comparing(Apple::getWeight)); System.out.println(list); List<String> str = Arrays.asList("a","b","A","B"); // str.sort((s1,s2)->s1.compareToIgnoreCase(s2)); str.sort(String::compareToIgnoreCase); System.out.println(str); } } 构造函数引用 public class Apple { private String color; private int weight; public Apple() { } public Apple(int weight) {

Java 反射机制

隐身守侯 提交于 2020-04-06 05:57:25
根据李兴华的视频整理的 大致是先得到Class的类的对象,然后在用这个对象调用newInstance方法创建实例,就可以对实例进行操作了 Java反射的源头是Class这个类: public final class Class<T>extends Objectimplements Serializable, GenericDeclaration, Type, AnnotatedElement Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型( boolean 、 byte 、 char 、 short 、 int 、 long 、 float 和 double )和关键字 void 也表示为 Class 对象。 Class 没有公共构造方法 。 Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。 以下示例使用 Class 对象来显示对象的类名: void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass()

Spring Bean的生命周期

旧城冷巷雨未停 提交于 2020-04-06 03:45:25
容器开始启动: 如果Spring容器中注册了实现BeanFactoryPostProcessor接口的容器后处理器,实例化该容器后处理器,即调用构造函数创建实例 如果Spring容器中注册了实现BeanFactoryPostProcessor接口的容器后处理器,就调用BeanFactoryPostProcessor.postProcessBeanFactory()方法 容器运行中: 如果Spring容器中注册了实现InstantiationAwareBeanPostProcessor接口的Bean后处理器,就执行该Bean后处理器的postProcessBeforeInstantiation方法。 实例化bean,即调用Bean的构造函数 如果Spring容器中注册了实现InstantiationAwareBeanPostProcessor接口的Bean后处理器,就执行该Bean后处理器的postProcessAfterInstantiation方法。 如果Spring容器中注册了实现InstantiationAwareBeanPostProcessor接口的Bean后处理器,就执行该Bean后处理器的postProcessProperties方法。 如果Spring容器中注册了实现InstantiationAwareBeanPostProcessor接口的Bean后处理器

构造函数、析构函数抛出异常的问题

亡梦爱人 提交于 2020-04-06 03:01:46
1.构造函数异常   C++中构造函数是一个与类同名,没有返回值的特殊函数,主要是构造对象,为对象分配资源,由于没有返回值,如何判断构造对象的过程一定成功呢?   答:参考链接 C++构造函数中抛出的异常 C++中通知对象构造失败的唯一方法只能是在构造函数中抛出异常,采用 throw语句 来实现 构造函数中抛出异常将导致对象的析构函数不被执行( 因构造未完成,当然不会构造,对于通过设置变量来表示构造失败,并不能阻止构造函数的执行,所以最后仍然会调用析构函数 ) 当对象发生部分构造,已经构造完成的子对象将逆序地被析构。 2. 析构函数异常 ( 参考 构造函数、析构函数抛出异常的问题 )   C++标准规定 析构函数不能、也不应该抛出异常 ,从某种意义上讲,析构函数是C++异常处理机制的一部分,但析构并不是说不会发生异常   2.1 more effective c++提出两点理由(析构函数不能抛出异常的理由):   1)如果析构函数抛出异常,则 异常点之后的程序不会执行 ,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成资源泄漏等问题。   2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃。   2.2 那么当无法保证在析构函数中不发生异常时