栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第二篇 变量、数据类型及运算符

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第二篇 变量、数据类型及运算符

因为刚开始没打算记到这里,所以截止到目前拖了两周的内容没有整理。

本篇以及上一篇作为2/17-2/27的内容。

本篇内容缺少数据类型部分(在另外一台电脑上),周一补发。

2/28-3/5内容明天补更新。

 一、变量

1、关于程序中的数据?
       开发软件解决现实中的问题-现实中的问题大多使用数据描述
       所以软件执行过程中最主要的就是对数据的处理。

       软件在处理数据之前需要能够表示数据,在java代码中,怎么去表示数据呢?
       在java中有这样一个概念:字面量
       10
       1.23
       true
       false
       "abc"
       'a'
       以上这些都是数据,在程序中都被叫做“字面量”

       字面量可以分为很多种类:
          整数型字面量:1 2 3 100 -20 ...
          浮点型字面量:3.14 1.2 1.5 ...
          布尔型字面量:true、false就这两个

           字符型字面量:'a' 'b' '中' ...
          字符串字面量:"abc" "a" "中国" ...
          需要注意的是:字符型和字符串型都是描述了现实世界中的文字,所有的字符型都需要''括起来,所有的字符串型都需要""括起来。
          字符型只能是单个字符,字符串无所谓

          在语法级别上,怎么区分字符型跟字符串型?(通过单双引号)

2、到底什么是变量?
        变量是内存当中存储数据的最基本的单元

        在java语言中任何数据都是有数据类型的:比如
          整数型是:int
          浮点型是:double...
          没有为什么,java规定的
          布尔型:boolean

        数据类型有什么用呢?
          记住:不同的数据类型在内存中分配的空间大小不同
          也就是说,java虚拟机到底给这个数据分配多大的空间,主要还是看这个变量的数据类型。
          比如,JVM自动分配给int整数类型的空间魏4个字节。

          1个字节=8个比特位
          1个比特位就是一个0或者1(比特位是二进制)
          即:1个int占有32个二进制位(bit位)

        变量的三要素:
          变量的数据类型
          变量的值
          变量的名称

          类型决定变量的大小
          起个名字是为了以后方便访问(以后在程序中访问这个数据是通过名称来访问的)
          值是变量保存的数据

        问题?变量名属于标识符吗?
          属于,命名规范:首字母小写,后面每个单词首字母大写,遵循驼峰命名方式,见名知意。

public class VarTest01{
	public static void main(String[] args){
		System.out.println(100);
		System.out.println(3.14);
		System.out.println(true);
		System.out.println(false);
		System.out.println('a');
		System.out.println('中');
		System.out.println("abc");
		System.out.println("国");

//什么是变量?
//分析:如果只有字面量,没有变量机制会有什么问题?
//内存说明:10是一个数据,在内存中占用一定的	空间
//10+20=30:在内存中找出一块空间存储10,再找一块存储20,CPU负责“+”,得出的结果30再找一块空间存储
//思考:以下的10占用一块还是三块空间?答案:虽然都是10,但占用三块
		System.out.println(10);
		System.out.println(10);
		System.out.println(10);//只有字面量机制会重复占用内存空间

		//定义/声明一个变量,起名i
		int i=1000;
		//以下这5次访问都是访问的同一块内存空间(使用变量后,内存得到了重复利用)
		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
		System.out.println(i);
		
		//以下程序表示访问的是字符i及字符串i,和变量没有关系!
		System.out.println('i');
		System.out.println("i");

	
	}
}


3、变量怎么声明/定义,语法格式是什么?
        数据类型 变量名;
        例如:
           int nianLing;

public class VarTest02{
	
	
	public static void main(String[] args){//这是一个程序入口,args是main方法的参数
		int nianLing=45;//定义一个int类型的变量,起名nianLing,该变量用来存储人的年龄
						//问题?不对变量手动赋值可以直接访问吗?
						//答:不行,编译报错,可能尚未初始化变量nianLing
						//java语言中:变量必须先声明再赋值才能访问。 不赋值相当于这片存储空间没有开辟出来。
						//怎么赋值呢?使用运算符"=",这个运算符被称为赋值运算符
						//“=”的运算特点是:等号右边先执行,执行完了再赋值给左边的变量
						//变量就相当于存放数据的一个盒子,可以重新赋值
						//变量可以声明的同时赋值:int nianLing=45;
			System.out.println(nianLing);


			//可以这样访问k变量吗?
			//注意:方法体中的代码遵循自上而下的顺序依次逐行执行
			//所以以下代码会编译报错:错误,找不到符号
			System.out.println(nianLing);
			//只有执行了这一行代码,k变量在内存中才会开辟空间。
			int k=10;

			
			//这个可以吗?
			//不行,报错:已在main(String[])中定义了变量k
			//重要的结论,同一个域中,变量名不能重复声明:
			int k=10;
			int k=20;
			//但是可以重新赋值:
			int k=10;
			k=20;


			//这样可以吗?
			//也不行:编译报错:i变量重复定义了(和类型没有关系)
			//重要的结论:与类型无关的变量不能重名。
			//整数型
			int i=10;
			System.out.println(i);
			//浮点型
			double i=1.2;
			System.out.println(i);



			//一行上可以同时声明多个变量吗
			//答案:可以
			int a,b,c=100;//声明三个变量,都是int类型,起名a,b,c
			//但是!!!注意:这里的意思是只给变量c赋值了,a,b	并没有赋值,所以如果运行会报错:
			//错误:可能尚未初始化变量a
			System.out.println(a);
			//错误:可能尚未初始化变量a
			System.out.println(b);
			System.out.println(c);

			//一定要先声明再赋值才能访问,代码运行遵循自上而下的顺序





		

	}
}

4、有关变量其他

关于变量的一个分类(要求背诵)
        变量根据出现的位置进行划分:
            在方法体中声明的变量:局部变量
            在方法体之外,在类体内声明的变量:成员变量
 注意:局部变量只在方法体中有效,方法体执行结束该变量的内存就释放了

       重点的依据是:声明的位置

public class VarTest03{

	//这里可以定义变量吗?可以的
	//成员变量
	int k=100;
	
	public static void main(String[] args){//主方法
		//局部变量
		int k=100;//main方法结束k内存空间释放。
	
	}
}


 5、变量的作用域
       什么是作用域:变量的有限范围;
       关于变量的作用域记住一句话:出了大括号就不认识了。

       编程语言中有一个很重要的原则:就近原则
       哪个离我近,就先访问哪一个

public class VarTest04{

	int i=100;//成员变量
	public static void main(String[] args){
	//局部变量
	   int i=200;//这个i的有限范围是main方法
	   System.out.println(i);//这个i是哪个i?是多少?200!!  
	}//大括号

	public static void x(){
	//在这个位置可以访问i吗?
	//不行,编译报错:找不到符号。
	//System.out.printlin(i)是无法访问的


	//可以在这里定义一个变量起名也是i吗?
	//可以,这个i在x方法的有效范围内
	int i=300;//这个i跟上面main方法中的i不在同一个域当中。不冲突

	
	}

二、数据类型

数据类型的相关内容在另一台电脑上,到时候补。

三、运算符

1、接收键盘输入

 输入信息到控制台是:
  System.out......

  那么如何接收键盘的输入呢?
  两个语句:

  前提:java.util.Scanner s = new java.util.Scanner(System.in)
  如果是接收一个正整数:
          
        int num = s.nextInt();

  如果是接收一个字符串:

          String str = s.next();

public class KeyInput{
	public static void main(String[] args){
		//这行代码的意思是,创建一个键盘扫描器对象
		//s是变量名,可修改,其他的不能修改。
		java.util.Scanner s = new java.util.Scanner(System.in);//这行代码写一次就够了

		//接收用户的输入,从键盘上接收一个int类型的数据
		//代码执行到这里的时候,会暂停下来
		//等待用户输入,用户可以在键盘上输入一个int类型的数据,回车之后,java把这个数据赋值给i
		//i变量就是用来接收键盘数据的。
		int i = s.nextInt();//i是变量名,s是上面键盘扫描器对象的变量名
		System.out.println("您输入的数字是:" + i);

		//代码执行到这里又会暂停下来,等待键盘的输入:
		String str = s.next();
		System.out.println("您输入了:" + str);



	}
} 

 接收键盘数据的第二种方法
    import java.util.Scanner
    以下示例:

//更有交互性
import java.util.Scanner;
public class KeyInput02{
	public static void main(String[] args){
		//创建一个键盘扫描器对象
		Scanner s = new Scanner(System.in);
		//输出一个欢迎信息
		System.out.println("欢迎使用计算器");
		System.out.print("请输入第一个数字:");
		int num1 = s.nextInt();
		System.out.print("请输入第二个数字:");
		int num2 = s.nextInt();
		System.out.println(num1 + "+" + num2 + "=" + (num1 + num2));

	}
}

2、算数运算符
        + 求和
        - 相减
        * 乘积
        / 商
        % 求余数(求模)
        ++ 自加1
        -- 自减1
        //这里重点掌握++、--(重点++,--同理)

public class OperatorTest01{
	public static void main(String[] args){
		int a = 10;
		int b = 3;
		System.out.println(a + b);//13
		System.out.println(a - b);//7
		System.out.println(a * b);//30
		System.out.println(a / b);//3
		System.out.println(a % b);//1

		//++可以出现在变量前,也可以出现在变量后,比如i++、++i是一样的,但还有一定的区别,下面说:
		//总之,运算完了变量结果自加1;

		int i = 10;
		i++;
		System.out.println(i);//11

		//那i++跟++i的区别在哪里呢?
		//先看出现在变量后,即i++:
		int m = 10;
		int n = m++;
		System.out.println(m);//11
		System.out.println(n);//10
		//语法:当++出现在变量后时,会先做赋值运算再+1,
		//所以上面的结果是:先把m的值赋给n,再做++运算的。


		//那++在前呢?
		//++在前时,先+1,再赋值
		int x = 20;
		int y = ++x;
		System.out.println(x);//21
		System.out.println(y);//21
		//y的值是21.

		//题目:
		int k = 80;
		
		System.out.println(k++);//80
		System.out.println(k);//81

		int j = 90;
		
		System.out.println(++j);//91
		System.out.println(j);//91

		//注意分析println的结构,其实其内部是存在一个赋值运算过程的:
		//即:先:int temp = k++;
		//    再:ln(temp);
		//所以上面的结果是80、81、91、91

	}
}

3、关系运算符
       >
       >=
       <
       <=
       ==
       !=

    一定记住一个规则:
    java语言中,所有关系运算符的运算结果都是布尔类型;
    不是true就是false,不可能是其他值。

    在Java语言中:
    =:赋值运算符
    ==:关系运算符,判断是否相等。

    注意:关系运算符中间不能加空格!!!!

public class OperatorTest02{
	public static void main(String[] args){
		int a = 10;
		int b = 10;
		System.out.println(a > b);//false
		System.out.println(a >= b);//true
		System.out.println(a < b);//false
		System.out.println(a <= b);//true
		System.out.println(a == b);//true
		System.out.println(a != b);//false

		}
}

4、逻辑运算符

&  逻辑与
        |  逻辑或
        !  逻辑非(取反)
        && 短路与
        || 短路或


    非常重要的结论:
        逻辑运算符的两边必须是布尔类型且其结果还是一个布尔类型。比如:
        //100 > 99 & 100 > 98;//true
        //100 < 99 & 100 < 98;//false

    //即 true & true ---> true

public class OperatorTest03{
	public static void main(String[] args){
		//对于逻辑与来说,有假为假
		System.out.println(true & true);//true
		System.out.println(true & false);//false
		System.out.println(true & false);//false

		//对于逻辑或来说,有真为真
		System.out.println(true | false);//true
		//...	
		//对于逻辑非(取反)来说
		System.out.println(!false);//true,注意!出现在表达式的前面。语法:(!(a>b)),需要加括号。
		




	//首先来理解一下短路现象什么时候会发生?
	
	//来看两种情况:
	int q = 10;
	int w = 11;
	System.out.println(q > w & q > w++);
	System.out.println(w);
	//输出结果为false、12.
	

	//再看:
	int m = 10;
	int n = 11;
	System.out.println(m > n && m > n++);
	System.out.println(n);
	//输出结果为false、11。说明&&后,n++没有执行了
	//这种现象就叫做短路现象。


	//问题?什么时候会发生短路或||现象?
	//或:有真为真
	//即左边的表达式结果为true的时候,右边的表达式不用执行,此时会短路。比如:
	int q = 10;
	int w = 11;
	System.out.println(q < w | q > w++);
	System.out.println(w);
	//输出结果为true、12.
	

	//再看:
	int m = 10;
	int n = 11;
	System.out.println(m < n || m > n++);
	System.out.println(n);
	//输出结果为true、11。说明&&后,n++没有执行了
	//这种现象就叫做短路现象。

	}
}

5、

赋值运算符
        包括:
       5.1、基本赋值运算符
            =
        5.2、扩展赋值运算符
            +=
            -=
            *=
            /=
            %=
        注意:编写的时候,两个符号之间不能有空格。

      5.3、很重要的语法机制:
           使用扩展赋值运算符的时候,永远都不会改变计算结果的数据类型。
           比如:
           byte x = 1;
           x += 1;
           x一出生就是byte类型,所以不论数据多大,x永远都是byte类型,超过127会强转。

           但是如果:
           byte x = 1;
           x = x + 1;
           编译的时候就会报错int类型的变量不能直接赋值给byte类型,原因是:
           前面说过,不同数据类型进行混合运算,谁大听谁的,所以(x + 1)是int类型,而左边的x是byte类型。

public class OperatorTest04{
	public static void main(String[] args){
		//赋值运算符右边优先级比较高,先执行右边的表达式,然后将表达式执行结束的结果放到
		//左边的“盒子”当中(赋值),如:
		int i = 20;
		System.out.println(i);//


		

		int k = 10;
		k += 20;//意思就是(k变量追加20)
		System.out.println(k);//以为意思是k变量追加20,所以结果为30,类似于k = k +20.

		//研究: k += 20真的与k = k +20完全一样吗?
		//答案,不一样。
	}
}

6、条件运算符(三目运算符):
    语法格式为:
        布尔表达式(true/false)?表达式1:表达式2
    执行原理为:
        布尔表达式的结果为true时,表达式1的执行结果作为整个表达式的结果;
        布尔表达式的结果为false时,表达式2的执行结果作为整个表达式的结果;

public class OperatorTest05{
	public static void main(String[] args){
		//100;//这样编译能通过吗?不能,报错,不是语句。
		boolean sex = false;
//		sex ? '男' '女'//这样行吗?不行,三目运算符是一个运算符,不是一个语句。
		//怎么修改?
		char c = sex ? '男':'女';//注意,运算结果的数据类型必须要与变量的类型相同!
		System.out.println(c);

	}
}

7、连接运算符(+):
        1、+运算符在Java中有两个作用:
            作用1:求和
            作用2:字符串拼接
        2、什么时候求和?什么时候拼接?
            当 + 两边都是数字的时候,求和;
            当 + 两边的任意一边是字符串类型,拼接。
        3、一定要记住,字符串拼接完之后结果还是一个字符串。

public class OperatorTest06{
	public static void main(String[] args){
		int nianLing = 35;
		System.out.println("年龄=" + nianLing);//年龄=35

		int a = 100;
		int b = 200;
		System.out.println(a + b + "300");//"300300"
		//+两边都是数字,求和;有一边字符串,拼接。
		//+的运算遵循自左向右一次运算的原则。

		//如何在控制台上输出"100+200=300"?
		System.out.println(a + "+" + b + "=" + (a + b) );//"100+200=300"


		//定义字符串型的变量:String,属于引用数据类型。
		//例如:
		String name = "Jack";
		System.out.println("姓名:" + name);//姓名:Jack

		//输出字符串“验证成功,欢迎Jack回来”。
		System.out.println("验证成功,欢迎" + name + "回来");
		//口诀:加一个双引号"",""中间加两个加号++,两个加号++中间加变量名。
	}
}

8、下面是6篇作业内容

//第一题 判断以下程序的输出结果:
//答案:
public class work01{
	public static void main(String[] args){
		int x = 10;
		int a = x + x++;//先计算后自增,可以理解为先a=x+x,然后x再++,--同理
		System.out.println("a=" + a);//"a=20"
		System.out.println("x=" + x);//"x=11"

		int b = x + ++x;
		System.out.println("b=" + b);//"b=23"
		System.out.println("x=" + x);//"x=12"

		int c = x + x--;
		System.out.println("c=" + c);//"c=24"
		System.out.println("x=" + x);//"x=11"

		int d = x + --x;
		System.out.println("d=" + d);//"d=21"
		System.out.println("x=" + x);//"x=10"

	}
}
//第二题 判断以下程序的输出结果:
//答案:
public class work02{
	public static void main(String[] args){
		int a = 15;
		int b = 2;
		double c = 2;
		System.out.println(a + "/" + b + "=" + (a/b));//"15/2=7"
		System.out.println(a + "%" + b + "=" + (a%b));//"15%2=1"
		System.out.println(a + "/" + c + "=" + (a/c));//"15/2=7.5"
		System.out.println(a + "%" + c + "=" + (a%c));//"15%2=1.0"    ????这里为什么是1.0不是0?

	}
}
//第三题 判断以下程序的输出结果:
//答案:
public class work03{
	public static void main(String[] args){
		boolean x,y,z;
		int a = 15;
		int b = 2;
		x = a > b;//true;
		y = a < b;//false;
		z = a != b;//true;
		System.out.println("x=" + x);//"x=true"
		System.out.println("y=" + y);//"y=true"  ?????绕进去了,为什么不是true?
		//boolean的值是程序判断的!!!!!不是你自己来说是真是假的!!!这就是原因
		System.out.println("z=" + z);//"z=true"

	}
}
//第四题 判断以下程序的输出结果:
//答案:
public class work04{
	public static void main(String[] args){
		int x;
		double y;
		x = (int)22.5 + (int)34.7;
		y = (double) x;
		System.out.println("x=" + x);//"x=56"
		System.out.println("y=" + y);//"y=56.0"

	}
}
//第五题 判断以下程序的输出结果:
//答案:
public class work05{
	public static void main(String[] args){
		int i = 5;
		int j = 5;
		int m = 5;
		int n = 5;
		i++;
		j = j + 1;
		m--;
		n = n-1;
		
		System.out.println(i);//6
		System.out.println(i++);//6
		System.out.println(++i);//8   ????意思是ln与ln也要从上到下?
		System.out.println(i--);//8
		System.out.println();//
		System.out.println(j);//6
		System.out.println(j++);//6
		System.out.println(j--);//7
		System.out.println(--j);//5
		System.out.println();//
		System.out.println(m);//4
		System.out.println(n);//4

	}
}
//第六题 判断以下程序的输出结果:
//答案:
public class work06{
	public static void main(String[] args){
		int i = 0;
		int j = 0;
		System.out.println(i);//0
		System.out.println(j);//0
		i++;
		++j;
		System.out.println(i);//1
		System.out.println(j);//1
		System.out.println("--------------");
		System.out.println(i++);//1
		System.out.println(++j);//2
		System.out.println("--------------");
		System.out.println(i);//2
		System.out.println(j);//2

	}
}

 2.27到此结束

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/756701.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号