5. Java 中的变量 【连载 5】

从零开始学Java封面5.jpg

1. 理解 Java 中的变量

程序中需要处理数据,Java 中的变量是用来装载数据。变量类似一个盒子,我们通过这个盒子,就可以操作盒子里面的数据。

Java 中每个变量都有名称和数值。名称不会变化,但是里面的数值可以变化,像一个盒子里面可以去装不同的东西。

Java 变量中的值不一定总是数值,还可以是文本内容或者字母,还可以是其他类型的数据。

1.jpg

Java 中变量定义需要显示的指定存放数据类型,一旦指定,只能存储指定类型数据。当创建变量的时候,需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

2.jpg

Java 中变量是这样定义的:

data_type variable_name = value;

比如用变量 passengers 记录公交车每个站乘客的数量。

int passengers;//声明一个名字为 passengers的变量,指定存放数据类型为整数
passengers = 0;//为 passengers 变量初始化一个整数值 0

//也可以声明变量时,就初始化值。
int passenger1 = 10;//定义变量paasenger1,并初始化值为整数10

注意:这里的 “=” 不是数学里面等于的意思,是把右边的数据,赋值给左边变量。

3.jpg

定义变量后,可以对变量更新为不同的值。变量只保留最后一次更新的值。

[图片上传失败...(image-40991f-1513471949877)]

2. Java 中变量的命名约定

Java中变量的名字命名需要遵循一些规则:

1)变量名称中不可以有空格。比如 int pas senger = 0;是不合法的, 因为passengers中存在空格

2)变量名称可以以特殊字符开头,例如$和像和_ 像int $num = 10;是有效的定义。

3)根据Java编码标准,变量名应以小写字母开头;对于具有多个单词的冗长变量名称,可以这样做:int smallNumber; int bigNumber; (用大写字母开始第二个单词,也称为驼峰命名规则)。

4)Java 中的变量名称区分大小写,也就是int Num;int num;定义了两个不同的变量。

3. Java 变量中的类型

Java 变量中的类型分为三种:

1)静态变量(或者类变量)

2)实例变量

3)局部变量

3.1 静态变量

静态变量也被称为类变量,因为它们与类相关联,并且对于类的所有实例对象都是通用的。例如,A类中定义了一个静态变量 a,对于从 A 类的创建的任何实例对象都能够访问静态变量 a。如果通过一个实例对象改变了静态变量 a 的值,那么静态变量的改变会应用到其他所有的对象。实例说明一下:

public class StaticVariableExample {
    //定义一个静态变量
    public static String myClassVar = "class or static variable";

    public static void main(String[] args) {
        // 创建三个实例对象
        StaticVariableExample obj1 = new StaticVariableExample();
        StaticVariableExample obj2 = new StaticVariableExample();
        StaticVariableExample obj3 = new StaticVariableExample();

        //三个对象都可以访问 myClassVar ,输出 “class or static variable”
        System.out.println(obj1.myClassVar);
        System.out.println(obj2.myClassVar);
        System.out.println(obj3.myClassVar);

        //通过实例对象 obj2 改变静态变量 myClassVar的值
        obj2.myClassVar = "Change value for myClassVar";

        // 三个都会输出:"Change value for myClassVar"
        System.out.println(obj1.myClassVar);
        System.out.println(obj2.myClassVar);
        System.out.println(obj3.myClassVar);

    }
}

控制台输出:

class or static variable
class or static variable
class or static variable
Change value for myClassVar
Change value for myClassVar
Change value for myClassVar

静态变量可以理解为属于类(Class)模板的变量,不属于实例对象,但是对象可以访问。因为属于类模板,所有也可以直接访问静态变量,例如在上面实例的 main方法中可以直接这样打印输出:

System.out.println(myClassVar);

注意:只有静态变量可以这样直接访问。局部变量和实例变量不可以直接访问

3.2 实例变量

类的每个实例(对象)都有自己的实例变量副本。与静态变量不同,实例变量具有自己独立的实例变量副本。在下面的程序中使用obj2对象更改了实例变量值,并且当使用所有三个对象显示变量时,只有obj2值被更改,其他值保持不变。这表明三个对象都有自己的副本实例变量。

实例变量示例:

public class InstanceVariableExample {
    //定义实例变量
    String myInstanceVar = "instance variable";

    public static void main(String[] args) {
        //创建三个实例对象
        InstanceVariableExample obj1 = new InstanceVariableExample();
        InstanceVariableExample obj2 = new InstanceVariableExample();
        InstanceVariableExample obj3 = new InstanceVariableExample();

        //每个对象拥有实例变量副本,都输出:“instance variable”
        System.out.println(obj1.myInstanceVar);
        System.out.println(obj2.myInstanceVar);
        System.out.println(obj3.myInstanceVar);

        //obj2改变的只是自己的实例变量副本,不改变其他实例对象的实例变量
        obj2.myInstanceVar = "Change Text";

        System.out.println(obj1.myInstanceVar);
        System.out.println(obj2.myInstanceVar);
        System.out.println(obj3.myInstanceVar);

    }
}

控制台输出:

instance variable
instance variable
instance variable
instance variable
Change Text
instance variable

可以理解为实例对象拥有各自的实例变量,类只是定义了一个实例变量的模板。产生新的实例对象时,会从类模板拷贝实例变量给实例对象。

3.3 局部变量

什么是局部变量,顾名思义,该类型变量只在一个局部范围内有效,超出范围无效。外部就无法访问该变量。

局部变量是定义在一个类的函数里面,其作用范围被限制在该函数内部,外部无法访问该变量。

认识 Java 文章中介绍过函数的概念

下面,我用一个例子来说明:

public class LocalVaribleExample {

    //定义一个实例变量 myVar
    public String myVar = "instance variable";

    public void myMethod() {
        // 定义一个局部变量,只作用在该方法内部
        String myVar = "Inside Method";
        String myVar2 = "Inside Method 2"
        System.out.println(myVar);
    }

    public static void main(String[] args) {
        //创建一个实例对象
        LocalVaribleExample obj = new LocalVaribleExample();
        System.out.println("调用函数");
        obj.myMethod();
        System.out.println(obj.myVar);
        //System.out.println(obj.myVar2);//会编译出错,外部无法访问方法内局部变量
    }
}

控制台输出:

调用函数
Inside Method
instance variable

说明:局部变量的作用范围只在方法内部

如果不声明实例变量:

public String myVar = "instance variable";

那么,main 方法中的直接调用:

System.out.println(obj.myVar);

会抛出编译错误。因为无法在myMethod外更改和访问myVar局部变量。

4. 更多练习实例

4.1 Java程序来查找一个字符的ASCII值

ASCII是用于将英文字符表示为数字的代码,英文字母的每个字母都被分配了从0到127的数字。例如,大写字母P的ASCII代码是80。

在Java编程中,我们有两种方法来查找字符的ASCII值

1)通过给int变量分配一个字符

2)通过类型转换字符值为int

public class Demo {

    public static void main(String[] args) {

        char ch = 'P';
        int asciiCode = ch;
        // 强制转换char类型为int类型
        int asciiValue = (int)ch;

        System.out.println("ASCII value of "+ch+" is: " + asciiCode);
        System.out.println("ASCII value of "+ch+" is: " + asciiValue);
    }
}

控制台输出:

ASCII value of P is: 80
ASCII value of P is: 80

4.2 Java 程序中两个数字相乘

1)控制台输入两个整数,并打印结果:

import java.util.Scanner;

public class Demo {

    public static void main(String[] args) {

        /* 读取用户的键盘输入的扫描器对象
         */
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter first number: ");

        // 读取键盘输入的数字,并赋值给变量num1
        int num1 = scan.nextInt();
        
        System.out.print("Enter second number: ");
        int num2 = scan.nextInt();

        // 使用后关闭扫描器
        scan.close();
        
        // 计算两个整数相乘的结果
        int product = num1*num2;
        
        //控制台打印乘法结果
        System.out.println("Output: "+product);
    }
}

控制台:

Enter first number: 20
Enter second number: 6
Output: 120

2)两个小数相乘:

这里我们使用数据类型double来表示数字,可以输入整数以及浮点数。

import java.util.Scanner;

public class Demo {

    public static void main(String[] args) {

        //读取用户的键盘输入的扫描器对象
        Scanner scan = new Scanner(System.in);
        System.out.print("Enter first number: ");

        // 读取键盘输入的数值,并赋值给变量num1
        double num1 = scan.nextDouble();
        
        System.out.print("Enter second number: ");
        double num2 = scan.nextDouble();

        // 使用后关闭扫描器
        scan.close();
        
        // 计算两个数值相乘的结果
        double product = num1*num2;
        
        //控制台打印乘法结果
        System.out.println("Output: "+product);
    }
}

控制台:

Enter first number: 1.5
Enter second number: 2.5
Output: 3.75

4.3 计算三角面积

1)用户输入宽和高

import java.util.Scanner;
class AreaTriangleDemo {
   public static void main(String args[]) {   
      Scanner scanner = new Scanner(System.in);

      System.out.println("Enter the width of the Triangle:");
      double base = scanner.nextDouble();

      System.out.println("Enter the height of the Triangle:");
      double height = scanner.nextDouble();

      //Area = (width*height)/2
      double area = (base* height)/2;
      System.out.println("Area of Triangle is: " + area);      
   }
}

控制台输出:

Enter the width of the Triangle:
2
Enter the height of the Triangle:
2
Area of Triangle is: 2.0

2)程序中定义宽和高

class AreaTriangleDemo2 {
   public static void main(String args[]) {   
      double base = 20.0;
      double height = 110.5;
      double area = (base* height)/2;
      System.out.println("Area of Triangle is: " + area);      
    }
}

控制台输出:

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,567评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,066评论 0 62
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,627评论 0 11
  • 说话是我的硬伤,《你说话的温度,决定你人生的高度》([日] 斋藤孝)里指出说话要避免的误区我都拥有:水话连篇、半天...
    张丫舞棹阅读 151评论 0 0
  • 每个人都是一座孤岛。 而你来自哪片海?
    安素心阅读 211评论 0 0