JAVA学习(1天) #来源:异步图书

2022-07-24,,,

第三章 基础语法
3.1 常量变量

常量:值永远不会发生变化的量,可以表示固定的数字,字符,字符串
定义常量的关键字:final
例如:
final double PII=3.14;
final char MALE=‘M’,FEMALE=‘F’;

final double PI=value;
value=3.14;

PI是常量名称,常量名称一般为大写
value是常量的值
final表示该量只能被赋值一次

通常我们希望定义一个类常量,使得其能在多个方法中使用
但注意的是:类常量的定义在main方法外部

public class first{
/**在这一行**/
		/*这是一个main方法*/
		public static void main(String[] args){
		/*输出此消息*/
		System.out.println("第一段Java程序");
		}
}

变量:在运行过程中值随时会发生变化的量
在运行java程序过程中,变量内存空间中的值是变化的,这个内存空间就是变量的实体,这个内存空间也叫变量名

该区域的数据可以在同一数据类型范围内不断变化
内存空间是为了存储变量,所以即使申请了内存空间,变量也不一定有值,要想有值,一定要赋值

声明变量的基本格式:
typeSpencifer varName=value;
typeSpencifer可以使java语言中所有合法的数据类型
varName是变量名,变量常量的最大区别在于value的值的可有可无,还可以对其进行动态初始化
每个变量在使用前必须先声明再赋值才能使用
变量名必须是一个有效的标志符
不可以与关键字重复
建议使用有意义的单词或单词组合

变量又分为:局部变量(在一个方法快或一个函数内起作用),全局变量

局部变量运用实例

package one;

public class Zhen {
	public static void main(String args[])
	{
		//正方形面积计算
		double a1=12.2;
		double a2=a1*a1;
		System.out.println("正方形的面积为"+a2);
	}

}

全局变量实例

package one;

public class Zhenquanjvbianliang {
	int z1=2;  //定义全局变量z1并赋值
	boolean e;  //定义变量e 但不知道是用来干什么???

	public static void main(String[] args) {
		int z1=111;  //对z1进行重新赋值
		System.out.println("打印数据z="+z1);
		
		// TODO 自动生成的方法存根

	}

}

全局变量可以在局部里面被改变

3.2 数据类型

八种类型的取值范围

数据类型 位数 字节数 数值范围
byte 8位 1字节 -128~127
short 16位 2字节 -32768~32767
int 32位 4字节 -2的31次~2的31次-1
long 64位 8字节 -2的63次~2的63次-1
float 32位 4字节 3.4e-45~1.4e38直接赋值需要在数字后面加上f或F
double 64位 8字节 4.9e-324~1.8e308 赋值时可加d或D也可不加
boolean 只有true和false两个取值
char 16位 2字节 存储Unicode码 用单引号赋值

java决定了每种简单类型的大小 不会随机器结构的变化而变化

package come.inspur.ch2;

public class IntegerDemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		byte myByte = 127;
		short myShort = 32767;
		int myInt = 678;
		long myLong = 7890;
		long myLong1 = 33333333;
		System.out.println(myByte+"myByte的类型为:"+getType(myByte));
		System.out.println(myShort+"myShort的类型为:"+getType(myShort));
		System.out.println(myInt+"myInt的类型为:"+getType(myInt));
		System.out.println(myLong+"myLong的类型为:"+getType(myLong));
		System.out.println(myLong1+"myLong1的类型为:"+getType(myLong1));

	}
/**
 * 声明公用方法返回参数的数据类型
 * @param o
 * @return
 */
	public static String getType(Object o) {
		return o.getClass().toString();
	}
}

第十二行 如果数据范围超出了int 的最大值 要在数据后面加l或L就不会报错
打印显示数据的具体类型 用公共的方法getType


public class zhengxing
{
	public static void main(String[] args) 
	{
		//下面代码是正确的,系统会自动把56当成byte类型处理
		byte a = 56;
		/*
		下面代码是错的,系统不会把9223372036854775807当成long类型处理,
		所以超出int的表数范围,从而引起错误
		*/
		//long bigValue = 9999999999999;
		//下面代码是正确的,在巨大的整数常量后使用L后缀,强制使用long类型
		long bigValue2 = 9223372036854775807L;	
		//以0开头的整数常量是8进制的整数
		int octalValue = 013;
		System.out.println(octalValue);
		//以0x或0X开头的整数常量是16进制的整数
		int hexValue1 = 0x13;
		int hexValue2 = 0XaF;
		System.out.println(hexValue1);
		System.out.println(hexValue2);
	}
}

浮点类型
浮点数必须带一个小数点 不然会被当成int类型来处理

只有浮点类型的数才可以用科学计数法来表示
52000000是int类型 但是52E6是浮点类型

数据类型 所占位数 数值的范围
float 32 -3.403E38~3.403E38
double 64 -1.798E308~1.798E308
package come.inspur.ch2;

public class FloatDemo {
	public static void main(String[]args) {
		float myFloat=56.67F;  //后面一定要跟F  不然会报错
		double myDouble=56.98;
				System.out.println("myFloat:"+myFloat);
				System.out.println("myDouble:"+myDouble);
	}

}

字符类型
char 用于存放单个字符的数据类型,占两个字节,采用unicode编码
例如‘1’表示字符1而不是数字1
字符类型分为字符常量和字符变量
字符常量:用‘ ’ 括起来的一个字符 如‘A’
字符变量:在机器中占16位,其范围为0~65535
如char c=‘a’
变量c为char型,且赋初值为a

package come.inspur.ch2;

public class CharDemo {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		char myChar='a';
		char myChar1=97;
		System.out.println("myChar:"+myChar);
		System.out.println("myChar1:"+myChar1);
	}

}

转义字符 含义
\b 后退一格
\t 后退一大格
\n 换行
\f 换页
\\ 表示一个斜杠
\’ 表示一个单引号
\" 表示一个双引号
\r 接受键盘输入 相当于按回车

布尔类型
通过Boolean可定义布尔类型的变量,只有true和false两个值
分别代表逻辑中的真和假,Boolean值只能用作布尔运算,通常用在流程控制结构中作为判断条件

boolean flag=true;
if(flag){
System.out.println("如果flag值为true,则控制台打印此句话");

数据类型的转换
boolean类型与其他类型不能进行类型的转换,自动类型转换与强制类型转换都不可以

Java并不会把这个较小的整数常量 直接当成一个大的类型常量来处理,依然会当成小的类型常量来处理,但是此时这个小类型的变量的值会自动将类型转换为大的类型

自动类型转换:基本数据类型中,按照精度从低到高的顺序其优先关系为byte>short>int>long>float>double

例如,使用int类型的变量可以自动为float类型的变量赋值,此时int类型会自动转化为float类型

int num1=124;
float num2=num1;
System.out.println("num1:"+num1);
System.out.println("num2:"+num2);

输出结果为124
124.0

关系式
byte+short+char +int == int
byte+short+int+char +long==long
byte+short+int+char+long +float ==float
byte+short+int+char+long+float +double =double

package come.inspur.ch2;

public class TypeTransferDemo01 {
	/**
	 * 自动类型转换实例   自动类型转换规则
	 * @param args
	 */

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		byte b=127;
		int num=789;
		float f = 234;
		double d = 45;
		System.out.println("byte类型数据和int类型数据相乘:"+(b*num)+",结果的数据类型为:"
		+getType( (b*num)));
		System.out.println("byte类型数据和float类型数据相乘:"+(b*f)+",结果的数据类型为:"
		+getType( (b*f)));
		System.out.println("int类型数据和double类型数据相乘:"+(d*num)+",结果的数据类型为:"
		+getType( (d*num)));
		

	}
/**
 * 声明公用方法返回参数的数据类型
 * @param o
 * @return
 */
	public static String getType(Object o) {
		return o.getClass().toString();
		
	}
}




byte类型数据和int类型数据相乘:100203,结果的数据类型为:class java.lang.Integer
byte类型数据和float类型数据相乘:29718.0,结果的数据类型为:class java.lang.Float
int类型数据和double类型数据相乘:35505.0,结果的数据类型为:class java.lang.Double

布尔类型例子

package three;

public class Typeboolean {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
			boolean b;
			b=false;
			System.out.println("b的值是"+b);
			b=true;
			System.out. println("b的值是"+b);
			if(b)System.out.println("如果b的值是true,会显示这行文本");
	}

}

b的值是false
b的值是true
如果b的值是true,会显示这行文本

测试 定义两个布尔类型并赋值

强制类型转换
将高精度的数值赋给低精度的数值变量 必须使用强制类型转换
强制类型转换有一定语法要求 规则是
(类型名称) 要转换的值或变量

package come.inspur.ch2;

public class TypeTransferDemo02 {
	/**+
	 * 强制类型转换实例
	 * @param args
	 */

	public static void main(String[] args) {
		// TODO- 自动生成的方法存根
		//强制类型转换代码演示
		float f = 234;
		double b=45;
		
		//将float类型直接赋给int时会报错
		//int num1= f;
		
		//应该这样操作
		int mun_1=(int)f;
		//将double类型赋值给float类型 也必须进行强制类型转换
		float mun_b = (float)b;
		System.out.println("mun_1:"+mun_1+",数据类型为"+getType(mun_1));
		System.out.println("mun_b:"+mun_b+",数据类型为"+getType(mun_b));
		

	}
	
	/**声明公用方法返回参数类型
	 * @param o
	@return */
			 public static String getType (Object o) {
		 return o.getClass().toString();
	 }
}
mun_1:234,数据类型为class java.lang.Integer
mun_b:45.0,数据类型为class java.lang.Float

布尔例子

package three;

public class Typeofbooleaneg1 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		


		boolean b1 = true;
		boolean b2 = false;
		//下面代码将出现错误:字符串不能直接变成boolean型的值
		//boolean b3 = "true";
		//使用boolean和字符串进行连接运算,boolean会自动转换成字符串
		String str = true + "";
		//下面将输出true
		System.out.println(str);
	}



	}


输出 true

使用强制类型转换可能会导致精度的缺失

运算符

按照操作数目分 有
一元运算符 ++ - -
二元运算符 + - < > =
三元运算符 ? :

按功能分
算术运算符 加减乘除取余
位运算符 $ | ^ ~ >> << >>>
逻辑运算符 ! && ||
关系运算符 > < >= <= == !=
赋值运算符 =
扩展赋值运算符 += -= *= =
字符串连接运算符 +

基本运算符实例

package three;

public class Operatordemo1 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int a = 6;
		int b = 27;
		int c = 3;
		int d = (int)b/a;
		System.out.println(a-b);
		System.out.println(a*b);
		System.out.println(a/b);
		System.out.println(a/c);
		System.out.println(d);
		

	}

}

实例二
copy

package three;
import java.util.Scanner;

public class Operatordemo2 {

public static void main(String[] args) {
	// TODO 自动生成的方法存根
	   Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个英文字符串或解密字符串");
        String password = scan.nextLine();// 获取用户输入
        char[] array = password.toCharArray();// 获取字符数组
        for (int i = 0; i < array.length; i++) {// 遍历字符数组
            array[i] = (char) (array[i] ^ 20000);// 对每个数组元素进行异或运算
        }
        System.out.println("加密或解密结果如下:");
        System.err.println(new String(array));// 输出密钥
}

}

取余运算符
取余运算符一般用于除法中,它的取值不是商,而是余数
5/2 取余运算符取得是余数1

使用递增和递减运算符

package three;

public class Dione {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int a = 199;
		int b = 1009;
		System.out.println(a++);
		System.out.println(a);
		System.out.println(++a);
		System.out.println(a);
		System.out.println(b--);
		System.out.println(--b);
		System.out.println(b);

	}

}

a++会直接输出原数 但是加一
++a会输出+1后的数字

package three;

public class Dionedemo1 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int x=2;
		int y=3;
		int x1=7;
		int y1=8;
		System.out.println(x1+x++);
		System.out.println(x);
		
		System.out.println(++y-x);
		System.out.println(y);
		System.out.println(x);
		System.out.println(x1---y);
		System.out.println(y);
		System.out.println(--y1*y);

	}

}

减减y1*y首先 算的是自减后是乘

package three;
import java.math.BigDecimal;
public class Accultyfloat {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		
		
		
		
		        double money = 2;// 现有金额
		        double price = 1.1;// 商品价格
		        double result=money - price;
		        System.out.println("非精确计算");
		        System.out.println("剩余金额:"+result);// 输出运算结果
		        // 精确浮点数的解决方法
		        BigDecimal money1 = new BigDecimal("2");// 现有金额
		        BigDecimal price1 = new BigDecimal("1.1");// 商品单击
		        BigDecimal result1=money1.subtract(price1);
		        System.out.println("精确计算");
		        System.out.println("剩余金额:"+result1);// 输出精确结果
		    }
		

			
		

	}

package three;

public class Guanxi {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		int d=10;
		int k=12;
		int j=111;
		System.out.println(d<k||k<j);
		System.out.println(d>k&&k<j);
		System.out.println(!(d>k));

	}

}

实现2的累乘

package three;
import java.util.Scanner;
public class Guanxiyunsuanfu {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		
		
		
		  
		        Scanner scan=new Scanner(System.in);// 创建扫描器
		        System.out.println("请输入一个整数");
		        long number = scan.nextLong();// 获取输入的整数
		        System.out.println("你输入的数字是:"+number);
		        System.out.println("该数字乘以2的运算结果为:"+(number<<1));
		        System.out.println("该数字乘以4的运算结果为:"+(number<<2));
		        System.out.println("该数字乘以8的运算结果为:"+(number<<3));
		        System.out.println("该数字乘以16的运算结果为:"+(number<<4));
		    }
		

		
		
		
		
		

	}



表示a非

package fanli;

public class data15
{
public static void main(String[] args)
{
int a=2;
System.out.println("a 非的结果是:"+(~a));
}
}

2取反为-3
假设2以一个字节存储,则其补码为:00000010(正数的原码和补码是一样的),则取反后得到11111101这么一个补码,将这个补码转换成原码得到的结果就是-3了。转换过程如下:
11111101--将该数减1求反码得 11111100--除符号位外每位取反求原码得10000011,最高位表示符号位

条件运算符
作用 决定把哪个值赋值给前面的变量
语法格式
变量布尔表达式 ? 表达式1:表达式2

package three;

public class Judgegrade {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		int score = 68;
		String mark = (68>60) ? "及格":"不及格";
				System.out.println("考试成绩如何:"+mark);
		
		

	}

}

package three;

public class Tiaodemo1 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		
		
		        char x = 'X';   
		        int i = 0;   
		        System.out.println(true ? x : 0);    
		        System.out.println(false ? i : x);    
		    }   
		 

	}

输出  x
     88


直接复制的  没看懂`在这里插入代码片`
import java.util.Scanner;

public class VariableExchange {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);// 创建扫描器
        System.out.println("请输入变量A的值");
        long A = scan.nextLong();// 接收第一个变量值
        System.out.println("请输入变量B的值");
        long B = scan.nextLong();// 接收第二个变量值
        System.out.println("A=" + A + "\tB=" + B);
        System.out.println("执行变量互换...");
        A = A ^ B;// 执行变量互换
        B = B ^ A;
        A = A ^ B;
        System.out.println("A=" + A + "\tB=" + B);
    }
}


public class kuozhan
{
	public static void main(String[] args) 
	{
		//定义一个byte类型的变量
		byte a = 5;
		//下面语句出错,因为5默认是int类型,a + 5就是int类型。
		//把int类型赋给byte类型的变量9,所以出错。
		a = a + 5;
		//定义一个byte类型的变量
		byte b = 5;
		//下面语句将不会出现错误
		b += 5;
	}
}

public class OperatorSign {
	public static void main(String[] args) {
		int a = 3, b = 4;
		int intA = a / b; 				// 根据基本类型自动转换规则,除数与被除数都是整数,
		float intB = a / b;
		float intC = a / (b * 2.0f); 		// 对于声明为float类型的数字,数字后加f,
		double intD = a / (b * 2.0d); 	// 对于声明为double类型的数字,数字后加d.
		int a1 = 10;
		int b1 = 3;
		double c = 2;
		System.out.println("(intA=a/b),intA=" + intA);
		System.out.println("(intB=a/b),intB=" + intB);
		System.out.println("(intC=a/(b*2.0f)),intC=" + intC);
		System.out.println("(intD=a/(b*2.0d)),intD=" + intD);
		System.out.println(a1 + "/" + b1 + "=" + (a1 / b1));
		System.out.println(a1 + "%" + b1 + "=" + (a1 % b1));
		System.out.println(a1 + "/" + c + "=" + (a1 / c));
		System.out.println(a1 + "%" + c + "=" + (a1 % c));
		int x = 12;
		int a2 = x + x++;  		//定义一个自增的变量
		System.out.println("a2=" + a2);
		System.out.println("x=" + x);
		int b2 = x++ + x;
		System.out.println("b2=" + b2);
		System.out.println("x=" + x);
		int c2 = x + x--;			//定义一个自减的变量
		System.out.println("c2=" + c2);
		System.out.println("x=" + x);
		int d = x + --x;
		System.out.println("d=" + d);
		System.out.println("x=" + x);
	}
}

package three;

public class Daimafuzhi {

public static void main(String[] args) {
	// TODO 自动生成的方法存根
	
	
			int a = 3, b = 4;
			int intA = a / b; 				// 根据基本类型自动转换规则,除数与被除数都是整数,
			float intB = a / b;
			float intC = a / (b * 2.0f); 		// 对于声明为float类型的数字,数字后加f,
			double intD = a / (b * 2.0d); 	// 对于声明为double类型的数字,数字后加d.
			int a1 = 10;
			int b1 = 3;
			double c = 2;
			System.out.println("(intA=a/b),intA=" + intA);
			System.out.println("(intB=a/b),intB=" + intB);
			System.out.println("(intC=a/(b*2.0f)),intC=" + intC);
			System.out.println("(intD=a/(b*2.0d)),intD=" + intD);
			System.out.println(a1 + "/" + b1 + "=" + (a1 / b1));
			System.out.println(a1 + "%" + b1 + "=" + (a1 % b1));
			System.out.println(a1 + "/" + c + "=" + (a1 / c));
			System.out.println(a1 + "%" + c + "=" + (a1 % c));
			int x = 12;
			int a2 = x + x++;  		//定义一个自增的变量
			System.out.println("a2=" + a2);
			System.out.println("x=" + x);
			int b2 = x++ + x;
			System.out.println("b2=" + b2);
			System.out.println("x=" + x);
			int c2 = x + x--;			//定义一个自减的变量
			System.out.println("c2=" + c2);
			System.out.println("x=" + x);
			int d = x + --x;
			System.out.println("d=" + d);
			System.out.println("x=" + x);
		}
	


}

尽量用圆括号来控制优先级

字符串的初始化

强制类型转换
package three;

public class Daimaqiangzhi {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		double doublenum = 2.333;
		int intnum = 0;
		intnum =(int) doublenum;
		System.out.println(intnum);
		

	}

}

将浮点数强制转化为整型数

package three;

public class Daimaqiangzhi2 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		float num1 = 2.333f;
		int num2 = 3;
		int num3 = 0;
		num3 = (int) num1+num2;
		System.out.println(num3);
		
	}

}

注意点
1 定义常量
主要使用final关键字(灵活使用Static关键字)来进行常量的定义,当常量被设定后,一般情况下不允许更改
定义Java常量时,就要对常量进行初始化
关键字final不仅可以用来修饰基本数据类型的常量,而且可以用来修饰对象的引用或方法,数组就是对象引用
常量取名一般为大写,是为了和变量做区分

2 char
char类型用单引号引起来 字符串用双引号引起来
Java中单引号,双引号,反斜线都有特殊用途,若一个字符串中包含这些特殊字符,应该使用转义字符
表示c:\daima 应该写成 c:\daima

3 整数不可以除以0

课后练习
摄氏温度转华氏温度

package three;
import java.util.Scanner;
public class Zuoyeteansform {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入温度的值:");
		long A = scan.nextLong();
		double B = 0;
		B = A*33.8;
		System.out.println(B);
		
		
		

	}

}

计算圆的面积和周长

package three;
import java.util.Scanner;

public class Zuoyetransform2 {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		Scanner scan = new Scanner (System.in);
		System.out.println("请输入半径:");
		double A = scan.nextLong();
		double Square = 0;
		double Zhouchang = 0;
		final double Pi = 3.1415926;
		
		
		Zhouchang = 2*Pi*A;
		Square = Pi* A * A;
		System.out.println(Zhouchang);
		System.out.println(Square);
		

	}

}

本文地址:https://blog.csdn.net/weixin_52006337/article/details/113933747

《JAVA学习(1天) #来源:异步图书.doc》

下载本文的Word格式文档,以方便收藏与打印。