精华内容
下载资源
问答
  • 如何给静态常量赋值(final)

    千次阅读 2019-03-06 19:43:12
    倘若需要动态给这个常量赋值,可以放在static程序块中。且最好放在一个单独类中。这样,其他的类,就可以把它当成静态常量访问。 例: public final class Constants { public static final String OS_ARCH=...

    有些变量从一开始运行就不变,在c/c++/c#中用const修饰;而java用final类型表示

    倘若需要动态给这个常量赋值,可以放在static程序块中。且最好放在一个单独类中。这样,其他的类,就可以把它当成静态常量访问。

    例:

    public  final class Constants {
    
        public   static  final  String OS_ARCH=System.getProperty( "os.arch" );//取得操作系统属性
        public    static  final boolean JRE_IS_64BIT;//常量
    
            static {
                String x = System.getProperty( "sun.arch.data.model" );  //取得虚拟机系统属性
    
                if (x != null) {
                    JRE_IS_64BIT = x.contains( "64" );
    
                } else {
                    if (OS_ARCH != null && OS_ARCH.contains( "64" )) {
                        JRE_IS_64BIT = true;
                    } else {
                        JRE_IS_64BIT = false;
                    }
                }
            }
    
            public  void  print() {
                System.out.println(OS_ARCH);
                System.out.print( JRE_IS_64BIT );
            }
        }

    其他类访问语句:

    String str=  Constants.OS_ARCH;
    展开全文
  • public class Configuration...当我们需要给Configuration类中的CONFIG常量第一次使用时动态指定一个值时,而此时我们又不想去修改源代码,那我们有三种方法去实现这种需求。 第一种:使用一个static静态代码块来指定

    public class Configuration {
    
    public static final String CONFIG = "你想要指定的一些配置项";
    	
    }
    


    当我们需要给Configuration类中的CONFIG常量第一次使用时动态指定一个值时,而此时我们又不想去修改源代码,那我们有三种方法去实现这种需求。


    第一种:使用一个static静态代码块来指定,然后在静态代码块中,我们去动态读取外部的一个Properties文件的值。(最推荐)

    import java.util.Properties;
    
    
    /**
     * 第一种实现方法
     * @author William
     *
     */
    public class Configuration {
    
    	public static final String CONFIG;//常量声明时不马上初始化
    	
    	static {
    		Properties properties = new Properties();
    		//把一个properties读进来
    		CONFIG = "properties.getConfig";//通过properties的配置项config来初始化我们的常量config
    	}
    }
    
    第二种:我们可以配置Java的运行时配置,来指定一个-Dname=value的参数,这样也可以在类内部动态的接受到运行时指定的一个参数。

    /**
     * 第二种实现方法
     * @author William
     *
     */
    public class Configuration {
    
    	public static final String CONFIG;//常量声明时不马上初始化
    	
    	static {
    		CONFIG = System.getProperty("CONFIG");//通过系统的-D配置参数name=value形式来拿到这个配置值
    		//如果是eclipse,右键->RUN AS->Run Configurations->arguments->VMarguments 里输入(-DCONFIG=我们想要加入的配置)
    	}
    	
    	public static void main(String[] args) {
    		System.out.println(Configuration.CONFIG);
    	}
    }
    

    第三种:我们还可以读的到系统配置的PATH或者CLASSPATH里面的值,同理,我们也可以配置自己的环境变量,然后在程序中一样也能读到这些配置的环境变量。

    /**
     * 第三种实现方法
     * @author William
     *
     */
    public class Configuration {
    
    	public static final String CONFIG;//常量声明时不马上初始化
    	
    	static {
    		CONFIG = System.getenv("PATH");//通过System.getenv()方法可以拿到系统环境变量,但我自己指定的环境变量没有取得成功,如果有知道原因的给我留言哈谢谢
    		
    	}
    	
    	public static void main(String[] args) {
    		System.out.println(Configuration.CONFIG);
    	}
    }
    
    PS.System.getenv()方法,可以获得自己设定的系统变量,不过,在自己谁的设定过后一定要重启IDE工具,这样才能成功读取到。要不就会只读到一个null。



    展开全文
  • Java常量与静态常量能不能修改值

    千次阅读 2019-09-04 09:55:29
    import java.util.*; // 2019/9/4 public class ConstVarDemo { private final int v1 = 1; private static final int v2 = 2; private final List<Integer> list1 = new LinkedList<>(); p...

    直接上代码

    import java.util.*;
    
    // 2019/9/4
    public class ConstVarDemo {
    	private final int v1 = 1;
    	private static final int v2 = 2;
    
    	private final List<Integer> list1 = new LinkedList<>();
    	private static final List<Integer> list2 = new LinkedList<>();
    
    
    	// 基本类型常量修改
    	// 编译失败
    	public void test1() {
    		// System.out.println(v1);
    
    		// 以下操作错误: 无法为最终变量v1分配值
    		// v1 = 11;	// 修改常量的值
    
    		// System.out.println(v1);
    
    
    		// System.out.println(v2);
    
    		// 以下操作错误: 无法为最终变量v2分配值
    		// v2 = 22;	// 修改静态常量的值
    		// System.out.println(v2);	
    	}
    
    	// 对象引用常量状态进行修改
    	// 编译通过
    	public void test2() {
    		System.out.println(list1.toString());
    		list1.add(1);	// 常量引用
    		System.out.println(list1.toString());
    
    		System.out.println(list2.toString());
    		list2.add(2);	// 静态常量引用
    		System.out.println(list2.toString());
    	}
    	
    	// 改变对象类型常量的引用
    	// 编译失败
    	public void test3() {
    		// System.out.println(list1.toString());
    		// list1 = new ArrayList<>();	// 错误: 无法为最终变量list1分配值
    		// list1.add(1);
    		// System.out.println(list1.toString());
    
    		// System.out.println(list2.toString());
    		// list2 = new ArrayList<>();	// 错误: 无法为最终变量list2分配值
    		// list2.add(2);
    		// System.out.println(list2.toString());
    	}
    
    	public static void main(String[] args) {
    		new ConstVarDemo().test3();
    	}
    }
    

    总结

    • 不管静态常量还是普通常量只要是基本类型就不能在初始化后重新修改其值
    • 对象类型普通常量、静态常量可以在初始化后修改其对象状态,但不可以改变其引用
    展开全文
  • 静态代码块可以将在其之后出现的静态常量进行复制 比如底下这个例子,开始确实挺难理解的,觉得是肯定是static int m=100; 先执行,因为上面的静态代码块里m未定义类型,所以我特意将底下的定义类型给注释掉看结果 ...

    静态代码块可以将在其之后出现的静态常量进行复制

    比如底下这个例子,开始确实挺难理解的,觉得是肯定是static int m=100; 先执行,因为上面的静态代码块里m未定义类型,所以我特意将底下的定义类型给注释掉看结果

    public class Test {
        public static void main(String[] args) {
            A a = new A();
            System.out.println(a.m);
        }
    }
    class A{
        static{
            System.out.println("A类静态代码块" );
            m=200;
        }
        static int m=100;
        public A(){
            System.out.println("B类代码块");
        }
    }
    
    

    在这里插入图片描述

    可以看到,结果如下图。我分析了一下,以下是我的见解
    static int m=100
    这行代码其实是执行了两个步骤

    • 1.定义了一个int类型的常量
    • 2.对其进行赋值

    也就是说在为m进行初始化的时候m的初值应该是0,此时在常量池中为其开辟了空间。然后才是进行赋值操作。在赋值时,静态代码块和静态常量都是静态的,应当由上往下执行,所以m先被赋值为200,然后才执行到了m=100,这也就不难理解为啥最后输出的m是100

    在这里插入图片描述

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201704/25/1493109055_517070.png) ![图片说明]... 如图每次Test的时候性别总是为null,我想把Q仔Q妹换成“雄”和“雌”。该怎么改呢?新手求指点
  • Java基础学习笔记:静态常量

    千次阅读 2019-08-02 10:58:33
    在类中用public static final 修饰的变量 说明: public是为了方便访问 static是为了让其成为类的成员,而不是对象的成员。...final 修饰变量多用于声明一个常量 在变量被第一次赋值了之后,这个...
  • 修改一个常量类中的静态常量值,然后把常量类的class文件上传到服务器后并没有生效,多次重启服务,最后查询了相关...这里就牵扯到Java虚拟机编译机制:在Java文件中,指向编译时static final的静态常量, 会在运行...
  • Java类获取配置文件中的静态常量通过注解方式获取常量值@Value注解进行配置文件信息的获取@ConfigurationProperties注解获取配置文件 通过注解方式获取常量值 当我们在编写代码过程中,部分常量信息可能需要多处公用...
  • 主要介绍了springboot 使用yml配置文件给静态变量赋值教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • Java静态常量可以被覆写吗?在一个类中定义一个静态常量,它的子类类中定义一个同名的静态常量,这样可以吗?
  • Springboot 读取配置文件中的配置项赋值静态常量 在实际应用中,有这样的使用场景,需要设置全局变量,一般方法是写一个常量类,将全局变量保存为常量类的静态成员变量,这个方法的缺点是如果常量需要修改,或者...
  • kotlin中的静态常量的设置

    千次阅读 2019-09-03 21:37:13
    kotlin中的静态常量的设置kotlin中的静态常量的设置Java的写法kotlin写法 kotlin中的静态常量的设置 我们在编写Java的代码的时候经常会用到静态常量和静态变量,那么我们在kotlin中该如何定义我们的静态常量和静态...
  • String字符串赋值常量池原理 String简介 String设计为不可变类主要考虑到:效率和安全。 String常量池 由于String的不可变性,为了提高操作效率,所以设计常量池。从1.8开始,String常量池被放在了堆中,在1.8之前...
  • 下面的程序运行的时候出现段错误:char * str = "hello world"; (*str) += 32;原因:初始化时候虽然str是指针,但是指针指向的字符串“hello world”是常量,不能对常量进行修改。
  •    public class Test { ...//由static修饰,静态属性   int classNum;     public static void main(String[] args) {    Test person = new Test();  //在这个对象
  • 我们知道没有被任何修饰符修饰发成员属性当然会在编译完成后成为公共静态常量. 但是就像创建了有参构造器后默认的无参构造器失效一样,添加了部分修饰符的成员属性默认修饰是否会发生改变呢? 答案是并不会. 在使用...
  • SpringBoot中使用@Value()只能给普通变量注入值,不能直接给静态变量赋值 @Component public class AliSampleConfig { public static String accessKeyId; public static String accessKeySecret; public ...
  • Java静态变量初始化时机

    千次阅读 2015-06-05 10:55:17
    静态变量初始化方式: 1.声明时初始化; 2.静态块中初始化; 测试: package com.skymr.learn; /** * 静态变量初始化顺序测试 * @author skymr * */ public class InstanceTest2 { static int b = 11; ...
  • Java基础知识面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:11:27
    文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的...
  • Java常量Map、常量List

    万次阅读 2017-03-31 17:49:12
    Java 中声明常量我们一般使用 final 关键字来修饰,但是 final 一般只对基本数据类型有效,比如:public static final String content = "你好"; public static final int num = 1;如果我们需要一个常量的List或者...
  • 使用 Apollo 为静态变量赋值的方法

    千次阅读 2020-12-02 11:23:11
    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用...实际上,Apollo 仅支持直接为非静态属性赋值,因此当我们有这样的需求的时候,就需要我们变通一下,通过一些小技巧,来达成我们的目的了。
  • Java常量静态变量区别详解
  • final修饰的实例变量 我们先分析一下这个问题:深入Java虚拟机有一句是“ConstantValue属性的作用是通知虚拟机自动为静态变量赋值,只有被static关键字修饰的变量才可以使用这项属性。但为什么private final a = 10...
  • 写了一个程序,是从外面获取文件路径,然后进行处理,路径我用的是静态变量,根据路径获取的配置文件也设的静态变量。我现在想循环执行这个程序,每次路径都从外面获取,该...我想重新赋值这个静态变量该怎么做?
  • 对于基本数据类型的字段来说,如果使用 static final 修饰,则显式赋值(直接赋值常量,而非调用方法)通常是在链接阶段的准备环节进行。 对于 String 来说,如果使用字面量的方式赋值,使用 static final 修饰...
  • :父类的静态成员变量赋值静态代码块按顺序执行->子类的静态成员变量赋值静态代码块按顺序执行->父类的非静态成员变量赋值与非静态代码块的执行->父类的构造函数->子类的非静态成员变量赋值与非静态代码块的执行,...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,841
精华内容 39,136
关键字:

java静态常量赋值

java 订阅