一、Java的配置/介绍/前言
略
二、基础概念
1)println和print区别?
相同点:
两个都是原样输出,可以将结果直接打印到控制台上
不同点:
println:原样输出,自动换行
print:原样输出,不会换行
【小技巧】
先复制当前行:ctrl+d
一次写多行;按住alt不放,鼠标往下拉,让光标变长
2)常量
1.概述:在代码的运行过程中,值不会发生改变的数据
2.分类:
整数常量:所有的整数,包括正负 -1 1
小数常量:所有带小数点的 2.5 2.0
字符常量:带单引号的 '' 单引号中必须有,且只能有一个内容
'1' 对
'11' 不对
'1a' 不对
' ' 对
' ' 不对
'tab键' 对
字符串常量:带双引号 "" 双引号中的内容随意
布尔常量:true false -> 用于判断条件
空常量:null -> 代表数据不存在->不能直接使用
public class Demo06HelloWorld{
public static void main(String[] args){
//整数常量
System.out.println(1);
System.out.println(-1);
//小数常量
System.out.println(2.5);
System.out.println(2.0);
//字符常量
System.out.println('1');
//System.out.println('11');''中必须有且只能有一个内容 11算两个内容
//System.out.println('');''中必须有且只能有一个内容
System.out.println(' ');//一个空格算一个内容
//System.out.println(' ');//一个空格算一个内容,两个空格就是两个内容
System.out.println(' ');//tab键算一个内容
//字符串常量
System.out.println("张无忌和赵敏以及周芷若还有小昭以及朱九真...没羞没臊的故事");
System.out.println("");
//布尔常量
System.out.println(true);
System.out.println(false);
//空常量
//System.out.println(null); null代表数据不存在,不能直接引用
}
}
public class Demo07HelloWorld{
public static void main(String[] args){
System.out.println(10+3);//13
System.out.println(10-3);//7
System.out.println(10*3);//30
System.out.println(10/3);//3 如果/前后都是整数,取的整数部分
System.out.println(10/3.0);// 如果/前后有一个是小数,结果就是带小数点的
}
}
3)变量
1.概述:在代码的运行过程中,值可以根据不同的情况随时发生改变的数据
int price = 10;
price = 8;
2.作用:可以临时存储一个数据
3.java中变量的分类:
基本数据类型:4类8种
a.整型:byte short int long
b.浮点型:float double
c.字符型:char
d.布尔型:boolean
引用数据类型:
类 数组 接口 枚举 注解
4.整数默认类型为int
小数默认类型为double
5.按照取值范围从小到大做排序:
byte short char -> int -> long -> float -> double
6.特殊的类型:字符串类型
用String表示,但是String不属于基本类型,属于一个类,所以属于引用数据类型
只不过String变量的定义格式和基本类型一样
public class Demo08Var{
public static void main(String[] args){
//byte
byte num1 = 100;
num1 = 101;
//num1 = 200;超出了byte的取值范围了
System.out.println(num1);
//short
short num2 = 100;
System.out.println(num2);
//int 整数默认类型
int num3 = 100000000;
System.out.println(num3);
/*
long 定义long型的变量,习惯上再值得后面加上L或者l
建议用L
*/
long num4 = 100000000L;
System.out.println(num4);
/*
float 定义float型的变量,请在小数后面加F或者f
建议用F
*/
float num5 = 2.5F;
System.out.println(num5);
/*
double
*/
double num6 = 2.5;
System.out.println(num6);
/*
char 代表字符变量
*/
char num7 = '中';
System.out.println(num7);
/*
boolean
true false
*/
boolean num8 = true;
boolean num9 = false;
System.out.println(num8);
System.out.println(num9);
/*
num9代表的是false
相当于将num9的false赋值给了变量num8,此时num8的true被覆盖了,变成了num9的false了
*/
num8 = num9;
System.out.println(num8);
/*
String 字符串
*/
String s = "atguigu";
s = "taoge";
System.out.println(s);
}
}
4)标识符
1.概述:给类,方法,变量取的名字
2.注意:
硬性要求(必须遵守):
a.标识符可以包含'英文字母','数字',"$和_"
b.标识符不能以数字开头 int i1 = 100(正确) int 1i = 100(错误)
c.标识符不能是关键字 int publicstatic = 10
软性建议(建议遵守):
a.给类取名字:遵循大驼峰式 -> 每个单词首字母大写
b.给方法和变量取名字:遵循小驼峰式 -> 从第二个单词开始往后首字母大写
public class Demo06Var{
public static void main(String[] args){
int i1 = 100;
//int 1i = 200; 名字不能数字开头
int $1 = 200;
System.out.println($1);
//int static = 300; 名字不能是关键字
//System.out.println(static);
int _i = 1000;
System.out.println(_i);
int intVar = 2000; //小驼峰式
System.out.println(intVar);
}
}
5)数据类型转换
1.什么时候会发生数据类型转换
等号左右两边类型不一致
2.按照取值范围大小从小到大给数据类型排序
byte short char -> int -> long -> float -> double
取值范围大的叫做大类型(相对的)
取值范围小的叫做小类型(相对的)
3.数据类型转换分两种:
a.自动类型转换:将取值范围小的数据类型 赋值 给 取值范围大的数据类型
或者在运算的时候,取值范围小的遇到了取值范围大的数据类型
取值范围小的数据类型会自动提升为取值范围大的数据类型
b.强制类型转换:
强制将取值范围大的数据类型转成取值范围小的数据 ->向下转型
1-自动类型转换
什么时候发生自动类型转换:
.取值范围大的数据类型 变量名 = 取值范围小的数据类型 -> 小的数据类型自动提升为大的数据类型
小类型遇到了大类型做运算 -> 小自动转大的类型
public class Demo01DataType{
public static void main(String[] args){
/*
100默认类型为int
num1类型为long
将100赋值给long型的num1,相当将取值范围小的数据类型赋值给了取值范围大的数据类型
发生了自动类型转换
*/
long num1 = 100;
System.out.println(num1);
/*
2默认类型为int
num2类型为double
将2赋值给了double型的num2,相当于将取值范围小的数据类型赋值给了取值范围大的数据类型
发生了自动类型转换
*/
double num2 = 2;
System.out.println(num2);
int num3 = 10;
double num4 = 2.5;
/*
double = int+double
double = double+double
小类型和大类型做运算,小类型会自动提升为大类型
*/
double sum = num3+num4;
System.out.println(sum);
}
}
2-强制类型转换
1.什么时候需要强转:
取值范围小的数据类型 变量名 = 取值范围大的数据类型 -> 报错
2.怎么进行强转:
取值范围小的数据类型 变量名 = (取值范围小的数据类型)取值范围大的数据类型
public class Demo02DataType{
public static void main(String[] args){
//float num1 = 2.5;
//float num1 = (float)2.5;
float num1 = 2.5F;
System.out.println(num1);
System.out.println("================");
//int num2 = 200L;
int num2 = (int)200L;
System.out.println(num2);
}
}
3-强转的注意事项
1.将来开发不要故意写成强转,除非没办法
2.如果随意强转会容易出现:
a.精度损失
b.数据溢出
3.byte,short 如果等号右边是常量,如果不超出范围,不会报错,jvm自动转型
byte,short 如果等号右边有变量参与运算,会自动提升为int,结果重新赋值给byte short变量,需要手动强转
4.char类型参与运算,会自动提升为int型,如果char类型提升为int型之后,会自动去ASCII码表查询字符对应的int值
如果ASCII码表中没有,会去unicode码表去查(万国码)
public class Demo03DataType{
public static void main(String[] args){
//精度损失
int num1 = (int)2.9;
System.out.println(num1);
//数据溢出
/*
int占内存4个字节-> 一个字节是8个二进制位 -> 32位二进制
100亿:36位二进制
将36位二进制的100亿强制赋值给最多能存32位二进制的int型变量
多出来4位,多出来的,干掉前4位
*/
int num2 = (int)10000000000L;
System.out.println(num2);//1410065408
}
}
public class Demo04DataType{
public static void main(String[] args){
byte num1 = 100;//等号右边是一个值,不超出范围,不会报错,jvm自动强转
System.out.println(num1);
byte num2 = (byte)200;//如果超出范围,需要我们自己强转
System.out.println(num2);
byte num3 = 10+1;
System.out.println(num3);
byte num4 = 1;
/*
byte = byte+int
byte = int+int -> 需要手动转
*/
byte num5 = (byte)(num4+1);
System.out.println(num5);
System.out.println("=====================");
char num6 = '0';
System.out.println(num6+0);
System.out.println('中'+0);//20013
int num7 = '国';
System.out.println(num7);
}
}
6-运算符
1-算数运算符
public class Demo01SuanShu{
public static void main(String[] args){
int i = 10;
int j = 3;
int sum = i+j;
System.out.println(sum);
int sub = i-j;
System.out.println(sub);
int mul = i*j;
System.out.println(mul);
int div = i/j;
System.out.println(div);
int mo = i%j;
System.out.println(mo);
}
}
+:
1.加法
b.字符串拼接-> 任何类型遇到字符串都会变成字符串类型数据,直接往后拼接
public class Demo02SuanShu{
public static void main(String[] args){
int i = 10;
int j = 3;
System.out.println(i+j+"");//13
System.out.println(i+""+j);//103
System.out.println(""+i+j);//103
System.out.println(""+(i+j));//13
System.out.println("两个数的和:"+(i+j));
}
}
2-自增自减运算符(也算算数运算符的一种)
1.格式:
变量++ -> 后自加
++变量 -> 前自加
变量-- -> 后自减
--变量 -> 前自减
2.使用:
a.单独使用:++ -- 自己单独成为一句
符号在前或者在后没区别,都是直接运算
b.混合使用:++ --和别的语句混合使用(赋值语句,打印语句)
符号在前:先运算,再使用运算后的值
符号在后:先使用原值,使用完毕之后,自身再运算
public class Demo03SuanShu{
public static void main(String[] args){
int i = 10;
//单独使用
//i++;
++i;
System.out.println(i);
System.out.println("=============");
int j = 10;
//混合使用
//int result = ++j;
int result = j++;
System.out.println(result);
System.out.println(j);
System.out.println("=============");
int x = 10;
int y = 20;
/*
以后开发不会这么写代码
10+19 = 29-10
*/
int result01 = x++ + --y - --x;
System.out.println(result01);
System.out.println("=============");
int c = 100;
c = c++;
System.out.println(c);
}
}
3)赋值运算符
1.基本赋值运算符:
= -> 先看等号右边的,将等号右边的数据赋值给等号左边的变量
2.复合赋值运算符:
+=
int i = 10;i+=1 -> 看做 i = i+1
-=
*=
/= 取整数部分
%= 取余数部分
3.针对于复合赋值运算符:
byte short 参与运算,jvm会自动强转
public class Demo04FuZhi{
public static void main(String[] args){
int i = 10;
i+=2; // i = i+2
System.out.println(i);
System.out.println("================");
byte b = 10;
//b = b+1;
b+=1;//b = b+1
System.out.println(b);
}
}
4)关系运算符(比较运算符)
public class Demo05Compare{
public static void main(String[] args){
int i = 10;
int j = 20;
int k = 10;
boolean result01 = i==j;
System.out.println(result01);
System.out.println(i>j);
System.out.println(i<j);
System.out.println(i>=k);
System.out.println(i<=k);
System.out.println(i!=k);
}
}
5)逻辑运算符
public class Demo06LuoJi{
public static void main(String[] args){
int i = 10;
int j = 20;
int k = 10;
boolean result01 = (i>j)&&(i==k);//false&&true
System.out.println(result01);//false
boolean result02 = (i>j)||(i==k);//false||true
System.out.println(result02);//true
boolean result03 = !(i>j);//!false
System.out.println(result03);//true
boolean result04 = (i>j)^(i==k);//false^true
System.out.println(result04);//true
}
}
问题1:表示小明的分数是否在 50-100之间
50<=score<=100 -> 数学写法
score>=50 && score<=100 -> java写法
问题2:&和&& 以及|和||区别
6)三元运算符
1.格式:
boolean表达式?表达式1:表达式2
2.执行流程:
先走boolean表达式,如果是true,就走?后面的表达式1;否则就走:后面的表达式2
7)进制转换
1-十进制转二进制
3-二进制转八进制
4-二进制转十六进制
8)位运算符
9)运算符优先级
三、流程控制
1)键盘录入_Scanner
1.概述:Scanner是java定义好的类
2.作用:通过键盘录入的形式将数据放到代码中参与运行
3.怎么用:
a.导包:为了找到想使用的类 -> import java.util.Scanner
b.创建对象: Scanner 对象名 = new Scanner(System.in);
c.调用方法,实现键盘录入:
对象名.nextInt() -> 录入一个整数
对象名.next() -> 录入一个字符串
public class Demo01Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个整数:");
int data1 = sc.nextInt();
System.out.println("data1 = " + data1);
System.out.println("请您输入一个字符串:");
String data2 = sc.next();
System.out.println("data2 = " + data2);
}
}
public class Demo02Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请你输入第二个整数:");
int data2 = sc.nextInt();
System.out.println("请你输入第三个整数:");
int data3 = sc.nextInt();
int temp = (data1 > data2) ? data1 : data2;
int max = (temp > data3) ? temp : data3;
System.out.println("max = " + max);
}
}
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at com.atguigu.a_scanner.Demo02Scanner.main(Demo02Scanner.java:9)
next():录入字符串,遇到回车或者空格就结束录入了
nextLine():录入字符串,遇到回车就结束录入
public class Demo03Scanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String data1 = sc.next();
String data2 = sc.nextLine();
System.out.println(data1);
System.out.println(data2);
}
}
2)switch(选择语句)
1)switch的基本使用
public class Demo01Switch {
public static void main(String[] args) {
//创建Scanner对象
Scanner sc = new Scanner(System.in);
System.out.println("请你输入一个整数:");
int data = sc.nextInt();
switch (data){
case 1:
System.out.println("离离原上草");
break;
case 2:
System.out.println("一岁一枯荣");
break;
case 3:
System.out.println("野火烧不尽");
break;
case 4:
System.out.println("春风吹又生");
break;
default:
System.out.println("输入错误");
break;
}
}
}
2)case的穿透性
如果没有break,会出现case的穿透性,代码会一直往下穿透执行,直到遇到break或者switch结束了为止
public class Demo02Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month){
case 12:
System.out.println("冬季");
break;
case 1:
System.out.println("冬季");
break;
case 2:
System.out.println("冬季");
break;
case 3:
System.out.println("春季");
break;
case 4:
System.out.println("春季");
break;
case 5:
System.out.println("春季");
break;
case 6:
System.out.println("夏季");
break;
case 7:
System.out.println("夏季");
break;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
default:
System.out.println("输入有误!");
break;
}
}
}
public class Demo02Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month){
case 12:
System.out.println("冬季");
break;
case 1:
System.out.println("冬季");
break;
case 2:
System.out.println("冬季");
break;
case 3:
System.out.println("春季");
break;
case 4:
System.out.println("春季");
break;
case 5:
System.out.println("春季");
break;
case 6:
System.out.println("夏季");
break;
case 7:
System.out.println("夏季");
break;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
default:
System.out.println("输入有误!");
break;
}
}
}
public class Demo02Switch {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int month = sc.nextInt();
switch(month){
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("输入有误!");
break;
}
}
}
3)分支语句
1-if语句的第一种格式
1.格式:
if(boolean表达式){
执行语句
}
或者:
if(boolean表达式)
执行语句
2.执行流程:
走if后面的执行语句,如果是true,就走if后面大括号中的执行语句
否则就不走
public class Demo01If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请您输入第二个整数:");
int data2 = sc.nextInt();
if (data1==data2){
System.out.println("相等");
}
/*if (data1==data2)
System.out.println("相等");*/
}
}
2-if语句的第二种格式
1.格式:
if(boolean表达式){
执行语句
}
或者:
if(boolean表达式)
执行语句
2.执行流程:
走if后面的执行语句,如果是true,就走if后面大括号中的执行语句
否则就不走。
public class Demo02If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请你输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请您输入第二个整数:");
int data2 = sc.nextInt();
if (data1==data2){
System.out.println("相等");
}else{
System.out.println("不相等");
}
/*if (data1==data2)
System.out.println("相等");
else
System.out.println("不相等");*/
}
}
3-if语句的第三种格式
public class Demo08If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入第一个整数:");
int data1 = sc.nextInt();
System.out.println("请您输入第二个整数:");
int data2 = sc.nextInt();
/*if (data1>data2){
System.out.println("data1大于data2");
}else if(data1<data2){
System.out.println("data1小于data2");
}else{
System.out.println("data1等于data2");
}*/
if (data1>data2){
System.out.println("data1大于data2");
}else if(data1<data2){
System.out.println("data1小于data2");
}else if (data1==data2){
System.out.println("data1等于data2");
}
}
}
【练习】
public class Demo09If {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请您输入一个数:");
int week = sc.nextInt();
/*if (week==1){
System.out.println("周一");
}else if(week==2){
System.out.println("周二");
}else if(week==3){
System.out.println("周三");
}else if(week==4){
System.out.println("周四");
}else if(week==5){
System.out.println("周五");
}else if(week==6){
System.out.println("周六");
}else if(week==7){
System.out.println("周日");
}else{
System.out.println("输入有误!");
}*/
if (week<1 || week>7){
System.out.println("输入有误");
}else{
if (week==1){
System.out.println("周一");
}else if(week==2){
System.out.println("周二");
}else if(week==3){
System.out.println("周三");
}else if(week==4){
System.out.println("周四");
}else if(week==5){
System.out.println("周五");
}else if(week==6){
System.out.println("周六");
}else if(week==7){
System.out.println("周日");
}
}
}
}
public class Demo10If {
public static void main(String[] args) {
//95~100 山地自行车一辆
//90~94 游乐场玩一次
//80~89 变形金刚玩具一个
//80以下 胖揍一顿
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
/*if (score>=95 && score<=100){
System.out.println("山地自行车一辆");
}else if (score>=90 && score<=94){
System.out.println("游乐场玩一次");
}else if(score>=80 && score<=89){
System.out.println("变形金刚一个");
}else if (score>=0 && score<80){
System.out.println("胖揍一顿");
}else{
System.out.println("弄死你呀,一共就100分,还给我考冒了");
}*/
if (score<0 || score>100){
System.out.println("弄死你呀,一共就100分,还给我考冒了");
}else{
if (score>=95 && score<=100){
System.out.println("山地自行车一辆");
}else if (score>=90 && score<=94){
System.out.println("游乐场玩一次");
}else if(score>=80 && score<=89){
System.out.println("变形金刚一个");
}else if (score>=0 && score<80){
System.out.println("胖揍一顿");
}
}
}
}
4)循环语句
5)break和continue的区别