Java02-变量和运算符

1.关键字、保留字和标识符

  关键字是对编译器有特殊意义的单词,不同的关键字单词可以用来表示一种数据类型,或者表示程序的结构等。  关键字不能用作变量名、方法名、类名、包名。
  goto是java的保留关键字,意思是java并没有使用goto,以后是否使用未定。
  Java中的包、类、方法、参数和变量的名称总称为标识符。
标识符的命名规则:
a) 必须以字母、下划线(_)或美元符号($)开头;
b) 余下的字符可以是下划线、美元符号或任何的字母或数字,长度不限;
c) 标识符中不能有空格;
d) 不能使用Java中的关键字或保留字做为标识符。
  其中:
  项目名:全部小写。如:workdesk.
  包名:全部小写,名词。如:java.event.
  类名、接口名:首字母大写,多个单词组成时,每个单词的首字母大写。如:public class VariableClass {};
  方法名:首字母小写,多个单词组成时,从第二字单词开始,每个单词的首字母大写。如:public MainMachine getMachine() {};
  当java程序如果没有使用package声明包的名称,则编译器会自动添加一个default默认包(default是关键词,default不是包名,是没写的意思)。

2.常量、变量和数据类型

2.1常量

  在Java中,使用final修饰的变量称为常量,常量就是在运行过程中不能被修改的变量,其必须指定数据类型。可以在定义的时候初始化,或在构造方法中初始化。
  常量命名要大写。
  属性常量需要在定义时进行初始化,常量一旦被初始化就不能被修改。
  例1:
private static final String MAN = "男";
  属性常量如果在定义时没有进行初始化,可以在构造方法中初始化一次。
  例2:

private final String SEX;
public AbstractClass() {
		super();
		this.SEX = " ";
	}

  在JDK 7以后版本中,数值常量增加对下划线的支持。可以在数值常量中使用’_’来提升可阅读性。如:int a = 100_000_000;但不能在小数后面,或者数字的开始或结束的地方放下划线。

2.2 变量

  变量是在程序运行过程当中,用于暂存数据的一个字段或一个标识,可以保存程序运行时用户输入的数据或特定的运算结果等。
  变量的格式为:String(数据类型) name(变量名) =(赋值符号) “”数据值
  例1:

private String nameString = "hello";

  例2:

double salary;//声明变量
salary=1500.00;//变量赋初值
System.out.println(salary);//访问变量
int age=23;//变量初始化

2.3 变量的分类

  目标:为了在不同作用范作用域和范围下保存或传递数据。
  ①实例变量(非静态变量)Instance Variables(Non-Static Fields)
  实例变量:定义在类下面,无static修饰。是所属对象所私有的,一个对象的改变不影响其他对象。其可以在本类的实例方法中和同一个对象中共享数据。实例变量不能被静态方法引用。
  ②类变量(静态变量)Class Variables(Static Fields)
  类变量:定义在类下面,使用static修饰。是所有对象共有的,一个对象将它的值改变,其他对象得到的就是改变后的结果。其可以访问作用域范围内共享数据,是全局作用域。加了static是类变量,调用时不用新建实例对象,直接使用类名进行调用。Static修饰的方法不能被重载,但能被继承。
  ③局部变量 Local Variables
  局部变量是定义在方法内或者代码块内的变量,只在变量定义后的方法内部或代码块中有效。局部变量在使用前,必须先初始化。
  ④全局变量(成员变量)
  是定义在类中的变量,不可以进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0。
  ⑤参数 Parameters
  参数:定义在方法的参数列表,由参数类型和参数名构成,参数不能使用赋值符号进行赋值。其在方法内有效,在程序运行过程中根据调用情况和参数决定参数值。public static void main(String[] args)。这里的args变量是此方法的参数。
  例:实例变量和类变量的使用划分。

package chap2.classroom;
public class Variables {
	static int age;//类变量,使用static修饰
	public String name = "李四";//实例变量
	
	public static void main(String[] args) {
		Variables A = new Variables();
		A.age=10;
		A.name="张三";
		System.out.println(A.age);//结果为10
		System.out.println(A.name);//结果为张三
		Variables B = new Variables();
		//类变量的针对所有对象的,所以A.age=10,改变了age的结果,所以B.age的值也改变了。
		System.out.println(B.age);
		//实例只改变自身的,所以A.name="张三"的name的改变不影响B.name的值。
		System.out.println(B.name);
	}
}

2.4 基本数据类型分类

  在Java中,数据类型分为两类:基本数据类型和引用数据类型。
  数据类型一定要在常量名或变量名面前。
在这里插入图片描述
  其中,整数默认是int类型,小数默认是double类型的。
  字符类型可以表示一个字符图像和一个字符编号。其保存的是在字符编码表的位置,这个位置是一个index索引,是个数字。字符要用单引号表示,引号内部必须有个特定的符号。如:char c = ‘a’;并且字符串可以保留汉字,如:char c3=‘中’;
  boolean类型表示一种逻辑类型,真和假,对与错,正与反。只有true和false两个值。例:boolean bool1=true; boolean boo2=false;
  单精度浮点数必须以f或F结尾,双精度的小数以D或d结尾,如果不写默认是double类型。
  引用数据类型有类、接口和数组。类中有String字符串,字符串String是用双引号表示的,可以是空字符串。如:String str = “”;,String字符串的默认值是null,null是一种特殊的数据类型,如:String string=null;

2.5 进制数

  常用的进制数有二进制,八进制,十进制,十六进制。
  二进制:0 1
  八进制:0 1 2 3 4 5 6 7
  十进制:0 1 2 3 4 5 6 7 8 9
  十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F
  二进制数以0b或0B开头,例:int i3 = 0B1010101010101;
  八进制以(零)0开头,例:i3 = 01010101017;
  十六进制以(零)0x开头,例:i3 = 0xa1b2c3d4;

3.运算符和表达式

  运算符(操作符)是一种特殊的符号,用以表示数据的运算、赋值和比较。
  运算符的种类:
  赋值运算符:=、+=、﹣=、=、/=、%=
  算术运算符: +、﹣、
、/、%、++、 –
  比较运算符:>、<、>=、 <=、= =、!=、instanceof
  逻辑运算符:!、&&、||
  位运算符: &、|、^ 、 ~、>>、<<、>>>
  条件运算符: ?:
  逻辑运算符优先级:算数运算符>比较运算符>逻辑运算符>赋值运算符。对于复杂的表达式,按照运算的优先级别进行拆分句子。
  左移(<<)是乘,右移(>>)是除,每移动一位表示乘以2或除以2.
  例1:计算3^2,要求使用效率最高的方法计算。解:3<<2

System.out.print(3<<2);//输出为12

  instanceof用于判断某个对象是否在特定的数据类型,在反射或编程时常用
例2:

if(j  instanceof String){
			System.out.print("j的类型是字符串");
		}
Instanceof也用于数据类型强制转换前,进行类型判断使用,避免出现异常。

例3:

if(object instanceof Animal){
			Animal animal = (Animal)object;
			animal.sing();
		}else{
			System.out.println("不是类型还原,不能进行强制转换");
		}

  算数运算操作数必须是数值类型,分为一元运算符和二元运算符。一元运算符只有一个操作数,二元运算符有两个操作数,运算符在两个操作数之间。
  一元运算符:正‘+’,负‘-’,自加‘++’,自减‘- -’这四个。
  正负号(+,-):在数值前,表示正数还是负数
  自增、自减运算符: ++, –
  自增、自减运算符可以用于数值变量之前或者之后
  i++, 后++, 先将i的值作为整个表达的值, 然后将i增加1.
  ++i, 先++, 先将i增加1, 然后将i的值作为整个表达的值.
  i–, 后–, 先将i的值作为整个表达的值, 然后将i减少1.
  --i, 先–, 先将i减少1, 然后将i的值作为整个表达的值.
  例3:设 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是( )。

int x=1;
int y=2;
int z=3;
y+=z--/++x;//z和x是来自不同变量,所以z--不影响++x变量
System.out.print("y="+y);

  结果:y=3
  例4:

int k=3;
k+=++k-k-- *++k;//字母相同,k--会影响*后面的++k的计算。
//1.先算赋值符号的右边,2.运算级别高的先算,3.按照四则运算顺序
//整个流程等于:k=k+(++k-k--*++k)=3+(4-4*(5-1)),注意k--是k为原值,然后再参与*后面的运算,即第二个++k为5的值后要-1.
System.out.println("kk="+k);

  结果为:kk=-9

4.数据类型的转换

4.1 自动类型转换

  自动类型转换又称为隐式类型转换,当有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那一种数据类型,然后进行计算。
  自动转换规则:
  Boolean类型不可以转换为其他的数据类型。
  整型、字符型、浮点型的数据在混合运算中相互转换,转换时遵守以下原则:
  在这里插入图片描述
  byte、short、char之间不会相互转换,它们三者在计算时首先会转换为int类型。
  例:

int a1=12;
char a2='好';
int v=a1+a2;//自动类型转换把字符char类型自动转换int类型
System.out.println("v="+v);

  当把一个小范围的数据转换为大范围时,可以自动转换。当把一个大范围的数据转换为一个小范围时,需要进行强制转换,强制转换使用小括号转换。例:f=(float)d1;

4.2 强制类型转换

  强制类型转换又称为显示类型转换。容量大的数据类型转换为容量小的数据类型时,需要使用强制类型转换。格式如下:变量=(目标类型)值。
  例:

byte a;
int b;	
a = (byte)b;

  数据类型强制转化,会导致数据精度的损失,高数据位会全部损失掉;如果把小数转整数会把小数部分损失掉。

5.练习

1 已知a,b均是整型变量,写出将a,b两个变量中的值互换的程序。(知识点:变量和运算符综合应用) [必做题]
Ans:

  package classroom.chap2;
    import java.util.Scanner;
    public class Chap2Change {
    	public static void main(String[] args) {
    		System.out.print("请输入a,b的值:");
    		Scanner cs = new Scanner(System.in);
    		int a=cs.nextInt();
    		int b=cs.nextInt();
    		int t = a;
    		a = b;
    		b = t;
    		System.out.print("a="+a+",b="+b);
    	}
    }

2 给定一个0~1000的整数,求各位数的和,例如345的结果是3+4+5=12注:分解数字既可以先除后模也可以先模后除(知识点:变量和运算符综合应用) [必做题]

package classroom.chap2;
public class Chap2Sum {
	public static int sum(int x){
		int s = 0;
		while(x>0){
			s+=x%10;
			x=x/10;
		}
		return s;
	}
	public static void main(String[] args) {
		System.out.println(sum(35)); //sum方法是类方法,调用时不用新建实例对象
		}
}

3 华氏温度和摄氏温度互相转换,从华氏度变成摄氏度你只要减去32,乘以5再除以9就行了,将摄氏度转成华氏度,直接乘以9,除以5,再加上32即行。[选做题]
M1:

package chap2.chap3.work;
import java.util.Scanner;
public class chap2_3 {
	public static void main(String[] args) {
		double a;
		System.out.print("请输入华氏度a的值:");
		Scanner cs = new Scanner(System.in);
		a=cs.nextInt();
		double change_a=(a-32)*5/9;
		System.out.println("华氏度"+a+"转换为摄氏度后值为"+change_a);
		double change_b=change_a*9/5+32;
		System.out.println("摄氏度"+change_a+"转换为华氏度后值为"+change_b);
		cs.close();
	}
}

4 给定一个任意的大写字母A~Z,转换为小写字母。 (知识点:变量和运算符) [选做题]

package chap2.chap3.work;
import java.util.Scanner;
public class chap2_4 {
	public static void main(String[] args) {
		String a;
		System.out.print("请输入一个大写字母:");
		Scanner cs = new Scanner(System.in);
		String aa=cs.next();//字符串的值
		/*a=aa.charAt(0);//返回指定索引位置的char值
		char b =(char)(a+32);*/
		a=aa.toLowerCase();
		System.out.print(aa+"小写为"+a);
		cs.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值