构造方法

java 静态代码块和spring @value等注解注入顺序

末鹿安然 提交于 2019-12-01 22:15:39
java 静态代码块和spring @value等注解注入顺序 问题所在 先上代码 java方法 @Value("${mf.cashost}") public static String casHost; public static String getCasHost() { if (StringUtils.isEmpty(casHost)) { //casHost = "http://sso.abc.com.cn/sso/"; casHost = "http://ssotest.abc.com.cn/sso/"; } return casHost; } 配置文件 mf.cashost=http://sso.abc.com.cn/sso/ 正常我们想要的 getCasHost 的值,肯定是 sso.abc.com.cn ,而不是 ssotest ,但是如果调用 getCasHost 肯定是返回 test 的, 或者说,casHost最开始进到getCasHost的方法时,就是空的。 分析一波 关于实例变量与构造方法的初始化顺序问题 Java类会先执行构造方法,然后再给注解了@Value 的属性注入值,所以在执行静态代码块的时候,就会为null。 Java 及Spring 初始化顺序:java静态属性/静态代码块(根据声明的先后顺序加载)、构造代码块、 构造方法(即

Java命名规范

倾然丶 夕夏残阳落幕 提交于 2019-12-01 20:36:22
一、命名规范 1、 项目名全部小写 2、 包名全部小写 3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。 如: public class MyFirstClass{} 4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。 如: int index=0; public void toString(){} 5、 常量名全部大写 如: public static final String GAME_COLOR=”RED”; 6、所有命名规则必须遵循以下规则: 1)、名称只能由字母、数字、下划线、$符号组成 2)、不能以数字开头 3)、名称不能使用JAVA中的关键字。 4)、坚决不允许出现中文及拼音命名。 二、注释规范 1、 类注释 在每个类前面必须加上类注释,注释模板如下: /** * Copyright (C), 2006-2010, ChengDu Lovo info. Co., Ltd. * FileName: Test.java * 类的详细说明 * * @author 类创建者姓名 * @Date 创建日期 * @version 1.00 */ 2、 属性注释 在每个属性前面必须加上属性注释,注释模板如下: /** 提示信息 */ private String strMsg = null; 3、 方法注释

Java基础知识详解:abstract修饰符

二次信任 提交于 2019-12-01 20:32:08
目录 abstract详解 abstract和接口的区别 关于abstract的一些面试题 这篇主要分析abstract修饰符的用法,abstract和接口的比较以及常见的面试题。 abstract详解 abstract一般用来修饰类和方法。 1.abstract修饰类 abstract修饰类,会使得类变成抽象类,抽象类不能生成实例,但是可以作为对象变量声明的类型,也就是编译时类型。抽象类相当于类的半成品,需要子类继承并覆盖其中的方法。 注意: 抽象类虽然不能实例化,但是有自己的构造方法。 抽象类和接口(interface)有很大的不同之处,接口中不能有实例方法去实现业务逻辑,而抽象类可以有实例方法,并实现业务逻辑。 抽象类不能被final修饰,因为被final修饰的类无法被继承,而对于抽象类来说就是需要通过继承去实现抽象方法。 2.abstract修饰方法 abstract修饰方法会使得这个方法变成抽象方法,也就是只有声明,而没有实现,需要子类重写。 注意: 有抽象方法的类一定是抽象类,但是抽象类不一定有抽象方法。 父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现了,子类才有创建对象实例的能力,否则子类也必须是抽象类。抽象类中可以有构造方法,子类在构造子类对象时需要调用父类(抽象类)的构造方法。 抽象方法不能用private修饰

Java第三次动手动脑

佐手、 提交于 2019-12-01 20:27:48
称为类的“构造方法”,有时也习惯称为“构造函数”。 当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。 如果类没有定义构造函数,Java编译器在编译时会自动给它提供一个没有参数的“默认构造方法”。 动手动脑 1、以下代码为何无法通过编译?哪儿出错了? 如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。 如果一个类中既有初始化块,又有构造方法,同时还设定了字段的初始值,谁说了算? 1、执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 2、执行类的构造函数。。 类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。 动手动脑2、 请运行TestStaticInitializeBlock.java示例,观察输出结果,总结出“静态初始化块的执行顺序”。 class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out

C# 实例化类的执行顺序

♀尐吖头ヾ 提交于 2019-12-01 19:20:49
原链接 : https://www.cnblogs.com/nzbbody/archive/2011/12/29/2306403.html C# 实例化类的执行顺序 先进行细分: 类的成员分为:字段、属性、方法、构造方法 成员的修饰符:静态成员、实例成员 层次结构:父类、子类 先不考虑继承关系,执行顺序为: 静态字段 静态构造方法 实例字段 实例构造方法 属性和方法是在调用的时候才执行,这里就不考虑了。如何理解上面的执行过程?假如让我来设计执行过程,我该如何考虑,依据是什么? 首先,静态的东西是大家共享的,也就是相同的。应该先关心共享的东西,再关系个人的东西。“先公后私”,呵呵。 其次,实例化之前,应该先初始化自己的内部数据。 现在考虑继承关系,执行顺序为: 子类的静态字段 子类的静态构造方法 子类的实例字段 父类的静态字段 父类的静态构造方法 父类的 实例字段 父类的 实例构造方法 子类的实例构造方法 在子类的实例字段和子类的实例构造方法之间,加入了父类的执行顺序。这个其实也很好理解:在子类的实例构造方法之前,确实需要知道父类的信息,因为子类要从父类那里继承一些东西。这就好比,没有老子,哪来的儿子呢,呵呵。 这里需要特别注意的是,并不是每次实例化都是上面的顺序。因为静态的成员只是在第一次实例化的时候执行,以后再实例化都不会在执行。很好理解,静态的成员意味着大家共享,且只有这一个

java this关键字的使用

空扰寡人 提交于 2019-12-01 19:00:24
(1)this代表当前对象的一个引用。所谓当前对象,指的是调用类中方法或属性的那个对象。 (2)this只能在方法内部使用,表示对“调用方法的那个对象”的引用。但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。当前方法中的this引用会自动应用于同一类中的其他方法。 (3)this不能用于静态方法。main方法也是静态的,所以this也不能用于main方法。 (4)可以使用this关键字调用重载构造方法。避免相同的初始化代码,只能在构造方法中用,并且必须位于构造方法的第一句。并且,除了构造器之外,编译器禁止在其他任何方法中调用构造器。 来源: https://www.cnblogs.com/linwenbin/p/11713357.html

动手动脑

坚强是说给别人听的谎言 提交于 2019-12-01 18:21:55
以下代码为何无法通过编译?哪儿出错了? 应为定义了FOO的构造方法而不能运用系统的默认构造方法导致出错。 1.执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。 2.执行类的构造函数。 class Root { static{ System.out.println("Root的静态初始化块"); } { System.out.println("Root的普通初始化块"); } public Root() { System.out.println("Root的无参数的构造器"); } } class Mid extends Root { static{ System.out.println("Mid的静态初始化块"); } { System.out.println("Mid的普通初始化块"); } public Mid() { System.out.println("Mid的无参数的构造器"); } public Mid(String msg) { //通过this调用同一类中重载的构造器 this(); System.out.println("Mid的带参数构造器,其参数值:" + msg); } } class Leaf extends Mid { static{ System.out.println("Leaf的静态初始化块"); } {

2019101700(动手动脑部分)

北战南征 提交于 2019-12-01 17:03:46
1.Foo定义了一个有一个int型参数的构造方法,且没有定义其他构造方法。在子类有定义的构造方法时,将不再提供默认父类Object的构造方法,而下面使用构造方法时没有参数,因而报错。 2.先执行变量声明时的初始化,再执行静态初始化块,最后执行构造方法。 3.需要声明一个新的对象,或者将一个已有对象作为参数传入,访问时需要通过 对象名.变量 的形式访问。代码如下: public class Example { int x = 0; public static void test(Example ipt) { System.out.println(new Example().x); System.out.println(ipt.x); } public Example(int ipt) { x = ipt; } public Example() { } public static void main(String[] args) { Example exp = new Example(1); Example.test(exp); } } 来源: https://www.cnblogs.com/minadukirinno/p/11694929.html

Java基础知识

穿精又带淫゛_ 提交于 2019-12-01 16:35:50
- [1. 面向对象和面向过程的区别](#1-面向对象和面向过程的区别) - [面向过程](#面向过程) - [面向对象](#面向对象) - [2. Java 语言有哪些特点](#2-java-语言有哪些特点) - [3. 关于 JVM JDK 和 JRE 最详细通俗的解答](#3-关于-jvm-jdk-和-jre-最详细通俗的解答) - [JVM](#jvm) - [JDK 和 JRE](#jdk-和-jre) - [4. Oracle JDK 和 OpenJDK 的对比](#4-oracle-jdk-和-openjdk-的对比) - [5. Java和C++的区别](#5-java和c的区别) - [6. 什么是 Java 程序的主类 应用程序和小程序的主类有何不同](#6-什么是-java-程序的主类-应用程序和小程序的主类有何不同) - [7. Java 应用程序与小程序之间有那些差别](#7-java-应用程序与小程序之间有那些差别) - [8. 字符型常量和字符串常量的区别](#8-字符型常量和字符串常量的区别) - [9. 构造器 Constructor 是否可被 override](#9-构造器-constructor-是否可被-override) - [10. 重载和重写的区别](#10-重载和重写的区别) - [11. Java 面向对象编程三大特性: 封装

Java课后学习

回眸只為那壹抹淺笑 提交于 2019-12-01 15:59:41
  下段代码为何报错(new Foo())? 1 public class Practice { 2 public static void main(String[] args) { 3 Foo obj1 = new Foo(); 4 } 5 } 6 class Foo{ 7 int value; 8 public Foo(int initValue) { 9 value = initValue; 10 } 11 } 原因:若类提供了一个自定义的构造方法,将导致系统不再提供默认的构造方法。   运行下段代码: 1 class Root 2 { 3 static{ 4 System.out.println("Root的静态初始化块"); 5 } 6 { 7 System.out.println("Root的普通初始化块"); 8 } 9 public Root() 10 { 11 System.out.println("Root的无参数的构造器"); 12 } 13 } 14 class Mid extends Root 15 { 16 static{ 17 System.out.println("Mid的静态初始化块"); 18 } 19 { 20 System.out.println("Mid的普通初始化块"); 21 } 22 public Mid() 23 { 24