构造器

对象与类

我只是一个虾纸丫 提交于 2020-01-09 20:10:14
局部变量不会自动地初始化为null,而必须通过调用new或将他们设置为null。 如果使用一个没有初始化的指针,运行系统将会产生一个运行时错误,而不是一个随机的结果。同时,不必担心内存管理的问题,垃圾收集器将会处理 相关的事宜。 每个方法都有两个参数。第一个参数称为隐式参数(implicit),是出现在方法名前的类对象(游戏人把隐式参数称为方法调用的目标或者接收者)。第二个参数位于方法名后面括号中的数值,这是一个显示参数(explicit)。 在每一个方法中,关键字this表示隐式参数。 是否将某个方法设置为内联方法,是Java虚拟机的任务。 不要编写返回引用可变对象的访问器方法。如果需要返回一个可变对象的引用,应该首先对它进行克隆(clone)。 final应用于基本类型域,或不可变类的域。构建对象时,被final修饰的域必须设置一个初值。 ==Java程序设计语言总是采用按值调用。==也就是说,方法得到的是所有参数值的一个拷贝,特别是,方法不能修改传递给它的任何参数变量内容。 方法的签名:指出方法名以及参数类型。所以,不能有两个名字相同,参数类型也相同却返回不同类型值的方法。 Java中三种初始化数据域的方法:在构造器中设置值、在声明中赋值、初始化块(首先运行初始化块,然后才运行构造器的主体部分) 可以用静态块,初始化静态域。 与实例域一样,除非将它们显示地设置成其他值

Java中this关键字

六月ゝ 毕业季﹏ 提交于 2020-01-09 06:35:17
原文链接地址: https://www.cnblogs.com/zheting/p/7751752.html 当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。 因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。 1、 使用this 来区分当前对象。 Java中为解决变量的命名冲突和不确定性问题,引入关键字this代表其所在方法的当前对象的引用: 1) 构造方法中指该构造器所创建的新对象; 2) 方法中指调用该方法的对象; 3) 在类本身的方法或构造器中引用该类的实例变量(全局变量)和方法。 this只能用在构造器或者方法中,用于获得调用当前的构造器方法的对象引用。可以和任何的对象引用一样来处理这个this对象。 说明: (1)当实例变量和局部变量重名,JAVA平台会按照先局部变量、后实例变量的顺序寻找。即,方法中使用到的变量的寻找规律是先找局部变量,再找实例变量。如果没用找到,将会有一个编译错误而无法通过编译。 (2)如果使用this.a,则不会在方法(局部变量)中寻找变量a,而是直接去实例变量中去寻找,如果寻找不到,则会有一个编译错误。 (3)在一个方法内,如果没有出现局部变量和实例变量重名的情况下

Spring <bean> 参数意义

荒凉一梦 提交于 2020-01-09 04:06:31
1.id bean的唯一标识, 2.class 类的完全限定名, 3.parent 父类bean定义的名字。 如果没有任何声明,会使用父bean,但是也可以重写父类。重写父类时,子bean 必须与父bean 兼容,也就是说, 接受父类的属性值和构造器声明的值。 子bean会继承父bean的构造器声明的值,属性值,并且重写父bean的方法。如果init方法,destroy方法已声明, 他们会覆盖父bean相应的设置。   保留的设置会直接从子bean获取,包括depends on,autowire mode,scope,lazy init. 4.abstract 声明bean是否是抽象的,决定该类是否会实例化。默认是false。 注意:abstract属性不会被子bean继承,所以,abstract为true时需要对每个bean显示声明。 5.lazy-init 决定是否延迟实例化,如果为false,则启动时会立即实例化单例模式的bean.默认是false。 注意:lazy-init属性不会被子bean继承。 6.autowire 决定是否自动装配bean的属性。 autowire有4中模式: "no"     Spring默认的模式。bean的引用必须在XML文件中通过<ref/>元素或ref属性显示定义。     spring推荐使用的模式,这样可以使文档更清晰明确。

Java中this关键字使用小结

可紊 提交于 2020-01-09 02:45:04
当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。 因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。 1、 使用this 来区分当前对象。 Java中为解决变量的命名冲突和不确定性问题,引入关键字this代表其所在方法的当前对象的引用: 1) 构造方法中指该构造器所创建的新对象; 2) 方法中指调用该方法的对象; 3) 在类本身的方法或构造器中引用该类的实例变量(全局变量)和方法。 this只能用在构造器或者方法中,用于获得调用当前的构造器方法的对象引用。可以和任何的对象引用一样来处理这个this对象。 说明: (1)当实例变量和局部变量重名,JAVA平台会按照先局部变量、后实例变量的顺序寻找。即,方法中使用到的变量的寻找规律是先找局部变量,再找实例变量。如果没用找到,将会有一个编译错误而无法通过编译。 (2)如果使用this.a,则不会在方法(局部变量)中寻找变量a,而是直接去实例变量中去寻找,如果寻找不到,则会有一个编译错误。 (3)在一个方法内,如果没有出现局部变量和实例变量重名的情况下,是否使用this关键字是没有区别的。 (4)在同一个类中,Java普通方法的互相调用可以省略this+点号

浅谈Java三大特性之继承

风格不统一 提交于 2020-01-09 00:00:58
前言 简单用伪代码去介绍一些 父类与子类的构造函数问题 others 前言 类的继承性是面向对象语言的基本特性,多态性前提是继承性。Java 支持继承性和多态性。——Java从小白到大牛 继承:三大特性之一,关键词:extends 简单用伪代码去介绍一些 假设需要定义个student类 public class Student{ private String name;//名字 private int age;//年龄 private int sex;//性别} 再来个需求,需要定义一个学生Andy,不用继承时候,需要一个个去定义; public class Andy{ private String name; private int age; private int sex; private String country;//新增一个国家信息} 从上面看两者有着很多的相似的重复定义的东西,如果使用继承去写这段代码就可以如下: public class Andy extends student{ private String country} 所以从上面可以看出类的继承大致用途,Andy类已经继承了Student类,上面的父类便是student,extends后面跟着的 。继承的时候,要明确指出,要不然就是在 Java标准根类Object 进行继承。 再者,在继承的过程中

自定义容器,利用依赖注入创建对象

▼魔方 西西 提交于 2020-01-08 23:56:29
///容器:自动生成对象 /// 自动初始化需要的元素(依赖注入DI) public interface IElevenContainer { void RegisterType<IT, T>(); IT Resolve<IT>(); } //创建对象是使用无参构造器 public class ElevenContainer : IElevenContainer { private Dictionary<string, Type> typeContainer = new Dictionary<string, Type>(); public void RegisterType<IT, T>() { if (!typeContainer.ContainsKey(typeof(IT).FullName)) typeContainer.Add(typeof(IT).FullName, typeof(T)); } public IT Resolve<IT>() { string key = typeof(IT).FullName; if (!typeContainer.ContainsKey(typeof(IT).FullName)) { throw new Exception("没有为{key}的初始化"); } Type type = typeContainer[key]; /

  java8之lambda表达式(构造器引用)

此生再无相见时 提交于 2020-01-08 20:51:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 构造器引用同方法引用类似,不同的是在构造器引用中方法名是new。例如,Button::new表示Button类的构造器引用。对于拥有多个构造器的类,选择使用哪个构造器取决于上下文。假设你有一个字符串列表,并且希望调用Button类的构造器使用列表中的字符串来构造一个按钮列表,可以使用如下表达式: List<String> labels = ....; Stream<Button> stream = labels.stream().map(Button::new); List<Button> buttons = stream.collect(Collectors.toList()); 后面我们会详细讨论stream,map和collect方法。但是现在,重要的是对于每个列表元素,map方法会调用Button(String)构造器。虽然Button类有多个构造器,但是编译器会从上下文中推断并挑选只带一个String参数的构造器。 你可以使用数组类型来编写构造器引用。例如,int[]::new是一个含有一个参数的构造器引用,这个参数就是数组的长度。它等同于lambda表达式 x -> new int[x]。数组构造器引用可以用来绕过java中的一个限制。在Java中,无法构造一个泛型类型T的数组。表达式 new T

spring笔记

淺唱寂寞╮ 提交于 2020-01-08 05:38:10
Spring是什么 开源的,用来简化企业级应用开发的应用开发框架。 简化开发: Spring框架对常用的api都做了封装,比如:对jdbc就做了一套 封装(Spring Jdbc),使用SpringJdbc访问数据库, 就不再需要考虑如 何获取连接与关闭连接等操作了。 解耦: Spring帮我们管理对象之间的依赖关系(对象之间的耦合度降低了), 这样软件的维护性得到提高。 集成其它框架: Spring可以很好地和其它的一些框架进行集成,这样,使用 这些框架就更方便了。 Spring容器 (1)什么是Spring容器? Spring框架中的一个核心模块,用来管理对象。 注: 管理对象: 对象的创建、销毁、初始化等等操作,以及对象之间的依赖关系。 (2)如何启动Spring容器? step1.导包。 在pom文件中 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.8.RELEASE</version> </dependency> step2.添加Spring配置文件。 配置一个xml文件 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www

Java基础——浅析反射

梦想的初衷 提交于 2020-01-08 02:10:51
目录 一、前言 二、字节码对象 2.1 Java反射机制中获取字节码对象 2.2 Java虚拟机中对于某一个类只保留一份字节码对象 2.3 小结 三、使用字节码对象获取构造器进而新建对象 3.1 从字节码对象到构造器 3.2 使用字节码对象获取构造器 3.3 使用获取到的构造器新建对象 3.4 小结 四、使用字节码对象获取方法进而调用方法 4.1 从字节码对象到方法调用 4.2 字节码对象获取方法并调用,无返回值,返回值为void 4.3 字节码对象获取方法并调用,有返回值,返回值为String 4.4 字节码对象获取static方法并调用,无返回值,返回值为void 4.5 字节码对象获取static方法并调用,有返回值,返回值为String 4.6 演示参数列表为可变参数(数组)时的情况 4.7 小结 五、小结 一、前言 官方解释:Reflection enables Java code to discover information about the fields, methods and constructors of loaded classes, and to use reflected fields, methods, and constructors to operate on their underlying counterparts, within

第5章-初始化与清理

让人想犯罪 __ 提交于 2020-01-08 00:42:22
Think in java 读书笔记 pikzas 2019.03.06 第五章 初始化与清理 Think in Java 中该章节的内容只是初步介绍了一些语法层面的内容,具体的细节需要参考之后的另一本书周志明的《深入理解Java虚拟机》 知识点 方法重载 方法名相同 但是参数列表不同 参数的个数 参数的类型 参数的顺序 基本数据类型参数的重载 基本参数类型可以从一个较小的类型转为一个较大的类型,但是有些要注意 可以看到char是特例 char类型会直接提升到int类型。 反之 如果实参是较大的数据类型,而形参是较小的数据类型。则在调用的时候需要显示强转。表明你已经认识到可能会有丢失数据精度的可能。 一个认知错误的地方就是,不可能依据返回值的不同来重载方法。因为返回值不是方法签名中的一员。 一旦手动改写了构造函数,则编译器就不会为我们隠式添加默认的构造函数。 this关键字指的是调用当前类中某个方法的对象是谁,所以this关键字只可能存在于方法之内。 this的一个应用就是用来返回自身对象 class Demo{ int i = 0; Demo increment(){ i++; return this; } void print(){ System.out.println("i = "+i); } public static void main(String[] args){