初始化

Java基本概念

梦想的初衷 提交于 2020-02-04 05:44:05
问题及答案来源自《Java程序员面试笔试宝典》第四章 Java基础知识 4.1基本概念 1、J ava语言有何优势? 纯面向对象的语言 具有平台无关性,可移植性好 提供了很多内置的类库 提供了对web应用开发的支持 具有很好的安全性和健壮性 除去了C++中难以理解和容易混淆的特性(头文件、指针、多重继承等) 2、Java与C/C++有何区别? Java和C++的相同点: Java和C++都是面向对象语言,都使用了面向对象思想(例如封装、继承、多态等) 由于面向对象有许多非常好的特性(继承、组合等),因此二者都有很好的重用性 Java和C++的不同点: Java为解释性语言,而C/C++为编译型语言(Java执行速度比C/C++慢,但Java能跨平台执行而C/C++不能) Java代码运行过程:源代码通过Java编译器编译成字节码(.class),然后由JVM解释执行 C/C++代码运行过程:源代码通过编译和链接后生成可执行的二进制代码 Java为纯面向对象语言,所有代码要在类中实现,而C++兼具面向过程和面向对象编程的特点 Java没有C/C++中的指针 Java没有C++中的多重继承,但是Java引入了接口的概念,可以通过实现多个接口来实现与C++中多重继承一样的目的 在C++中需要开发人员管理内存分配(申请和释放),而Java中提供了垃圾回收器来实现垃圾的自动回收 C+

Java练习_第六天

心不动则不痛 提交于 2020-02-04 00:59:32
1.写出一维数组初始化的两种方式 动态初始化:数组声明为数组元素分配空间额赋值的操作分开进行 int [ ] arr = new int [ 3 ] ; // 数组是引用类型,它的元素相当于类的成员变量,因此数组已经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化 arr [ 0 ] = 3 ; arr [ 1 ] = 4 ; arr [ 2 ] = 5 ; String [ ] strings ; strings = new String [ 3 ] ; strings [ 0 ] = "aaa" ; strings [ 1 ] = "bbb" ; strings [ 2 ] = "cccc" ; 静态初始化:在定义数组的同时为数组元素分配空间并且赋值 String [ ] strings = { "aaa" , "bbb" , "ccc" } ; int [ ] strings = { 1 , 2 , 3 } ; int [ ] strings = new int [ ] { 1 , 2 , 3 } ; 2.写出二维数组初始化的两种方式 动态格式化: int [ ] [ ] arr = new int [ 3 ] [ 2 ] ; 定义了名称为arr的二维数组 二维数组中有3个一维数组, 每一个一维数组中有2个元素 一维数组的名称分别为arr[0], arr[1],

spring初始化源码浅析之关键类和扩展接口

本小妞迷上赌 提交于 2020-02-04 00:49:27
目录 1、关键接口和类 1.1、关键类之 DefaultListableBeanFactory 1.2、关键类之XmlBeanDefinitionReader 1.3、关键类之ClassPathXmlApplicationContext 2、spring初始化过程中对外暴露的扩展接口 3、扩展点的启动顺序 spring的IOC容器初始化流程很复杂,本文只关注流程中的关键点,勾勒出主要轮廓,对容器的初始化有一个整体认识,以下基于spring的5.1.2.RELEASE分析,本文演示代码地址:https://github.com/amapleleaf/spring-code.git 本文分为两部分:《spring初始化源码浅析之关键类和扩展接口》、《spring初始化源码浅析之代码浅析》 1、关键接口和类 1.1、关键类之 DefaultListableBeanFactory 该类核心功能: 1、提供注册、获取等等与BeanDefinition对象操作相关的方法,BeanDefinition缓存在DefaultListableBeanFactory的beanDefinitionMap变量(ConcurrentHashMap类型) 2、提供创建、注册、获取、单例等等跟bean对象操作相关的方法供ApplicationContext使用

【Java基础05】组合和聚合、初始化块

邮差的信 提交于 2020-02-04 00:43:15
1 组合和聚合 1.1继承与组合 继承是实现类复用的重要手段,但继承带来了一个最大的坏处:破坏封装。相比之下,组合也是实现类复用的重要方式,而采用组合方式来实现类复用则能提供更好的封装性。 在继承中,为了保证父类有良好的封装性,不会被子类随意改变,设计父类通常应该遵循如下规则: 1.尽量隐藏父类的内部数据。把父类所有成员都设置为 private 访问类型。 2.不要让子类可以随意访问、修改父类的方法。父类中仅为辅助其他的工具方法,应使用 private 访问控制符修饰,子类无法访问;父类中需要被外部类调用的方法用 public 访问控制符修饰,如不希望子类重写该方法,使用 final 修饰符修饰;如果希望父类的某个方法被子类重写,但不希望被其它类自由访问,应该使用 protected 修饰。 总之,继承要表达的是一种“是(is—a)”的关系,而组合表达的是“有(has—a)”的关系。 1.1组合: 如果需要复用一个类,除了把这个类当成基类(父类)来继承外,还可以把该类当作另一个类的组合成分,从而允许新类直接复用该类的public方法,不管是继承还是组合,都允许在新类中直接复用旧类的方法。组合是直接把旧类对象作为新类的属性嵌入,用于实现新类的功能,通常需要在新类里使用private修饰符嵌入该类对象。 1.2聚合: 在聚合关系中,代表部分事物的可以属于多个聚合对象

【c++】必须在类初始化列表中初始化的几种情况

故事扮演 提交于 2020-02-04 00:36:13
本文转载自 http://www.cnblogs.com/kaituorensheng/p/3477630.html,感谢作者分享 1. 类成员为const类型 2. 类成员为引用类型 #include <iostream> using namespace std; class A { public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: const int i; int p; int &j; }; int main(int argc ,char **argv) { int pp = 45; A b(pp); b.print_val(); } 究其因 const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能做赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。 从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用赋值操作符)没有创建新对象,而是对已有的对象赋值。 1 #include <iostream> 2 using namespace std; 3 4 class Base 5 { 6 public: 7 Base(){cout <<

8.Go语言基础之指针

元气小坏坏 提交于 2020-02-04 00:27:09
Go语言中的指针不能进行偏移和运算,是安全指针。 在了解GO语言中的指针前,首先需要知道三个概念:指针地址、指针类型和指针取值。 1.Go语言中的指针 任何数据载入内存后,在内存中都有对应的地址,这就是指针。 为了保存一个数据在内存中的地址,需要指针变量。 比如"好好学习,天天向上"这个字符串写入程序中,程序一启动这句话就加载到内存(假设内存地址为0x123456),在程序中,把该字符串赋值给变量A,把该字符串的内存地址赋值给变量B。 这时变量B就是一个指针变量。通过变量A和变量B都能找到该字符串。 Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。 也需要记得: 值类型有:int、float、bool、string、array、struct 引用类型有:指针,map,切片,chan 1.1指针地址和指针类型 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置。 Go语言中使用&字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int,float,bool,string,array,struct)都有对应的指针类型,如*int,*in64,*string等。 取变量指针的语法如下: ptr := &v // v的类型为T 其中: v:代表被取地址的变量,类型为T ptr

初始化和清除

99封情书 提交于 2020-02-04 00:14:47
文章目录 初始化和清除(1) 初始化和清除(2) 初始化和清除(3) 初始化和清除(4) 初始化和清除(5) 初始化和清除(6) 初始化和清除(7) 初始化和清除(8) 初始化和清除(9) 初始化和清除(1) java自动调用构造器以保证每个对象的初始化。 构造器方法的名字和类名一致。 代码示例: package initialization ; /** * @author vincient * @create 2020-01-20 9:52 AM */ class Rock { public Rock ( ) { System . out . print ( "Rock " ) ; } } public class SimpleConstructor { public static void main ( String [ ] args ) { for ( int i = 0 ; i < 10 ; i ++ ) { new Rock ( ) ; } } } //输出: //Rock Rock Rock Rock Rock Rock Rock Rock Rock Rock ⚠️注意:构造器的名字必须与类名完全匹配 4. 默认构造器:没有参数的构造器 5. 构造器方法也可以有参数 代码示例: package initialization ; /** * @author

Go语言 list列表

喜夏-厌秋 提交于 2020-02-03 23:54:53
在Go语言中,列表使用 container/list 包来实现,内部的实现原理是双链表,列表能够高效地进行任意位置的元素插入和删除操作。 初始化列表 list 的初始化有两种方法:分别是使用 New() 函数和 var 关键字声明,两种方法的初始化效果都是一致的。 1) 通过 container/list 包的 New() 函数初始化 list 变量名 := list.New() 2) 通过 var 关键字声明初始化 list var 变量名 list.List 列表与切片和 map 不同的是,列表并没有具体元素类型的限制,因此,列表的元素可以是任意类型,这既带来了便利,也引来一些问题,例如给列表中放入了一个 interface{} 类型的值,取出值后,如果要将 interface{} 转换为其他类型将会发生宕机。 在列表中插入元素 双链表支持从队列前方或后方插入元素,分别对应的方法是 PushFront 和 PushBack。 提示 这两个方法都会返回一个 *list.Element 结构,如果在以后的使用中需要删除插入的元素,则只能通过 *list.Element 配合 Remove() 方法进行删除,这种方法可以让删除更加效率化,同时也是双链表特性之一。 从列表中删除元素 列表插入函数的返回值会提供一个 *list.Element 结构

C++ 初始化列表

╄→尐↘猪︶ㄣ 提交于 2020-02-03 22:48:01
类对象的构造顺序是这样的:   a.分配内存,调用构造函数时,隐式/显示的初始化各数据成员   b.进入构造函数后在构造函数中执行一般计算 1.初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数体内进行赋值操作。 使用初始化列表主要是基于性能问题. [参考 C++ 初始化列表 http://www.cnblogs.com/graphics/archive/2010/07/04/1770900.html。]   对于内置类型,如int, float等,使用初始化类表和在构造函数体内初始化差别不是很大,但是对于类类型来说,最好使用初始化列表,为什么呢?由上面的测试可知,使用初始化列表少了一次调用默认构造函数的过程,这对于数据密集型的类来说,是非常高效的。 2. 除了性能问题之外,有些时场合初始化列表是不可或缺的, 以下几种情况时必须使用初始化列表 常量成员,因为常量只能初始化不能赋值,所以必须放在初始化列表里面 引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表里面 没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化。    如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,而没有默认构造函数,这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表

C++:四种必须使用初始化列表情况

喜夏-厌秋 提交于 2020-02-03 22:45:43
【c++】必须在类初始化列表中初始化的几种情况 1. 类成员为const类型 2. 类成员为引用类型 复制代码 #include <iostream> using namespace std; class A { public: A(int &v) : i(v), p(v), j(v) {} void print_val() { cout << "hello:" << i << " " << j << endl;} private: const int i; int p; int &j; }; int main(int argc ,char **argv) { int pp = 45; A b(pp); b.print_val(); } 复制代码 究其因 const对象或引用只能初始化但是不能赋值。构造函数的函数体内只能做赋值而不是初始化,因此初始化const对象或引用的唯一机会是构造函数函数体之前的初始化列表中。 从无到有叫初始化,初始化(调用拷贝构造函数)创建了新对象;赋值(调用赋值操作符)没有创建新对象,而是对已有的对象赋值。 3. 类成员为没有默认构造函数的类类型 复制代码 #include <iostream> using namespace std; class Base { public: Base(int a) : val(a) {} private: int