1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 02 Java基础语法(变量+数据类型+运算符)

02 Java基础语法(变量+数据类型+运算符)

时间:2019-07-18 15:12:33

相关推荐

02 Java基础语法(变量+数据类型+运算符)

Java基础语法

2 基础语法2.1 二进制(复习总结)进制转换(二进制 八进制 十进制 十六进制)2.2 变量2.2.1 变量定义2.2.2 使用变量2.2.3 声明变量的3种方式2.3 数据类型和数据类型转换2.3.1 整数类型==拓展==2.3.2 浮点类型2.3.3 布尔类型2.3.4 字符类型-3种2.3.5 转义字符2.3.6 引用数据类型2.3.7 数据类型转换2.4 运算符2.4.1 算数运算符2.4.2 算数运算符:一元运算符2.4.3 赋值运算符2.4.4 关系运算符2.4.5 逻辑运算符2.4.6 三元运算符2.4.7 位运算符(详细见7种位运算符Markdown)2.4.7.1 **字符串连接符:+**2.4.8 运算符优先级2.4.9 表达式2.5 控制台录入2.6 编码(补充)2.6 编码(补充)

2 基础语法

2.1 二进制(复习总结)

​ 冯·诺依曼理论核心思想 计算机应该采用二进制。存储程序执行:程序和数据首先存入内存,并按照事先编写好的程序顺序执行。计算机硬件由运算器、控制器、存储器、输入设备、输出设备五大部分组成。
计算机是由电流驱动的,电流只有正极和负极,只有这两种状态,也就是说计算机底层实际上只能表示这两种状态,那他怎么能够表示现实世界中负责的数据呢?计算机就是采用二进制的方式来表示这些复杂数据的。电流只有正极和负极,那么就可以表示基本的两个数字:1和0而1和0这样的数字串组成的数字我们称为二进制。

​ 二进制的特点:满2进1位 (1 10 11 100…)

​ 十进制的特点:满十进1位 (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20…)

进制转换(二进制 八进制 十进制 十六进制)

​ 二进制转十进制

从右到左用二进制的每个数去乘以2的相应次方相加。

公式:从二进制的最右边开始,2的0次幂,2的1次幂,2的2次幂,2的3次幂...以此类推,然后让每一位和对应的二进制位相乘,然后将每一个相乘的结果再求和,就是最终的十进制。

十进制转二进制

除2取余,逆序排列。

公式:让十进制的数字除以2(不断的除以2,直到最后商是0为止),然后余数逆序输出,就是对应的二进制。

进制转换不是必须掌握的,在实际开发中也用不上,如果遇到了,不会转换,可以使用计算器。

2.2 变量

2.2.1 变量定义

概念:计算机内存中的一块存储空间,是存储数据的基本单元。

变量三要素:变量类型,变量名,变量值

2.2.2 使用变量
**申明变量(**申请内存地址) main自动填充​ 语法:数据类型 变量名;------int a;(数据类型空格变量名)变量初始化(给变量赋值)​ 语法:变量名 = 值;-------a = 10;使用变量(注意,变量初始化了才能使用)​ 语法:打印输出、方法传参、进行计算;-----System.out.println(a); sout自动填充输出

Java是强类型语言,变量的类型必须与数据的类型一致。

2.2.3 声明变量的3种方式

先声明,再赋值:【常用】

数据类型 变量名;

变量名 = 值;

声明并赋值:【常用】

数据类型 变量名 = 值;

多个同类型变量的声明与赋值:【了解】

数据类型 变量1 , 变量2 , 变量3 = 值3 , 变量4 , 变量5 = 值5;

public class test01 {public static void main(String[] args) {int a; //先声明a = 10; //再赋值System.out.println(a);int money = 10000;//声明变量+初始化System.out.println(money); }}public class test01 {public static void main(String[] args) {int b = 66;int c = 77;int d = 99; //连续定义System.out.println("c的值为"+c);}}//c的值为77public class test01 {public static void main(String[] args) {int a,b,c,d = 66; //相当于int a未赋值; 同 bc未赋值; int d = 66;System.out.println("c的值为"+a);}}//报错 不能输出a/b/c,仅仅能输出d

注意:在java中变量一定要初始化(赋值)才能使用

2.3 数据类型和数据类型转换

数据类型java是强类型语言,在定义变量的时候必须指定数据类型

基本数据类型(在java语言语法中已经定义好了的类型) 整数类型 byte short int long浮点类型(小数类型)float double布尔类型boolean字符类型char 引用数据类型 (String

2.3.1 整数类型

4种可表示数值范围不同,常用int和long

定义long类型的变量的时候尽量(long = 1000937766L)加上L l

拓展

二进制赋值 0b

八进制赋值0

十六进制赋值0x

byte n1= 0b1111;//输出15byte b=010; //输出8int c=0xFF; //输出255

2.3.2 浮点类型
float定义小数的时候要在后面加上F或f;double可加可不加,平时开发用double,精确度更高,可表示小数16位

float 精度6-7 、double 精度15-16

浮点型数值采用科学计数法表示:

​ 2E3 等价于 2 * 10 ^ 3(结果:2000.0)

​ 3E5 等价于 3 * 10 ^ 5(结果:300000.0)注意:double为浮点数的默认类型,如需为float类型赋值时,需要在值的后面追加“F”

float pi = 3.1415926F; //3.1415925 精度缺失double d1 = 3.1415926; // 3.1415926double d2 = 3.1415926E3; //3141.5926 科学计数法

拓展

double d3 = 1.4;//转二进制无法精确表示1.4,只能近似存储double d4 = 0.5; //转二进制为double d5 = 0.9; //近似存储System.out.println((d3-d4)/d5); //0.9999999999999999

double和float主要是做科学计算,科学计算允许一定范围内的误差

但是金融,会计要求不能有误差,采用BigDecimal

2.3.3 布尔类型

​ 可直接赋值true / false

​ 也可赋值一个结果为true / false的表达式

​ 注意:Java中的boolean不能参与算数运算

2.3.4 字符类型-3种

char c1 = 97; //a整数赋值,通过十进制数65在字符集中对应的字符赋值char c11 = 65;//Achar c2 = 'a'; //a字符赋值,通过''描述为字符赋值char c3 = '\u4f0D'; //伍unicode赋值,char c3 = '\u0041; //A unicode赋值,通过十六进制数41在字符集中所对应的字符赋值

前置知识1:

ASCII(American Standard Code for Information Interchange)美国信息交换标准码。

基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。

ASCII是最通用的信息交换标准,为英文字符设定了统一并且唯一的二进制编码。

前置知识2:

Unicode(万国码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求,(其中包含了ASCII编码)。

2.3.5 转义字符

public class Demo02 {public static void main(String[] args) {char e = '\'';//'char e1 = '\\'; // \char e2 ='\"'; // "char e4 = '"'; // "System.out.println(e);System.out.println(e1);System.out.println(e2);System.out.println(e4);System.out.println("姓名:张三 \n年龄:22 \n性别:男"); //换行// \r表示回车[回到行的最前面]System.out.println("12345677\rabc"); //在DOS输出abc45677 (前置并且替换);在idea输出abc// \t制表符[表格],内容对齐System.out.println("水果\t\t个数\t价格");System.out.println("桃子\t\t5个\t30元");System.out.println("西番莲\t2个\t15元"); //超过4个字符(英文8个),自动多占一个制表位/*** 水果个数价格* 桃子5个30元* 西番莲2个15元*/}}

2.3.6 引用数据类型
什么是字面值? 在java程序中的数据就是字面值。 在java程序中都有哪些字面值(数据)? 整数型字面值 1 2 3 4 -100 0 … 浮点型字面值 3.0 3.14 3.1415926 … 布尔型字面值(只有两个值) true 真false 假 字符型字面值(单个字符,并且使用单引号括起来的,就是字符) ‘a’‘b’‘中’‘国’ 字符串型字面值(凡是使用双引号括起来的,都是字符串) “a”“abc”“hello world,你好世界!”
2.3.7 数据类型转换

自动类型转换:

两种类型相互兼容。

目标类型大于源类型。

byte -->short–>int–>long–>float–>double

char -->int

byte short char 运算时会自动转成int类型

进行算数运算时:

两个操作数有一个为double,计算结果提升为double。

如果操作数中没有double,有一个为float,计算结果提升为float。

如果操作数中没有float,有一个为long,计算结果提升为long。

如果操作数中没有long,有一个为int,计算结果提升为int。

如果操作数中没有int,均为short或byte或char,计算结果仍旧提升为int。

特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String。

强制类型转换

两种类型相互兼容。

目标类型小于源类型

强制类型转换规则:

整数长度足够,数据完整。

​ 例:int i = 100; byte b = (byte)i; //b = 100

整数长度不够,数据截断。

​ 例:int i = 10000; byte b = (byte)i; //b = 16(符号位变化,可能变为负数)

小数强转整数,数据截断。

​ 例:double d = 2.5; int i = (int)d; //i = 2(小数位舍掉)

boolean的取值为true/false,不可与其他类型转换。

int n = 128;byte b =(byte)n;System.out.println(b); //-128

2.4 运算符

2.4.1 算数运算符

​ 两个操作数进行计算

int n1 = 10;byte n2 =4;System.out.println(n1/n2); //2//如果两个数字都是int整数,结果还是int整数double r =n1/n2;System.out.println(r); //2.0double r1 =(double)n1/n2;System.out.println(r1); //2.5

System.out.println(5.2%3); // 2.2System.out.println(-5.2%3); // -2.2System.out.println(3%5); //3 无法整除的,商0余3System.out.println(6%10); // 6System.out.println(-6%10); // -6System.out.println(5%-10); // 5System.out.println(1%10); // 1

//4687,求各个位上数字的和25public static void main(String[] args) {int num = 4678;int ge = num%10;int shi = num/10%10;int bai = num/100%10;int qian = num/1000;int sum = ge +shi +bai +qian;System.out.println(sum);}

2.4.2 算数运算符:一元运算符

​ (只有一个操作数)

int a = 3;int b = 4;int c = (++b)*2-(a--)%4+(a++)*5-(--b)/2+(--a);System.out.println(c);// 10-3%4+10-2+2 =17//b=5 a=2 a=3 b=4 a=2

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

​ 笔试考点

public class Demo {public static void main(String[] args) {//笔试考点int a =10;int b = a ++;System.out.println("b = " + b); //ib = 10System.out.println("a = " + a); //ia = 11int c = ++a;System.out.println("c = " + c); //ic = 12System.out.println("a = " + a); //ia = 12System.out.println(a++ + ++a); //ia = 12+14=26}}

2.4.3 赋值运算符

​ 等号右边值赋值给等号左边的变量。

//+=和+的区别byte b = 127;b+=1; //输出-128 不会类型提升b++; //输出-128 也不会类型提升//b=b+1; //编译不通过,会类型提升Incompatible types. Found: 'int', required: 'byte'

注意:运算后赋值(复合运算)的,不会自动类型提升(++ – += -= /= %= *=)

2.4.4 关系运算符

​ 两个操作数进行比较,结果是一个布尔值(true / false)。

注意float double 不要直接使用关系运算符比较(存储方式,精度丢失,近似存储,会出现误差)

​ 用包装类double float提供的方法

2.4.5 逻辑运算符

​ 两个boolean类型的操作数或表达式进行逻辑比较

int n1 =10;int n2 =8;System.out.println(n1<n2&&++n1>10); //false &&短路与之后的不执行System.out.println(n1); //10 System.out.println(n1>n2||++n1>10); //ture ||短路或之后的不执行System.out.println(n1); //10

前者false &&短路与之后的不执行

前者ture ||短路或之后的不执行

2.4.6 三元运算符

​ 将判断后的结果赋,值给变量

int java = 87;String level = java>=90?"优秀":java>=80?"良好":"一般";System.out.println(level);//或者直接sout嵌套int java = 92;System.out.println(java>=90?"优秀":java>=80?"良好":"一般");

public class Demo {public static void main(String[] args) {//提示用户输入两个正整数并使用变量记录System.out.println("请输入两个整数");Scanner sc = new Scanner(System.in);int a =sc.nextInt();int b =sc.nextInt();//使用三目运算符找到最大值并打印int max = a > b ? a : b;System.out.println("最大值是 " + max);System.out.println("最大值是 " + (a > ib ? a : b));}}

2.4.7 位运算符(详细见7种位运算符Markdown)

​ 对数值类型数据进行按位操作;1表示true、0表示false。

public class Program {public static void main(String[] args) {int n1 = 6; //0000 0000 0000 0000 0000 0000 0000 0110int n2 = 11; //0000 0000 0000 0000 0000 0000 0000 1011System.out.println(n1&n2); //2(0010)二进制数据按位与操作System.out.println(n1|n2); //15 (1111)二进制数据按位或操作System.out.println(~n1); //-7 即转换为1111111111111111111111111111111111111111111111111111111111111001按位取反(补码存储)System.out.println(n1^n2); //13 (1101)按位异或,相同为假、不同为真int n11 = 5; //0000 0000 0000 0000 0000 0000 0000 0101int n22 = 7; //0000 0000 0000 0000 0000 0000 0000 0111System.out.println(n11&n22); //5 (101)二进制数据按位与操作System.out.println(n11|n22); //7 (111)二进制数据按位或操作System.out.println(~n11); //-6 即转换为1111····1111 1010按位取反(补码存储)System.out.println(n11^n22); //2 (010--2)按位异或,相同为假、不同为真//右移>>(相当于除2)左边补符号位int n3 = 20; //二进制(1 0100)int n4=n3>>1; //10(01010) (最右右移1,最左补符号位,正数补0负数补1)int n5=n3>>2; //5(101)int n6=n3>>5; //0(移完了)int n7=n3>>32; //32的倍数,不变//左移<<(相当于乘2)右边补0//无符号右移>>>(相当于除2)左边补0int n8 = 30;n8 = n8>>>1; //15int n9 = -30;n9 = n9>>>1; //2147483633}}

右移>>(相当于除2)左边补符号位

左移<<(相当于乘2)右边补0

无符号右移>>>(相当于除2)左边补0

public class Program01 {//1.有一个整数8747,获取这个整数的二进制后四位//2.有一个整数8747,获取这个整数的二进制的第二个后四位public static void main(String[] args) {int x = 8747;//0010 0010 0010 1011System.out.println(x&0xF); //11System.out.println(x>>>4&0xF);//2}}

//面试题:不使用第三个变量交换两个数字public class Demo {public static void main(String[] args) {int x =10;int y = 20;//加减法;缺点,如果数据大可能会出现溢出x=x+y;y=x-y;x=x-y;//异或法x=x^y;y=x^y;x=x^y;System.out.println("交换后"+x+" "+y);}}

2.4.7.1字符串连接符:+

​ 如果字符串和基本数据类型变量、常量连接以后,结果变成了字符串。

public class Demo1229 {public static void main(String[] args) {//提示用户输入一个正整数的秒数并使用变量记录//提示用户输入正整数类型的秒数,拆分秒数后输出x小时x分x秒System.out.println("请输入一个正整数的秒数:");Scanner sc=new Scanner(System.in);int num=sc.nextInt();//将正整数的秒数拆分为时分秒后并使用变量记录//3666秒 =>1小时 1分钟 6秒钟//3666 / 3600 = 1小时 3666%3600 =66 /60=1分钟 3666%60=6秒钟int hour = num /3600; //拆分小时int min = num % 3600 / 60; //拆分分钟int sec = num % 60; //拆分秒钟//打印最终的拆分结果System.out.println("小时:" + hour + ",分钟:" + min + ",秒钟:" + sec);System.out.println("--------------------------------------------------------------------");//+可以作为字符串连接,又可以作为加法运算符//只要+两边的操作数中有一个操作数是字符串类型,则该+就被当做字符串连接符处理System.out.println(hour + min +sec); //8System.out.println(hour + min +sec+""); //8System.out.println(hour + min +""+sec); //26System.out.println(hour + ""+min +sec); //116System.out.println(""+hour + min +sec); //116System.out.println(""+(hour + min +sec)); //8}}

2.4.8 运算符优先级

​ 以下从上往下,优先级由高到低

优先级:

()优先级最高,赋值=优先级最低,算数大于关系,关系大于逻辑,乘除大于加减,短路与大于短路非

综合性:

大部分运算符从左向右结合,单目、三目、赋值结合性从右往左结合

public class Demo1229 {public static void main(String[] args) {//单目 结合性int a = 10;int b = -~++a;int c = (-(~(++a)));System.out.println(b); //12System.out.println(c); //13//三目int java =88;String level1 =(java>=90?"优秀":(java>=80?"良好":"一般"));String level2 =java>=90?"优秀":java>=80?"良好":"一般";System.out.println(level2);//++ --优先级 JVM栈,临时变量,还是先运算++int num1 = 10;int num2 =num1++ ;System.out.println(num2);//10System.out.println(num1);//11}}

2.4.9 表达式

表达式:使用运算符连接的变量或字面值,并可以得到一个最终结果

2.5 控制台录入

控制台录入指的是通过键盘输入数据与程序之间进行交互

程序运行中,可在控制台(终端)手动录入数据,再让程序继续运行。

导包语法:import 包名.类名;//将外部class文件的功能引入到自身文件中。

步骤:

导入Scanner类,import java.util.Scanner,

创建Scanner类型的变量(对象)

使用Scanner类的方法

​ .nextInt(); //获得整数

​ .nextDouble(); //获得小数

​ .next(); //获得字符串

​ .ext().charAt(0);//获得单个字符char x = input.next().charAt(0);

如果输入了不匹配的数据,则会产生 java.util.InputMismatchException

//格式类型import java.util.Scanner;public class Demo {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入一个整数");int age = input.nextInt();//intSystem.out.println("请输入一个小数");double num = input.nextDouble();//doubleSystem.out.println("请输入一个字符串");String name = input.next();//StringSystem.out.println("请输入一个字符");char x = input.next().charAt(0);//字符串char}}

//需求:控制台输入输出三门课程成绩,统计总分和平均分import java.util.Scanner;public class Demo {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入java成绩");int java = input.nextInt();System.out.println("请输入sql成绩");int sql = input.nextInt();System.out.println("请输入html成绩");int html = input.nextInt();System.out.println("总成绩为" + (java + sql + html));System.out.printf("平均分是%.2f",(java + sql + html) / 3.0);//保留两位小数System.out.printf("平均分是:"+"%.2f",(java + sql + html) / 3.0);}}

2.6 编码(补充)

tem.out.println(“请输入一个字符”);

char x = input.next().charAt(0); //字符串char

}

}

```java//需求:控制台输入输出三门课程成绩,统计总分和平均分import java.util.Scanner;public class Demo {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("请输入java成绩");int java = input.nextInt();System.out.println("请输入sql成绩");int sql = input.nextInt();System.out.println("请输入html成绩");int html = input.nextInt();System.out.println("总成绩为" + (java + sql + html));System.out.printf("平均分是%.2f",(java + sql + html) / 3.0);//保留两位小数System.out.printf("平均分是:"+"%.2f",(java + sql + html) / 3.0);}}

2.6 编码(补充)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。