Java基础-基础语法-变量与常量

Java工程师知识树 / Java基础

常量

常量有哪些

整数常量:包括了所有的整数
小数常量:包括了所有的小数
布尔型常量:较为特殊它只有两个值true和false,这个常量主要用于判断真与假,应用的较为广泛,比较常用。
字符常量:将一个字母、数字或者符号用单引号进行(' ')标识。
字符串常量:将一个或者多个字母、数字或者符号用单引号进行(" ")标识。

注意:

1)区分字符常量和字符串常量
字符常量是单引号引起来的单个,字符串常量是双引号引起来的不限长度
由于java采用Unicode编码,每个字符占两个字节,因而可用天十六进制编码形式表示,当然也可以用一个中文表示(单个中文占用两个字节)
2)"常量"这个名次还会用在另外其他语境中表示值不可变的变量

定义常量的方式有哪些

    /**
     * Method One 采用接口(Interface)的中变量默认为static final的特性
     */
    interface ConstantInterface {
        String SUNDAY = "SUNDAY";
        String MONDAY = "MONDAY";
        String TUESDAY = "TUESDAY";
        String WEDNESDAY = "WEDNESDAY";
        String THURSDAY = "THURSDAY";
        String FRIDAY = "FRIDAY";
        String SATURDAY = "SATURDAY";
    }
    /**
     * Method Two 采用了Java 5.0中引入的Enum类型
     */
    enum ConstantEnum {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    }
    /**
     * Method Three 采用了在final修饰的普通类中使用static final修饰变量的方法
     */
    public final class ConstantClassField {
        public static final String SUNDAY = "SUNDAY";
        public static final String MONDAY = "MONDAY";
        public static final String TUESDAY = "TUESDAY";
        public static final String WEDNESDAY = "WEDNESDAY";
        public static final String THURSDAY = "THURSDAY";
        public static final String FRIDAY = "FRIDAY";
        public static final String SATURDAY = "SATURDAY";
    }
    /**
     * Method Four 类似方法三,但是通过函数来获取常量
     */
    class ConstantClassFunction {
        private static final String SUNDAY = "SUNDAY";
        private static final String MONDAY = "MONDAY";
        private static final String TUESDAY = "TUESDAY";
        private static final String WEDNESDAY = "WEDNESDAY";
        private static final String THURSDAY = "THURSDAY";
        private static final String FRIDAY = "FRIDAY";
        private static final String SATURDAY = "SATURDAY";
        public static String getSunday() {
            return SUNDAY;
        }
        public static String getMonday() {
            return MONDAY;
        }
        public static String getTuesday() {
            return TUESDAY;
        }
        public static String getWednesday() {
            return WEDNESDAY;
        }
        public static String getThursday() {
            return THURSDAY;
        }
        public static String getFirday() {
            return FRIDAY;
        }
        public static String getSaturday() {
            return SATURDAY;
        }
    }
    public class TestConstant {
        static final String day = "saturday";
        public static void main(String[] args) {
            System.out.println("Is today Saturday?");
            System.out.println(day.equalsIgnoreCase(ConstantInterface.SATURDAY));
            System.out.println(day.equalsIgnoreCase(ConstantEnum.SATURDAY.name()));
            System.out.println(day.equalsIgnoreCase(ConstantClassField.SATURDAY));
            System.out.println(day.equalsIgnoreCase(ConstantClassFunction
                    .getSaturday()));
        }
    }

分析:首先定义全局变量似乎有违Java的面向对象的封装特性,增加的耦合。
所以最佳的方法是避免定义全局变量。
如果是参数等,可以写入配置文件。
如果实在是必须的,方法二是最为推荐的。
方法三是大家都能想到的,非常的直观。
方法一和方法三本质上一样。
方法四提供了灵活性。

阿里文档和常量有关说明:

【推荐】接口类中的方法和属性不要加任何修饰符号(public 也不要加),保持代码的简洁性,并加上有效的javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。
正例:接口方法签名:void f();
接口基础常量表示:String COMPANY = “alibaba”;
反例:接口方法定义:public abstract void f();
说明:JDK8中接口允许有默认实现,那么这个default方法,是对所有实现类都有价值的默认实现

【强制】不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。
反例: String key=”Id#taobao_”+tradeId;
cache.put(key, value);

【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存相关的常量放在类:CacheConsts下;系统配置相关的常量放在类:ConfigConsts类下。
说明:大而全的常量类,非得ctrl+f才定位到修改的常量,不利于理解,也不利于维护。
【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
1) 跨应用共享常量:放置在二方库中,通常是client.jar中的const目录下。
2) 应用内共享常量:放置在一方库的modules中的const目录下。
反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示“是”的变量:
类A中:public static final String YES = “yes”;
类B中:public static final String YES = “y”;
A.YES.equals(B.YES),预期是true,但实际返回为false,导致产生线上问题。
3) 子工程内部共享常量:即在当前子工程的const目录下。
4) 包内共享常量:即在当前包下单独建const目录下。
5) 类内共享常量:直接在类内部private static final定义。

【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。

变量

概念:

java变量是程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。

语法:

java程序中每一个变量都属于特定的数据类型,在使用前必需对其进行声明,声明格式为:
type varName [=value]

例如:

int i =100;
foloat f=12.3f;
double d1,d2,d3=0.123;//(声明了三个变量,其中d1,d2是默认值,d3=0.123)
String s="hello"

注意:从本质上讲,变量其实是内存中的一小块区域,使用变量名来访问这块区域,因此,每一个变量使用前必需先声明,然后必需进行赋值,才能使用。
java变量分类

分类:

按被声明的位置划分:

局部变量:方法或语句块内部定义的变量,只能在被定义的方法或语句块内使用
成员变量:方法外部、类的内部定义的变量,可以在整个类中使用,包括类里的方法或语句块内也可以使用

==注意:类外面是不能有变量的声明的==

成员变量与局部变量的区别

1、在类中的位置不同
成员变量:在类中方法外面
局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中)
2、在内存中的位置不同,可以看看Java程序内存的简单分析
成员变量:在堆中(方法区中的静态区)
局部变量:在栈中
3、生命周期不同
成员变量:随着对象的创建而存在,随着对象的消失而消失
局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失
4、初始值
成员变量:有默认初始值
局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错(The local variable xxx may not have been initialized)

变量命名建议:

  • 变量命名的方法建议采用基本结构为scope_typeVariableName的命名方法,
    使用3字符前缀来表示数据类型,3个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字
  • 选择有意义的名字,注意每个单词首字母要大写。
  • 在一段函数中不使用同一个变量表示前后意义不同的两个数值。
  • i、j、k等只作为小型循环的循环索引变量。
  • 避免用Flag来命名状态变量。
  • 用Is来命名逻辑变量,如:blnFileIsFound。
    通过这种给布尔变量肯定形式的命名方式,使得其它开发人员能够更为清楚的理解布尔变量所代表的意义。
  • 常用的量词后缀有:First(一组变量中的第一个)、Last(一组变量中的最后一个)、Next(一组变量中的下一个变量)、Prev(一组变量中的上一个)、Cur(一组变量中的当前变量)。

按所属的数据类型划分:

基本数据类型变量
引用数据类型变量

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,701评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,649评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,037评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,994评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,018评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,796评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,481评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,370评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,868评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,014评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,153评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,832评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,494评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,039评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,437评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,131评论 2 356

推荐阅读更多精彩内容