java Note 2021.7.21

java基础笔记

1、运算符

1.1常见的数学运算符
+ - * / % ......
+

作用:

  1. 加法运算
  2. 拼接字符串
/*
+运算符
 */
  public class Demo1 {
   public static void main(String[] args) {
    System.out.println(1+1);
     /*
     拼接字符串 
     1.将多个字符串的值 拼接成一个字符串
      2.字符串与其他类型的值也可以拼接成一个字符串 规律:+的左边或者右边,只要有一边是字符串,则一定做拼接字符串处理
       */ 
       String s1 = "Hello ";
       String s2 = "Wrold ";
       System.out.println(s1 + s2); 
       System.out.println("hello" + 3.14); 
       System.out.println(5 + 6 + "," + 6 + 5);
       //11,65
			 }
  }
%

取余

10%3 结果就是 1
public class Demo2 {
 public static void main(String[] args) {
  System.out.println(10%3);//1 
  System.out.println(3%10);//3 
  System.out.println(-4%10);//-4 
  System.out.println(-10%4);//-2 
  }
   }

练习

声明整型变量,并赋值为5位数
取出该数的每一位的值

public class Demo3 { 
public static void main(String[] args) {
 int i = 56757; 
 int ge = i % 10;//取出个位数
  int shi = i / 10 % 10;// 取出十位数 
  int bai = i / 100 % 10;// 取出百位数
   int qian = i / 1000 % 10;// 取出千位数 
   int wan = i / 10000;// 取出万位数
    System.out.println(ge);
    System.out.println(shi); 
    System.out.println(bai);
    System.out.println(qian);
    System.out.println(wan); 
      		 } 
       }

2、数学运算中的结果值的类型

public class Demo { 
public static void main(String[] args) { 
//在数学运算中,结果值的数据类型与运算中的最大类型一致
 /*
 结果值应该是int类型 真实结果是2.5 但是结果要处理为int 
 相当于将2.5转换为int类型 就是将小数位直接砍掉 
 */
  System.out.println(5/2);//2 
  //结果值应该是double类型 
  System.out.println(5/2.0);//2.5
++与–

++:自增符号
–:自减符号

++符号的基本效果:

整型变量++;   或者   ++整型变量;
效果:将该变量的本身的值+1

–符号的基本效果:

整型变量--;   或者   --整型变量;
效果:将该变量的本身的值-1

注意:在使用自增或自减符号时,变量一定要有值

public class Demo4 {  
  public static void main(String[] args) {     
     int i = 5;    
      i++;//将变量i的值+1   
           System.out.println(i);//6     
              ++i;//将变量i的值+1    
                  System.out.println(i);//7     
                     int j = 6;      
                       j--;//将变量j的值-1     
                          System.out.println(j);    
                              --j;//将变量j的值-1      
                                System.out.println(j); 
                                  }
                                  }
自增表达式本身的值
/*
a++:先赋值,再自增
++a:先自增,再赋值
赋值:将变量的值赋值给表达式复合运算符 基本使用 
自增:将变量本身的值+1
 */
 public class Demo5 {   
 public static void main(String[] args) {  
       int i = 5;   
            int j = 5;   
                 /*    
                  为什么i++的值为5    
                   因为i++的效果是    
                   1.将i的值赋值给 i++,所以i++的值就是i的值5 
                   2.将i的值+1     i的值变为6     
                          */      
                    System.out.println(i++);//5  
                 System.out.println(i);//6     
                             /*        
                        为什么++j的值为6       
                        因为++j的效果是   
                          1.将j的值+1   变为6    
                       2.将j的值赋值给++j   所以++j的值为6      
                                       */        
                                   System.out.println(++j);//6       
                                    System.out.println(j);//6      
                                       int a = 5;      
                                System.out.println(a++ + ++a);//12    
                                      int k = 6;//7 6    
                                         int v = 7;//6 7      
                                       System.out.println(k++ - --v + k-- - ++v);//0   
                                          //                 6     6     7     7  
                                                                        }
                                            }

3、复合运算符

a += 值;     效果: a = a + 值
a -= 值;     效果: a = a - 值
a *= 值;     效果: a = a * 值
....
基本使用
public class Demo6 {  
  public static void main(String[] args) {      
    int i = 5;       
     i += 5;//效果是 i = i + 5     
        System.out.println(i);//10    
            i -= 6;//效果是 i = i - 6     
               System.out.println(i);//4   
               }
               }
自动进行类型转换
public class Demo7 { 
   public static void main(String[] args) {  
         byte b = 5;        // b = b + 3;//会出错 因为右边的结果值是int类型所以需要强转   
        b = (byte)(b + 3);      
          System.out.println(b);     
             byte b2 = 5;    
             //b2 += 3 效果: b2 = b2 + 3. 但是我们并没有进行强转,因为复合运算符会自动的帮我们转换       
              b2 += 3;     
                 System.out.println(b2);
                    }
                    }
小结 复合运算符的好处:
  1. 代码更简洁
  2. 如果需要类型转换,则复合运算符会自动的进行转换
赋值符号=
变量 = 值;
效果:java一定是先获取都右边的值,再将值赋值给左边的变量
练习

1、

int a = 5;
a = a++;
System.out.println(a);

2、
声明两个同类型的变量,交换这两个变量的值

public class Practise2 {   
 public static void main(String[] args) {     
   /*        
   声明两个同类型的变量,交换这两个变量的值      
      */        
      int a = 5;      
        int b = 6;       
         /*        
         这个写法不能达到交换的效果     
           因为a = b 执行时,a变量的值因为被覆盖所以丢失      
              */
              //       a = b;
              //       b = a;
              //       System.out.println(a);
              //       System.out.println(b);       
               /*       
                如果要替换两个变量的值      
                  一定要避免某个变量的值丢失        
                  解决:在某个变量的值被覆盖之前   全复制一份作为备份       
                    */       
                     int c = a;   
                       a = b;      
                        b = c;       
                        System.out.println(a);     
                       System.out.println(b);     
                                 /*     
                           要求不创建第三个变量达到替换的效果   
                        实际开发中,不建议使用这个写法   
                        因为可读性太差了       
                        但是考试可能会遇到,所以要会写    
                                */      
                                      int i = 5;     
                                  int j = 6;    
                                i = i + j;     
                            j = i - j;       
                                   i = i - j;       
                                  System.out.println(i); 
                                      System.out.println(j); 
                                                           }
                                          }

4、比较运算符

== :比较左边与右边的值是否相等,如果相等结果true. 否则返回false
!= :比较左边与右边的值是否不相等,如果不相等返回true.否则返回false
> >= < <=.....
public class Demo8 {   
 public static void main(String[] args) {    
   		  int a = 5;     
     		   int b = 6;    
            System.out.println(a==b);//false   
              System.out.println(a!=b);//true    
              System.out.println(a >= 5);     
                        /*       
                   =与==的区别:     
                   =是赋值符号,效果是将右边的值赋值给左边的变量  
                   ==是比较符号,效果是判断两边的值是否相等     
                                      */   
                                      }
}

5、逻辑运算符

& :并且     效果:连接两个条件,如果两个条件都成立,则整体成立
| : 或者 效果:连接两个条件,如果两个条件都不成立,则整体不成立
! : 取反   效果:本身的值是true,使用了取反符号就变成false
&& : 双与 也表示并且,但是带短路效果
|| : 双或 也表示或者,但是带短路效果
public class Demo9 {   
 public static void main(String[] args) {      
   //测试&符号       
    char gender = '男';    
       int age = 26;      
         System.out.println(gender=='女' & age > 20);    
             //测试 | 符号      
               int score = 100;//技术分数    
                   int fs = 3;//颜值     
                      System.out.println(score >=95 | fs >= 85);    
                          //测试 ! 符号        
                          System.out.println(!(score>=95));//false   
                          }
                          }
public class Demo10 {
public static void main(String[] args) {
int i = 5;
 /*        
 & 不带短路效果 所以任何情况下都会将两个条件都判断一次     
    这样是不合理的,因为如果第一个条件不成立了,则第二个条件就不需要判断了      
      在不影响整体结果值的情况下,不判断第二个条件,我们将这种情况称之为短路效果       
        */
    System.out.println(i > 5 & i++ < 6);//false   
     System.out.println(i);//6
     int j = 5;      
       /*        
       使用&&符号 带短路效果     
          意思就是:在判断了第一个条件,如果就能决定整体的结果,则不会判断第二个条件    
            当前这个代码,第一个条件为false,就已经决定了整体的结果肯定为false  
            所以就触发了短路效果,不会判断第二个条件也就不会执行j++    
                所以j的值还是5      
                   */     
                      System.out.println(j > 5 && j++ < 6);//false     
                         System.out.println(j);//5   
                         }
                         
                         }
public class Demo11 {  
  public static void main(String[] args) {    
      int i = 5;     
         /*     
            | 不带短路效果 所以会将两个表达式都判断一次   
              */     
                System.out.println(i >= 5 | i++ <= 9);//true        
                System.out.println(i);//6        int j = 5;      
                  /*       
                   || 带短路效果       
                    第一个条件已经能决定整体的结果了,就不会判断第二个条件了        
                     */        
                     System.out.println(j >= 5 || j++ <= 9);//true        
                     System.out.println(j);//5  
                      
                      }
}

6、位运算符(了解)

&   :如果连接的是boolean表达式,则充当逻辑运算符     
如果连接的是整数,则充当位运算符     
将两个数字的二进制形式,每一位都进行运算,
如果两个数字都是1,则结果为1     否则结果为0
|   :如果连接的是boolean表达式,则充当逻辑运算符    
 如果连接的是整数,则充当位运算符     
 将两个数字的二进制形式,每一位都进行运算,
 如果两个数字有一个是1,则结果为1     否则结果为0
 ^   : 将两个数字的二进制形式,每一位都进行运算,
 如果两个数字不相等,则结果为1
否则结果为0    
 >> :右移 将指定整型的二进制数向右边移动指定的位数。 右边移动的数字就丢失,左边会空出位置出来,
 如果符号位是1则左边填1,如果符号位是0,则左边填0
 << : 左移 将指定整型的二进制数向做边移动指定的位数。 
 左边移动的数字就丢失,右边会空出位置出来,空出的位置填0
 >>> :无符号右移 将指定整型的二进制数向右边移动指定的位数。 
 右边移动的数字就丢失,左边会空出位置出来,空出的位置填0
public class Demo12 {    
public static void main(String[] args) {        
int i = 15;        
int j = 2;       
 /*        
 00000000 00000000 00000000 00001111        
 00000000 00000000 00000000 00000010       
  -------------------------------------        
  00000000 00000000 00000000 00000010         
  */        
  System.out.println(i & j);//2       
   /*        
   00000000 00000000 00000000 00001111        
   00000000 00000000 00000000 00000010       
    -------------------------------------        
    00000000 00000000 00000000 00001111         
    */        
    System.out.println(i | j);//15        
     /*        
     00000000 00000000 00000000 00001111        
     00000000 00000000 00000000 00000010       
      -------------------------------------       
      00000000 00000000 00000000 00001101         
      */        
      System.out.println(i ^ j);//13   
      }
}
public class Demo13 {    
public static void main(String[] args) {        
int i = 8;       
 /*        
 00000000 00000000 00000000 00001000        
 右移之后的效果:        
 00000000 00000000 00000000 00000010     00         
 */
 System.out.println(i >> 2);//2        
 /*        
 00000000 00000000 00000000 00001000        
 左移之后的效果:        
 00000000 00000000 00000000 00100000         
 */        
 System.out.println(i << 2);//32        
 int a = -24;       
  /*          
  -24 的原码:  10000000 00000000 00000000 00011000          
  -24 的反码: 11111111 11111111 11111111 11100111         
   -24 的补码: 11111111 11111111 11111111 11101000          
   向右移两位的效果:11111111 11111111 11111111 11111010          
   结果的反码:11111111 11111111 11111111 11111001          
   结果的原码:10000000 00000000 00000000 00000110  
    十进制:-6           
    无符号右移两位的效果:00111111 11111111 11111111 11111010        
     */        
     System.out.println(a >> 2);       
      System.out.println(a >>> 2);        
      System.out.println(0b00111111111111111111111111111010);  
       }
}
练习

计算结果:
-12 >> 3
-12 >>> 3

    public class Practise3 {    
    public static void main(String[] args) {        
    byte b = -12;       
     /*        
     -12的原码:10001100        
     -12的反码:11110011       
      -12的补码: 11110100        
      右移3位:11111110        
      结果的反码:11111101        
      结果的原码:10000010   
      十进制:-2         
      */        
      System.out.println(b >> 3);        
       /*        
       -12的原码:10000000 00000000 00000000 00001100        
       -12的反码:11111111 11111111 11111111 11110011        
       -12的补码: 11111111 11111111 11111111 11110100        
       无符号右移3位:00011111 11111111 11111111 11111110         
       */        
       System.out.println(b >>> 3);        
       System.out.println(0b00011111111111111111111111111110);
			}
}

7、三目运算符

boolean表达式?java代码1:java代码2
特点:如果boolean表达式的值为true,则执行java代码1,否则执行java代码2
public class Demo14 {    
public static void main(String[] args) {        
int a = 6;        
System.out.println(a>5?"a大于5":"a不大于5");   
}
}
练习

定义两个整型变量并赋值使用三目运算符,打印更大的那一个值
2.
定义三个整型变量并赋值使用三目运算符,打印更大的那一个值

public class Practise5 {    
public static void main(String[] args) {        
/*        
定义三个整型变量并赋值        
使用三目运算符,打印更大的那一个值         
*/        
int a = 25;        
int b = 12;        
int c = 9;        
System.out.println(a>b?(a>c?a:c):(b>c?b:c));   
		}
}

8、Scanner

这个单词本身是扫描仪的意思
在Java中可以扫描控制台的内容
要使用Scanner需要一些面向对象的思想
也就是通过操作对象来完成任务
类 :相当于现实生活中的分类
对象:指定分类中的一个具体的事物
例如:手机可以打电话 手机表示分类 我的手机不见了 手机表示具体的一个事物

我们面向对象的思想:就是要先获取到一个具体的事务,然后操作它
Scanner表示一个分类,如果想要使用它,必须先从这个分类中创建一个具体的扫描仪对象出来

使用Scanner
  1. 导包
    Scanner本身也是一个java Class,由jdk直接提供的
    如果在a java类中要使用 b java类,则b java类必须与a类在同一个包中
    如果不在同一个包则必须导包导包的方式:
在class上面,package下面
import 包名.类名;
  1. 创建Scanner类型的对象
Scanner scanner = new Scanner(System.in);
理解方式:    
		先看右边的值   new 表示新建的意思                 
						Scanner 表示扫描仪分类   
						System.in 表示指定扫描控制台的内容   
		把右边连起来理解:创建一个扫描控制台内容的扫描仪对象        

		左边:就是创建一个名词为scanner的变量        

		然后将右边的对象 赋值给 左边的变量    
		那么以后就可以通过操作变量来操作这个扫描仪对象了
  1. 使用Scanner对象
    通过调用对象方法的方式,可以完成指定的任务
    方法:可以理解为某个对象的功能
int i = scanner.nextInt();	
效果:
1.允许用户在控制台写数据
2.让扫描仪去扫描控制台的整型数据
import java.util.Scanner;//将Scanner类导入
public class Demo15 {    
public static void main(String[] args) {        
//创建Scanner类型的对象(相当于拿到了一个具体的扫描仪)        
Scanner scanner = new Scanner(System.in);        
/*        
等待用户输入 并在用户输入完之后,自动的扫描输入的数据        
用户通过按 回车键 通知扫描仪可以开始扫描了         
*/        
int i = scanner.nextInt();        
System.out.println("您输入的数字是:" + i);   
		}
}


Scanner的其他功能

nextLine(); 扫描控制台的字符串数据

注意事项

如果使用nextInt方法来扫描控制台的数据
则在控制台输入的数据必须是整型,如果有了非数字的字符,会报错
解决方案:应该使用nextLine方法

练习

定义三个整型变量
使用Scanner输入三个值为这三个变量赋值
然后数组其中最小的哪一个值

import java.util.Scanner;
public class Practise6 {    
public static void main(String[] args) {        
/*        
定义三个整型变量        
使用Scanner输入三个值为这三个变量赋值        
然后数组其中最小的哪一个值         
*/        
		Scanner scanner = new Scanner(System.in);        
		int a,b,c;        
		a = scanner.nextInt();        
		b = scanner.nextInt();        
		c = scanner.nextInt();        
		System.out.println(a < b ?(a < c ? a : c) : (b < c? b : c));   
		}
}

9、选择结构

目前我们的程序,一定是会按顺序将每一行代码都执行
实际开发中,有可能出现的情况是:编写代码的时候,要考虑多个方案,也就是要写多种代码
但是实际执行的时候,要根据程序的运行环境或者用户的操作方式,要来选择执行其中的某一部分代码要达到这个效果,需要使用if语句

if(条件){ 
		代码块;
		}
		如果条件成立,则执行代码块
		如果条件不成立,则跳过这个代码块,不执行
if(条件){
		 if代码块;
		 }else
		 {
		  else代码块;
		  }
		  如果条件成立,则执行if代码块
		  如果条件不成立,执行else代码块
if(条件){}else if(条件){   
 }else if(条件){    
 }....[else{}]   
 		从上往下依次判断每一个条件
 		如果某一个条件成立,则执行对应的代码块,然后结束整个if结构
 		如果条件不成立,则判断下一个条件如果所有条件都不成立:   
 				没有最后的else:  则整个结构没有执行的代码块,结构结束   
 				有最后的else:    则执行else中的代码块
import  java.util.Scanner;
public class Demo1 {    
public static void main(String[] args) {  
      Scanner scanner = new Scanner(System.in);        
      System.out.println("请输入您的年龄:");        
      int age = scanner.nextInt();                
      if(age >= 22){            
      System.out.println("你可以结婚了,但是你得有女朋友!");

			}
			   
			   }
}
import java.util.Scanner;
public class Demo2 {    
public static void main(String[] args) { 
       Scanner scanner = new Scanner(System.in);        
       System.out.println("同学,请输入您的分数: ");        
       double score = scanner.nextDouble();        
       if(score >= 60){   
                System.out.println("挂 科比 不挂 柯南");       
                }else{      
                      System.out.println("不挂 科比 挂 柯南");    
                         }   
}
}
import java.util.Scanner;
public class Demo3 { 
   public static void main(String[] args) {        
   Scanner scanner = new Scanner(System.in);        
   System.out.println("请输入您的分数:");        
   double score = scanner.nextDouble();        
   //判断这个分数属于哪一个等级        
   if(score == 100){            
   System.out.println("perfect!");       
   }else if(score >= 90){           
    System.out.println("great!");   
        }else if(score >= 80){            
        System.out.println("good!");    
           }else if(score >= 70){            
           System.out.println("so so");    
              }else if(score >= 60){            
              System.out.println("及格");       
              }else {      
                    System.out.println("不及格");       
                    }  
                     }
}
嵌套的if语句
if(条件1)
	{ 
		if(条件2){ 
		
		 }
}
练习

声明3个变量,使Scanner输入赋值,然后使用if语句找出最大的那一个变量的值输出

import java.util.Scanner;
public class Practise {
    public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);        
            int a,b,c;        
            a = scanner.nextInt();        
            b = scanner.nextInt();        
            c = scanner.nextInt();        
            //1写法一 使用if语句与&&运算符        
            if(a >= b && a >= c){            
            System.out.println("最大值:" + a);     
              }else if(b >= a && b >= c){            
              System.out.println("最大值:" + b);   
                  }else{            
                  System.out.println("最大值:" + c);   
                      }       
               //写法二 使用嵌套的if   
                    if(a > b){         
                       if(a > c){                
                       System.out.println("最大值:" + a);        
                          }else{                
                          System.out.println("最大值:" + c);      
                               }    
                                  }else{         
                                     if(b > c){ 
                                   System.out.println("最大值:" + b);           
                                   }else{                
                                   System.out.println("最大值:" + c);         
                                     }      
                                      }   
                               }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值