构造器

Java反射机制专题

最后都变了- 提交于 2019-12-21 04:37:38
·Java Reflection Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法 ·Java反射机制提供的功能   在运行时判断任意一个对象所属的类   在运行时构造任意一个类的对象   在运行时判断任意一个类所具有的成员变量和方法   在运行时调用任何一个对象的成员变量和方法   生成动态代理 ·反射相关的主要API:   java.lang.Class:代表一个类   java.lang.reflect.Method:代表类的方法   java.lang.reflect.Field:代表类的成员变量   java.lang.reflect.Constructor:代表类的构造方法 Class类 在Object类中定义了以下的方法,此方法将被所有子类继承:   public final Class getClass() 以上的方法返回值的类型是一个Class类,此类事Java反射的源头,实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称。 ·对照镜子后可以得到的信息:某个类的属性、方法和构造器、某个类到底实现了哪些接口。对于每个类而言,JRE都为其保留一个不变的Class类型的对象。一个Class对象包含了特定某个类的有关信息。

C++ 修饰符类型

允我心安 提交于 2019-12-20 23:38:43
C++ 允许在 char、int 和 double 数据类型前放置修饰符。修饰符用于改变基本类型的含义,所以它更能满足各种情境的需求。 下面列出了数据类型修饰符: signed unsigned long short 修饰符 signed、unsigned、long 和 short 可应用于整型, signed 和 unsigned 可应用于字符型, long 可应用于双精度型。 修饰符 signed 和 unsigned 也可以作为 long 或 short 修饰符的前缀。例如: unsigned long int 。 C++ 允许使用速记符号来声明 无符号短整数 或 无符号长整数 。您可以不写 int,只写单词 unsigned、short 或 unsigned、long ,int 是隐含的。 C++ 中的类型限定符 类型限定符提供了变量的额外信息。 限定符 含义 const const 类型的对象在程序执行期间不能被修改改变。 volatile 修饰符 volatile 告诉编译器,变量的值可能以程序未明确指定的方式被改变。 restrict 由 restrict 修饰的指针是唯一一种访问它所指向的对象的方式。只有 C99 增加了新的类型限定符 restrict。 C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生

谨慎的使用 Serializable 接口(74)

拜拜、爱过 提交于 2019-12-20 10:30:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 序列化带来的直接开销非常低,但是长期开销是实实在在的 实现 Serializable 接口最大的代价就是 一旦一个类发布,大大降低了改变其实现的灵活性 因为此时,它的字节流编码就变成了其导出API的一部分 如果不设计一种自定义序列化形式,仅仅使用默认序列化, 那么私有和包级私有实例,都变成导出api的一部分 不符合最低限度访问域的准则 默认序列化可能出现新老版本序列化和反序列化不兼容 仍然保留老接口,会带来别的问题、隐患 仔细设计一种高质量的序列化形式,长期使用,初始付出的成本是值得的 序列化会使得类的演变受到限制 流的唯一标识符有关(序列版本UID) private static final long serialVersionUID = 1L; 如果不定义该标识符,会在运行时,调用一个复杂的过程自动生成 而且内部改变,会导致,自动计算id 值改变,序列化兼容被打破 导致InvalidClassException 实现 Serializable 第二个代价: 增加了出现 BUG、安全漏洞的可能性 对象是构造器创建的 序列化机制是语言之外的对象创建机制 反序列化机制都是一个隐藏的构造器 该构造器相对于真正的构造器,约束条件往往被忽略 默认序列化机制的反序列化过程的约束关系很容易遭到破坏、非法访问 第三个代价:

3.vue源码分析——组件化

送分小仙女□ 提交于 2019-12-20 10:19:07
组件化是vue中另一个核心思想 所谓组件化 就是把页面拆分成多个组件 每个组件依赖的css js 模板 图片等资源放在一起开发维护 组件是资源独立的 组件在系统内部可以复用 组件和组件之间可以相互嵌套 1. createComponent 上一篇我们了解了普通vnode的生成 现在我们来看看组件vnode的创建 依然是通过_createElement函数创建 里面会做一层判断 得知是组件时调用createComponent方法 此代码截图来自vdom/create-element.js中的_createElement方法 其实这种组件的方式也是我们开发中常用的方式 对于这行代码 我想使用过vue的朋友都不陌生了 接下来我们就看看vue是怎样通过createComponent方法生成组件的vnode的 createComponent方法定义在vdom/create-component.js中 由于createComponent方法比较重要并且代码有点长 所有我会把这个方法分成几段截屏解析 以上代码就是开始的一小段 看完上面代码和解析之后 我们来看看vue是怎样通过extend方法将传进的组件对象转化为组件构造器的 Vue.extend = function (extendOptions: Object): Function { extendOptions =

java对象和类

断了今生、忘了曾经 提交于 2019-12-20 05:16:15
类 类是 构造对象的模板 ,由 类构造对象的过程 称为 创建类的实例 ,由java编写的所有代码都位于某个类的内部。 封装   封装是与对象有关的重要概念,形式上看封装只是将数据和行为组合在一个包内,并对对象使用者隐藏了数据的实现方式。   对象中的数据称为实例域,操纵数据的过程称为方法。每个特定的类实例对象都有一组特定的实例域值,这些值的集合就是这个对象的当前状态。   实现封装的关键在于绝不能让类的方法直接访问其他类的实例域,程序仅通过对象的方法域对象数据进行交互 对象 对象的三个特征:行为,标识,状态   同一个类的所有对象实例,由于支持相同的行为而具有家族式的相似性,对象的行为是用可调用的方法定义的。   状态:每个对象都保存着描述当前特征的信息,这就是状态,对象状态的改变必须通过调用方法来实现(若可以不调用方法就可以改变对象状态,就是说明封装性遭到破环)。   标识:对象的状态并不能完全描述一个对象,每个对象都有一个唯一的身份(标识),作为一个类的实例,每个对象的标识永远是不同的,状态也存在差异 设计类 在面向对象的程序设计时没有所谓的定都main函数开始,而是先从设计类开始,然后再往每个类中添加方法。 识别类的简单规则:寻找名词,方法对应动词 类之间的关系 依赖(users-a):一个类的方法操纵另一个类对象,就是依赖   应尽可能将相互依赖的类降至最少

java面试必须掌握的技术点--基础篇--(一)

感情迁移 提交于 2019-12-20 04:28:39
基本功 面向对象的特征 1.抽象 定义:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面,抽象只关注对象的哪些属性和行为,并不关注这此行为的细节是什么 1.1 研究事物的静态特征(属性) 1.2 研究事物的动态特征(方法/函数) 1.3 形成结果(类,class) 1.4 类和对象相互转变(new) 2.封装 定义:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口.面向对象的本质就是将现实世界描绘成一系列完全自治,封闭的对象,可以说,封装就是隐藏一切可隐藏的东西,只向外界提供最简单的编程接口。封装给对象提供了隐藏内部特性和行为的能力,对象提供一些能这被其它对象访问的方法来改变它内部的数据。 2.1.提供构造方法(有了构造方法才能通过new去构建一个对象 1.构造方法必须和类名称一样2.构造方法不能有返回值) 2.2 静态块(做的类的初始化的工作,执行在new之前) 静态块用于放创建对象前要做的一系列事情,比如说一个学生,首先要被孕育,然后出生…等等 2.3 控制访问 具体情况具体分析 3.继承(关键字:extends) 目的:对父类和方法的复用 继承是从已有类得到继承信息创建新类的过程,继承让变化中的软件系统有了一定的延续性,同时继承也是封装程序中可变因素的重要手段.子类继承父类属性(静态特征)和方法(动态特征)

Java网络编程

女生的网名这么多〃 提交于 2019-12-20 04:04:48
OSI模型包含7个层次: (1)物理层(Physical Layer)     物理层是OSI参考模型的最低层,它利用传输介质为数据链路层提供物理连接。 物理层的作用是通过传输介质发送和接收二进制比特流。 (2) 数据链路层 (Data Link Layer)     数据链路层是为网络层提供服务的,解决两个相邻结点之间的通信问题,传送的协议数据单元称为数据帧。 (3)网络层(Network Layer)     网络层是为传输层提供服务的,传送的协议数据单元称为 数据包 或分组。该层的主要作用是解决如何使数据包通过各结点传送的问题。 (4)传输层(Transport Layer)     传输层的作用是为上层协议提供端到端的可靠和透明的数据传输服务,包括处理差错控制和流量控制等问题。该层向高层屏蔽了下层数据通信的细节,使高层用户看到的只    是在两个传输实体间的一条主机到主机的、可由用户控制和设定的、可靠的数据通路。     传输层传送的协议数据单元称为段或报文。 (5)会话层(Session Layer)     会话层主要功能是管理和协调不同主机上各种进程之间的通信(对话),即负责建立、管理和终止 应用程序 之间的会话。 (6)表示层(Presentation Layer)     表示层处理流经结点的数据编码的表示方式问题

Java 核心技术 第四章 类与对象

柔情痞子 提交于 2019-12-19 23:52:51
类: 构造对象的模板和蓝图。由类构造对象的过程称为创建类的实例。 对象的特征: 对象的行为 对象的状态 对象的标识 类之间的关系: 依赖 聚合 继承 对象与对象变量: new Date() new GregorianCalendar() new GregorianCalendar(1999, 11, 31) new GregorianCalendar(1999, Calendar.DECEMBER, 31) new GregorianCalendar(1999, Calendar.DECEMBER, 31, 23, 59, 59) GregorianCalendar now = new GregrianCalendar() ; int month = now.get(Calendar.MONTH) ; int weekday = now.get(Calendar.DAY_OF_WEEK) ; GregorianCalendar deadline= new GregorianCalendar(...) ; //参数不可以是... deadline.set(Calendar.YEAR, 2001) ; deadline.set(Calendar.MONTH, Calendar.APRIL) ; deadline.set(Calendar.DAY_OF_MONTH, 15) ;

谈谈: 事件和委托

旧时模样 提交于 2019-12-19 21:01:48
相信大家在面试的时候会经常问到事件和委托的区别,为什么.net中需要事件和委托这样类似的问题吧,对于一些初学者来说可平时用的过程中也不知道为什么, 只知道这样用,而对于其中的实现机制不是很清楚, 所以面试的时候总是感觉回答的不是很有底气的, 对于委托和事件园子里面也有很多人写过这样的文章,比如张子阳博客中 C# 中的委托和事件 , 这篇文章由浅入深讲解了.net中的事件和委托。所以比较建议初学者看看的,而且很容易懂.(本人第一次写,如果什么地方说错了的地方请大家海涵和及时纠正我) 在张子阳的文章我相信已经把事件和委托讲的很清楚了,下面我说说我感觉需要注意的地方。 为什么会有委托 在C++中用函数指针来实现回调函数(回调函数是一种非常有用的编程机制),然而函数指针不是类型安全的, 所以.net Framework提供了称为 委托 的类型安全的机制来实现函数的回调。 编译器如何解析委托 当我们像下面一样在代码中定义一个委托时, Public delegate void Comparator(int value); 但是编译器遇到这行代码会定义一个类: View Code 1 Public class Comparator:System.MulticastDelegate 2 { 3 public Comparator(Object object, IntPtr method); 4 5

mybatisplus(二) 条件构造器

时间秒杀一切 提交于 2019-12-19 06:11:39
AbstractWrapper QueryWrapper(LambdaQueryWrapper)和UpdateWrapper(LambdaUpdateWrapper)的父类,用于生成sql的where条件, entity属性也用于生成sql的where条件 entity生成的 where 条件与 使用各个 api 生成的 where 条件 没有任何关联行为 !!! Mybatis-Plus 通过 QueryWrapper(MP封装的一个查询条件构造器,继承自AbstractWrapper,AbstractWrapper实现了 Wrapper等接口)来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率 查询包装器QueryWrapper, 主要用于处理 sql 拼接,排序,实体参数查询等 注意: 使用的是 数据库字段 ,不是 Java 属性! 需要这些功能时,只需要创建 QueryWrapper对象 即可 模糊查询 like ===> %值% ==> queryWrapper.like(数据库中的列名,查询条件) .lt <小于 @Test public void selectByWrapper(){ QueryWrapper<User> queryWrapper=new QueryWrapper<User>(); QueryWrapper<User>