上节课问题解决
cmd 下Java输出乱码问题
解决乱码问题的方法:cmd运行java出现中文乱码解决方法 – 智云一二三科技
本次课知识点:变量,类型和运算符
1.编程的过程(Java编程步骤)
一部分编程语言是编译性语言(C,C++…..)
一部分编程语言是解释性语言(JavaScript,python,…)
Java是半编译半解释语言(JVM)
书写源代码➡编译源代码➡class代码➡运行class代码
2.编程的语法(Java语法)
编程的语法风格: 1.{} 2.换行块
Java编程程序结构
xxx{
xxx;
}
边界符:切记:必须是英文状态输入,且成对出现
{} [] () ‘’ “”
程序执行入口:包含了main方法的类
// 类
public class A{
// 方法
public static void main(String[] args){
Systom.out.println("sfsdf.");
}
}
复合语句和简单语句
复合语句也称块语句,复合语句有大括号“{”开始,”}”结束。复合语句中的每个语句都是从上到下被执行的。
复合语句是一个整体,从语法上讲,一个复合语句被看成一个简单语句。
复合语句中还可以嵌套复合语句;
简单语句:是单独的一条语句,有“;”结束语句。
2.1、变量
变量是表示一个可以变化的数据值
如果数据值不变化,称为常量
变量语法模板:
定义:type varName [= value];
数据类型 变量名称 = 变量值;
变量名组成部分:数字,字母,下划线_和 $ 组成,不能以数字开头,不能使用关键字。
变量名的命名规范:小写字母开头,后续单词首字母大写。驼峰命名法,见名知意
类名命名规范:类名首字母大写。
方法名命名规范:方法名首字母小写
2.2、常量
如果数据值不变化,称为常量
常量用关键词final修饰。
优点:比较安全
推荐做法:
(1)常量名通常大写
(2)不同字符使用下划线分隔
(3)只能被赋值一次,通常定义时即对其初始化
final int NUM = 10;
final double PI = 3.14;
int r = 2;
double area = PI * r * r;
System.out.print(area); //12.56
System.out.println(Math.PI); //3.141592653589793
System.out.println(Math.E); //2.718281828459045
2.3、数据类型
Java数据类型:基本数据类型(原始数据类型) 和 引用数据类型
1.基本数据类型(8种):Boolean byte short char int float long double
数据类型 | 大小 | 取值范围 |
---|---|---|
byte | 1字节8位 | -128(2^7) ~ +127(2^7-1) |
short | 2字节16位 | -32768 (-2^15) ~ + 32767 (+2^15-1) |
int | 4字节32位 | -2147483648(-2^31) ~ + 2147483647(2^31-1) |
long | 8字节64位 | -2^63 ~ + 2^63-1 |
float | 4字节32位浮点数 | 1.4E-45 ~ 3.4E+38 , -1.4E-45 ~ -3.4E+38 |
double | 8字节64位浮点数 | 4.9E-324 ~ 1.7E+308, -4.9E-324 ~ -1.7E+308 |
char | 2字节(char是单字符的一种基本数据类型) | 0~65535 |
取值范围:负2的(类型位数 - 1)次幂 到 (2的(类型位数 - 1)次幂) - 1
小数点的数值默认是double
练习:
package day02;
public class student{
public static void main(String\[\] args) {
/*
* int double long float
*/
int num = 10;
float a = 10;
a = 12.2f;
System.out.println("a :" + a);
System.out.println("num的值为:" + num);
/*
* char
*/
double aa = 11.1;
int cc = (int)aa;
System.out.println("---------"+cc);
char b = 33221;
char c = '中';
System.out.println("强转c : " + (int)c);
System.out.println("b : " + b);
//byte
//byte d = 128; // error 因为byte的范围是-128~127
byte d1 = (byte)200; // 规律:超出byte取值范围:+值-128+(-128) 200-128-128
System.out.println(d1);
byte d5 = (byte)-300; // 规律:超出byte取值范围: -值-(-128)+ 128 -300-(-128)+128
System.out.println("d5 : " + d5);
byte d2 = 2;
byte d3 = 3;
byte d4 = (byte)(d2 + d3); // byte 相加可能超出byte的取值范围
System.out.println("d2 : " + d2);
System.out.println("d4 : " + d4);
}
}
boolean
booLean a = true;boolean b = false;
在java中,boolean值只能是true(真)和false(假),
boolean 创建的对象的值默认是 false,
自动类型转换:大类型变量 = 小类型变量
- 两种类型要兼容:数值类型(整型和浮点型)互相兼容
- 目标类型大于源类型
强制类型转换: 小类型变量=(小类型)大类型变量
例如:
// 自动类型转换
int num = 10;
double num2 = num;
System.out.println("---"+ num2); //输出10.0
// 强制类型转换
double a = 11.1;
int c = (int)a;
System.out.println(c); //输出11,精度丢失了
char c = '中';
System.out.println("强转c : " + (int)c);
String是一个对象,
String的默认值也是null,
‘ ‘表示 char字符,这个数据是一个符号
“ “表示 String字符串,一系列字符
连接符:字符串的连接使用:“+”操作符
案例:
package day03;
public class Demo1 {
public static void main(String[] args) {
// 通过需求分析,需定义三个变量
double score = 98.5;
String name = "易建联";
char sex = '男';
System.out.println("姓名:" + name + "\n性别:" + sex + "\nJava成绩:" + score);
System.out.println("一名叫" + name + "的中国" + sex + "球员,成绩是:" + score);
}
}
2.4.转义符
转义符:\n
\t
\r
\n : 换行,将当前位置移动到下一行开头
\t : 制表符,8个空格,相当于Tab
\r : 回车,将当前位置移动到本行开头
2.5.输入工具类:Scanner
使用Scanner:
第一步:导入Scanner类
import java.util.Scanner;
第二步:创建Scanner对象
Scanner input = new Scanner(System.in);
第三步:获得键盘输入的数据
int now = input.nextInt();
package day03;
import java.util.Scanner;
public class Demo5 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 通过需求分析,需定义三个变量
System.out.print("请输入分数:");
double score = scanner.nextDouble();
System.out.print("请输入姓名:");
String name = scanner.next();
System.out.print("请输入性别:");
String sex = scanner.next();
System.out.println("一名叫" + name + "的中国" + sex + "球员,成绩是:" + score+"分");
}
}
Scanner中输入跳过的原因?
Scanner 类对象中的 nextDouble() 和 nextLine() 方法内部读取原理不同导致跳过输入过程,当先输入分数时调用的是nextDouble()方法,读取完后剩下一个Enter回车符,接下来输入姓名的时候,调用的是nextLine()方法,这时刚好有一个Enter回车符,它便以为输入完了就直接将Enter前面的空串读取进去了,所以我们看着的效果就像是直接跳过了输入名字过程。解决方法如下:
1,在调用nextInt()方法之后,nextLine()方法之前,加上一个语句 scanner.nextLine(); 将nextInt()读取后剩下的Enter回车符先读取掉。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号:");
int snum = scanner.nextInt();
scanner.nextLine();//将回车符读取出来
System.out.println("请输入姓名:");
String name = scanner.nextLine();
System.out.println("你的姓名和学号为:"+name+"-"+snum);
2,使用 next() 方法之前代替 nexLine() 方法。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号:");
int snum = scanner.nextInt();
System.out.println("请输入姓名:");
String name = scanner.next();//使用next()方法之前代替nexLine()方法
System.out.println("你的姓名和学号为:"+name+"-"+snum);
3,都使用nextLine()方法,赋值的时候再进行类型转换。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入学号:");
int snum = Integer.parseInt(scanner.nextLine());
System.out.println("请输入姓名:");
String name = scanner.nextLine();
System.out.println("你的姓名和学号为:"+name+"-"+snum);
2.6.运算符
1.赋值运算符 =
变量名 = 表达式;
基本的算术运算:+、-、* 、/、%、++、--
复合算术运算符:+=、-=、*=、/=、%=
package day03;
public class Demo6 {
public static void main(String[] args) {
int a = 9;
int b = 4;
// 方式1:a 和 b 的值互换 借助第三个参数
int c = a;
a = b; // a = 4
b = c; // b = 9
// 方式2:a 和 b 的值互换,加减
a = a+b; //13
b = a-b; // 9
a = a-b; // 4
// 方式3:a 和 b的值呼唤,乘除
a = a*b; //36 = 4*9
b = a/b; //9 = 36/4
a = a/b; //4 = 36/9
System.out.println("a = " + a +",b = " + b);
}
}
%:取模运算
package day03;
public class Demo7 {
public static void main(String[] args) {
// % 取模运算:输出余数
int a = 3 % 9;
System.out.println(a); // 3
int b = 20 % 4;
System.out.println(b); //0
}
}
++ , - -
++在前,先加1,后运算,++在后,先运算,后加1.
—在前,先减1,后运算,- -在后,先运算,后减1.
package day04;
public class Demo1 {
public static void main(String[] args) {
// ++ --
int a = 5;
int b = ++a; // ++ 在操作变量的前面 前置:先执行++操作,再取值
System.out.println("b = " + b); // b=6
System.out.println("a = " + a); // a=6
int c = a++; //++ 在操作变量的后面 后置:先取值,再执行++操作
System.out.println("c = "+ c); // c=6
System.out.println("a = " + a); // a=7
a=a++;
a=a++;
System.out.println("a = " + a);// a=7
}
}
+= , %=
package day04;
public class Demo2 {
public static void main(String[] args) {
int a = 5;
a += 3; // 等同于 a = a+3;
System.out.println(a);
int b = 5;
b %= 2; // b = b%2; = 1
int c = b % 3; // c=1%3; =1
int d = 3 % b; // d=3%1; =0
System.out.println(b); //1
System.out.println(c); //1
System.out.println(d); //0
System.out.println(5%3); // 5%3=2 :5除3商1余2
System.out.println(3%5); //3%5=3 :3除5商0余3
System.out.println(5%20); //5%20=5 :5除20商0余5
System.out.println(5%8); //5%8=5 :5除8商0余5
}
}
比较运算符,比较的一定是数字,运算的结果一定是Boolean类型。
运算符 | 含义 | 例子 | 结果 |
---|---|---|---|
== | 等于 | 5 == 6 | false |
!= | 不等于 | 5 != 6 | true |
> | 大于 | 5 > 6 | false |
< | 小于 | 5 < 6 | true |
>= | 大于等于 | 5 >= 6 | false |
<= | 小于等于 | 5 <= 6 | true |
注意:
1.=为赋值运算符,==为等于运算符
2.关系表达式的结果为布尔值
3.>、<、>=、<= 运算符的优先级别高于==、!=
4.>、<、>=、<=运算符只支持数值类型的数据比较
public class Demo3 {
public static void main(String[] args) {
boolean a = 4==5;
System.out.println(a);
}
}
逻辑运算符,运算的数据是Boolean类型,运算的结果也是Boolean类型。
逻辑运算符中短路要注意。
运算符 | 含义 | 运算规则 |
---|---|---|
&& | 与 | 两个操作数都是true,结果才是true |
或 | 两个操作数一个是true,结果就是true | |
! | 取反,非 | 操作数为false,结果为true |
注意:
如果第一个操作数已经能确定表达式的值,第二个操作数就不必计算了;
优先级别 ! > && > ||
package day04;
public class Demo4 {
public static void main(String[] args) {
boolean a = true && false;
System.out.println(a); // false
boolean b = false || true;
System.out.println(b); // true;
boolean c = !false;
System.out.println(c); // true
int aa = 8;
int bb = 4;
boolean cc = aa > bb && aa < bb; // 组合运算符的表达式
System.out.println("cc : " + cc); // false
}
}
5.位运算符^ ~ << >> >>> & |
位运算符:被运算的数据先转化为二进制,然后按每一位运算。
(1)亦或法 :相同为0,不同为1
package day04;
public class Demo5 {
public static void main(String[] args) {
int a = 8;
int b = 5;
// 不适用第三个变量来交换数据,效率低
// 亦或法 ^
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a = " + a); //a=5
System.out.println("b = " + b); //b=8
}
}
(2)大小写转换:通过ascall码和位运算符(亦或法)实现
package day04;
public class Demo6 {
public static void main(String[] args) {
// I am Student
// i AM sTUDENT
// 大小写转换
char k = 'a';
char m = 'A';
char j = (char)(k - 32); // 小写转大写-32,大写转小写+32
System.out.println("k的ascall码 :" + (int)k);
System.out.println("m的ascall码 :" + (int)m);
System.out.println(j); // A
char kk = 'j';
char mm = (char)(kk ^ ' '); // ' '空格的ascall码是32
System.out.println(mm); // J
System.out.println("空格的ascall码是:"+(int)' '); // 32
}
}
package day04;
public class Demo7 {
public static void main(String[] args) {
int a = 2;
// 移位
// 2的二进制是:10 8的二进制是:1000 16的二进制是10000
a = a<<4;
System.out.println(a); // 32
}
}
也称为三目(三元)运算符条件?值1:值2
:在某种条件成立的时候取值1,否则不成立取值2.
int min;
min = 5 < 7 ? 5 : 7;
System.out.println(min);
min = 10 < 7 ? 10 : 7;
System.out.println(min);
单目运算符包括! ++ —,优先级别高
优先级别最低的是赋值运算符
可以通过()控制表达式的运算顺序,()优先级最高
从右向左结合性的只有赋值运算符、三目运算符和单目运算符
算术运算符 > 关系运算符 > 逻辑运算符
拓展
1.运算符的目:简单了解一下
运算符能连接操作数的个数,称为运算符的目。Java 语言中运算符的目有三种:
(1)单目运算符:只能连接一个操作数,如“++” “—“ “!” 等。
(2)双目运算符:可以连接两个操作数,Java语言中的多数运算符属于双目运算符。如“+”“-““*”“/”等。
(3)三目运算符:可以连接三个操作数。Java语言中只有一个三目运算符,即条件运算符。
2.7.练习
复制package day02;
import java.util.Scanner;
public class Practice01 {
public static void main(String[] args) {
System.out.println("请输入4位会员卡号:");
Scanner scanner = new Scanner(System.in);
int cardId = scanner.nextInt();
System.out.println("会员卡号是:" + cardId);
int qian = cardId / 1000 % 100;
int bai = cardId / 100 % 10;
int shi = cardId / 10 % 10;
int num = cardId % 10 ;
int sum = qian + bai + shi + num;
System.out.println("千位数: " + qian +",百位数:" + bai + ", 十位数:" + shi + ", 个位数:" + num);
System.out.println("会员卡号"+cardId+"各位之和:" + sum);
if(sum > 20){
System.out.println("会员卡号"+ cardId + "的会员,您中奖了!奖品是MP3!");
}else{
System.out.println("谢谢参与!");
}
}
}