构造器

final关键字

假装没事ソ 提交于 2020-03-17 00:24:17
final可以修饰类、方法、属性和变量 final修饰类,该类不可以被继承 final修饰方法,方法不可以被子类重写 final修饰属性,属性不会进行隐式初始化,只能被显式初始化或者在构造方法中赋值,而且只能二选一,因为只能被赋值一次。当选择构造器中赋值,如果有多个构造器,则每个构造器都要赋值,否则编译不通过。 final修饰变量,变量值只能被赋一次,即为常量 来源: https://www.cnblogs.com/lexuexi/p/8531766.html

java第五章:面向对象(oop)

时光毁灭记忆、已成空白 提交于 2020-03-16 11:07:46
对象 :具有特征和功能的实例。 类 :是对对象的抽象,是人们脑海中的概念,是具有共同特征或相同行为的对象的集合,利用类可以创建对象; 创建类:[修饰符] class 类名{                 创建对象:类名 对象名 = new 类名();   属性:类似于变量的命名,[修饰符] 数据类型 属性名    类比:Scanner input = new Scanner(System.in);   方法:[修饰符] 返回值类型 方法名(形参列表){     访问属性并赋值:对象名.属性名 = 值;         方法体;                 访问方法(非static): 对象名.方法名(); }                             访问静态方法:类名/对象名.方法名(); } 成员变量和局部变量的区别: 1.作用域不同:成员变量作用于当前整个类体;局部变量只作用于当前方法。 2.声明之后是否具有初始值:成员变量有,int类型0、String类型null、double类型0.0、boolean类型false;              局部变量没,必须声明赋值之后才能使用。 3.在内存的位置不同:局部变量存放在栈内存中,方法调用完毕之后会自动释放内存;new出来的存放在堆内存,需要JVM的垃圾回收机制来回收(gc);方法区存放的是类的信息

Spring面试题

假如想象 提交于 2020-03-16 09:16:59
69道Spring面试题和答案 原文地址 译者:深海(1422207401@qq.com) 校对:方腾飞 目录 Spring 概述 依赖注入 Spring beans Spring注解 Spring数据访问 Spring面向切面编程(AOP) Spring MVC Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。 2. 使用Spring框架的好处是什么? 轻量: Spring 是轻量的,基本的版本大约2MB。 控制反转: Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。 面向切面的编程(AOP): Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 容器: Spring 包含并管理应用中对象的生命周期和配置。 MVC框架 :Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。 事务管理: Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。 异常处理: Spring 提供方便的API把具体技术相关的异常(比如由JDBC

spring面试题

梦想的初衷 提交于 2020-03-16 08:41:43
1.选择使用Spring框架的原因? 使用Spring: 第一是使用它的IOC功能,在解耦上达到了配置级别。 第二是使用它对数据库访问事务相关的封装。 第三就是各种其他组件与Spring的融合,在Spring中更加方便快捷的继承其他一些组件。 2.Spring 是如何管理事务的? spring的事务声明有两种方式,编程式和声明式。spring主要是通过“声明式事务”的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序,最大的好处是大大减少了代码量。 3.Spring IoC容器配置Bean的方式? 答: 基于XML文件进行配置。 基于注解进行配置。 基于Java程序进行配置(Spring 3+) 4.Bean 是如何被管理的? 在Spring框架中,一旦把一个bean纳入到Spring IoC容器之中,这个bean的生命周期就会交由容器进行管理,一般担当管理者角色的是BeanFactory或ApplicationContext。认识一下Bean的生命周期活动,对更好的利用它有很大的帮助。 概括来说主要有四个阶段:实例化,初始化,使用,销毁。 5.阐述Spring框架中Bean的生命周期? ApplicationContext容器中,Bean的生命周期流程如上图所示,流程大致如下: 1.首先容器启动后

Java之进阶(1) -《Effective Java》

牧云@^-^@ 提交于 2020-03-15 14:53:56
第1章 引言 第2章 创建和销毁对象 第1条:考虑用静态工厂方法代替构造器(Consider static factory methods instead of constructors) 第2条:遇到多个构造器参数时要考虑用构建器(Consider a builder when faced with many constructor parameters ) 第3条:用私有构造器或者枚举类型强化Singleton属性( Enforce the singleton property with a private constructor or an enum type) 第4条:通过私有构造器强化不可实例化的能力(Enforce noninstantiability with a private constructor) 第5条:避免创建不必要的对象(Avoid creating unnecessary objects) 第6条:消除过期的对象引用(Eliminate obsolete object references) 第7条:避免使用终结方法(Avoid finalizers) 第3章 对于所有对象都通用的方法 第8条:覆盖equals时请遵守通用约定 第9条:覆盖equals时总要覆盖hashCode 第10条:始终要覆盖toString 第11条:谨慎地覆盖clone

点读系列《Java编程思想 前6章》

好久不见. 提交于 2020-03-15 09:50:21
第1章 对象导论 计算机是头脑延伸的工具。 所有编程语言都提供抽象机制。 每个对象看起来都有点像一台微型计算机。 每个对象在内存中都有一个唯一的地址。 每个对象都有一个接口。 向对象发送消息。 每个对象都提供服务。 每个对象都可以很好地完成一项任务,但是它并不试图做更多的事。 public 任何人都是可用的。 private 除类型创建者和类型的内部方法之外的任何人都不能访问。 protected 与private作用相当,差别仅在于继承的类可以访问protected成员。 Java的默认访问权限:包访问权限,类可以访问在同一个包中的其他类的成员。 代码复用是面向对象程序设计语言所提供的最了不起的优点之一,复用某个类的最简单方式就是直接使用该类的一个对象。 在建立新类时,应该首先考虑组合(将一个类的对象置于新类中),而不是盲目的继承。 类与基类具有相同的类型。 通过继承而产生的类型等价性是理解面向对象程序设计方法内涵的重要门槛。 Java以extends关键字表示继承。 把一个对象不当做它所属的特定类型来看待,而是将其当做其基类的对象来对待。这样的代码不会受添加新类型的影响的。 通过导出新的子类型而轻松扩展设计的能力是对改进进行封装的基本方式之一。 编译器不可能产生传统意义上的函数调用。 在OOP中,程序直到运行时才能够确定代码的地址,这叫做后期绑定

Java 继承

一世执手 提交于 2020-03-15 01:20:04
知识点 什么是继承 继承是Java面向对象三大特性(封装、继承、多态)之一,用extends关键字表示继承,比如有A类、B类,B类继承A类,如下写法: public class B extends A{ } 通常我们管A类叫父类,管B类叫子类。 如果一个类没有写extends关键字,那这个类默认继承java.lang.Object类,Object类是所有类的祖先类。 何时用继承 继承通常是为了消除代码的重复、冗余,使代码更易维护。说白了就是将一些公共的属性、方法提取出来,放到一个通用的类中,然后有需要的类再继承这个通用的类。 比如普通员工和经理,他们都享有公司五险一金的基本福利,普通员工每年有一次国内游的福利,经理每年有一次带家人国内游以及一次国外旅游的福利。这里很明显可以把五险一金福利放到父类中,因为只要是公司员工就有,这是公共的福利。详见下文实例分析。 继承的限制 final类是不允许被继承的,final方法是不允许被子类重写的。通过关键字就很好理解,final是最终的意思,既然是最终了,那也就不会有下一层级的子类了。 不允许多继承(接口可以弥补这个缺陷,在接口中详解)。比如有A类、B类、C类三个类,C类不能同时继承A类、B类: public class C extends A,B { } 以上写法是错误的。 继承中子类拥有的权限 子类拥有父类所有非private的属性和方法;

JAVA中this用法小结

你说的曾经没有我的故事 提交于 2020-03-14 11:07:32
Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。 1 package test; 2 3 public class ThisTest { 4 5 private int i=0; 6 7 //第一个构造器:有一个int型形参 8 9 ThisTest(int i){ 10 11 this.i=i+1;//此时this表示引用成员变量i,而非函数参数i 12 13 System.out.println("Int constructor i——this.i: "+i+"——"+this.i); 14 15 System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1)); 16 17 //从两个输出结果充分证明了i和this.i是不一样的! 18 19 } 20 21 // 第二个构造器:有一个String型形参 22 23 ThisTest(String s){ 24 25 System

构造器Constructor是否可被Override(重写)

拥有回忆 提交于 2020-03-13 08:05:07
构造器Constructor不能被继承,因此不能被重写(Override),但是可以被重载(Overload) 如果父类自定义了有参构造函数,则子类无论定义构造函数与否,定义有参构造函数与否,都会报错,正确的做法是在子类的构造方法中添上super(参数),以表明子类构造之前先构造父类,而这句话必须放在第一句,否则报"Constructor call must be the first statement in a constructor"的错误。 类的加载顺序:   首先执行 父类的静态代码块/初始化静态变量(两者优先级相同),然后执行子类的静态代码/初始化静态变量(两者优先级相同,谁写在前面谁先执行),然后初始化父类成员变量/执行代码块{}(两者优先级相同),接着父类的构造器,然后子类的成员变量/代码块,最后子类的构造器。 来源: https://www.cnblogs.com/hellohbx/p/12484214.html

写代码的规范!!!!

旧街凉风 提交于 2020-03-13 04:35:40
代码规范 第一条:考虑用静态工厂方法代替构造器 原因:静态工厂方法第一大优势它们有名称,第二大优势,不必在每次调用时都创建一个新对象, 第三优势可以返回原返回类型的任何子类型的对象。 (冷不丁的想用枚举来做静态工厂实现) 第四优势在创建参数化类型实例的时候,他们使得代码变得更加简洁。 缺点当然也有:一:类如果不含共有或者受保护的构造器就不能被子类化,二:与其他静态方法没有区别。 遵守命名习惯可以弥补这一劣势,比如newtype创建新对象,gettype获取对象 所以,一般一个静态工厂方法需要有详细的注释,遵守标准的命名, 如使用getInstance、valueOf、newInstance等方法名; 第二条:遇到多个构造器参数时要考虑用构造器 第一中构造就是常见的重叠构造器,一个构造器中this(xxx)调用同名构造器,但是参数过多就容易懵了, 可以使用无参模式,build生成不可变对象。 第三条:用私有构造器或枚举类型强化Singleton属性(单例模式) 第四条:通过私有构造器强化不可实例化的能力 第五条:避免创建不必要的对象,重用不可变对象 小心自动拆装箱,要优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。 第6条:消除过期对象的引用:下面例子引用了arraylist的remove方法, 如果没有将元素置为null的话,就会随着垃圾回收器活动的增加