java-day0405-操作符

第三章 操作符

变量


  1. 变量使用:如果只声明变量,没有赋值,那么在使用的时候会报错

  2. 成员变量 即使声明完,不赋值,它也是有一个默认的值;局部变量没有默认值。

  3. 方法的参数,也是局部变量,它的作用范围在整个方法中

操作符 !!


  1. a++ : 先使用 a 的值,输出结束,再进行 + 1

  2. 比较操作符 :instanceof ,判断对象是否属于指定类型

    ( o instanceof Student )

    本质当前引用 o 指向的对象类型与Student的关系。(子父类型,父子类型,有无关系)

  3. “ **== **” ,可以用在俩个数字之间的判断,也可以用俩个对象之间的判断。

  4. byte + byte = int ; byte + int = int; 【类型提升

    • byte 、short类型相加减 ,结果都会转换为int类型。
    • 当加数为long类型,和为long类型。其他整型类型,和为int类型。
    • 当加数为浮点数类型,和为浮点数类型。当加数为double类型,和为double类型。
  5. 位运算,以补码的形式操作。

    位运算符作用巧记
    &与运算全1才为1
    |或运算全0才为0
    ^异或运算相同为0,不同为1
    ~取反运算
  6. 逻辑运算符 && 、 || :

    • 逻辑与 &&,第一个条件为false, 发生短路。
    • 逻辑或 || , 第一个为true时,发生短路。
  7. & 和 && 有什么区别?

    • &既可以作为二进制数字的位运算符,也可以作为布尔表达式中的逻辑运算符,但是作为逻辑运算符的时候,&并没有&&符合的那种短路的功能。
    • && 只能作为逻辑运算符,但是它会具备短路的功能。
  8. 研究位运算,使用补码。

  9. 移位操作符

    • >> 算术右移位运算
      注意,这个操作的本质就是除以2的n次方,这个n就是我们右移的位数。
      注意,除以2的n次方之后,只保留整数部分
      注意,正数右移之后,最左边空出的位置,都要补0
      注意,负数右移之后,最左边空出的位置,都要补1
      例如,16 >> 3 结果是2 ,相当于 16 / 2的3次方 = 2
    • << 左移位运算
      注意,这个操作的本质就是乘以2的n次方,这个n就是我们左移的位数
      注意,无论正数负数左移之后,最右边空出的位置,都要补0
      注意,当左移之后,得到的数字已经超出当前类型所能表示的最大值的时候,这个值最终会被限定到这个当前类型中,所以最终显示的值会和我们逻辑上算出的值有所不同。
      例如:直接使用2进制表示数字
      int a = 0b01000000000000000000000000000000;
      int result = a<<2; //其实这个结果已经超出了int能表示的最大值
      System.out.println(result); //结果是0
    • >>> 逻辑右移位运算,也叫做**【不带】符号的右移运算**
      注意,这个操作的本质就是除以2的n次方,这个n就是我们右移的位数
      注意,除以2n之后,只保留整数部分
      注意,正数和负数右移之后,最左边空出的位置,都要补0
      例如:
      12>>>1 结果是 6
      -12>>>1 结果是 2147483642
      注意:在操作的时候,java操作的都是计算机中的补码
  10. 如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模/取余。如果对int
    型移动33位,实际上只移动了33%32=1位。如果对int型移动32位,实际上只移动了32%32=0位

类型转换


  1. instanceof ,先进行逻辑判断(if o instanceof String ) ,就是为了防止类型转换的错误。

  2. 子类类型的变量,可以自动转为(隐式)父类类型

  3. 基本类型的自动转换的问题:

    • char --> int :可以转换
    • int --> float : 可能发生精度丢失的问题。
    • long --> float、double:可能发生精度丢失的问题。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPB187Ix-1629103732098)(C:\Users\asus\Desktop\我的笔记\思维导图-脑图-总结\7种类型转换.png)]

  4. 使用浮点数4则运算时,会产生精度丢失的问题。

    • 通过 java.math.BigDecimal 类处理计算问题。
    • add方法
    • subtract方法
    • multiply方法
    • divide方法

流程控制


  1. 多个 if 语句,可以用return进行简化。
  2. if和else这俩个语句中的代码,【一定】是有唯一的一个执行,而另一个不执行。
  3. switch中,break表示当前逻辑的结束。
    • 执行一次case后,没有break,然后代码会继续往下执行,并且不会再做case 1 2 3的判断了
  4. while 和 for 可以互换
    • while :使用在 不确定的循环次数
    • for :使用在 确定的循环次数
  5. do while : 定义循环的变量,放在循环体的外面。( 局部变量的使用 )
  6. 嵌套循环中,内层for循环受到外层for的影响。

break、continue、lable标签 !!


  1. continue :跳过本次循环 剩余的代码
  2. break :终止包含它的循环。(两层循环的话,一层循环停止)
  3. return :直接结束方法的执行

快捷键

  1. ctrl + n : 创建新文件

  2. ctrl + shift + “+” : 放大

  3. alt + / : 手动提示

  4. /** + enter键 : 自动生成文档注释

  5. sys + 提示 : 输出语句

    sout + 提示 :输出语句

  6. ctrl + / : 自动注释

  7. ctrl + alt + 下键 : 复制多行

  8. alt + 下键 : 移动代码

  9. ctrl + shift + / : 多行注释

  10. ctrl + 2 + l : new 对象 自动补全

    ctrl + 1 + enter键 : new 对象 自动补全

  11. 删除一行代码 : ctrl + d ( 推荐Ctrl+x 剪贴板 )

  12. ctrl + shift + t : 查看源码

  13. ctrl + f :搜索

  14. 查看某个方法、类的实现 :ctrl + 单击鼠标

注意

  1. 静态方法通过对象调用成员变量。

    • 实例变量就是类中的属性,也叫做成员变量(非静态的)【成员变量=实例变量】

    • static是类级别方法 也就是可以 类名.方法调用 。
      不加static是实例级别的 也就是必须 先有实例(对象)才能调用其方法如new A().test()

    • 为什么“静态方法不能调用类成员变量”,因为要想访问成员变量你必须有个“已经实例化好的对象”,除非你在静态方法里创建一个当前类的实例对象,否则你是无法直接调用成员变量的,因为它不知道这个成员变量属于哪个实例对象的。

  2. +” 在 字符串中做拼接,在 char中做计算

  3. 数值也可以和字符串使用+号连接,也是拼接。

  4. return 代表 方法结束

  5. 学会加入return ,结束下面的语句、逻辑判断。

  6. 移位操作,对位进行操作,是直接对内存进行操作。

    (程序进行,二分之一运算时,采用位运算更快。)

  7. Random类在 java.util.Random 包中。

  8. java.lang.Math.random() : 静态方法

    • 范围: [ 0 , 1 )
    • (int)Math.random() * 10 : 对随机数取整了!
    • 注意加括号 (int)(Math.random() * 10)
    • 某个区间范围4~6 :4 + (int)( Math.random() * 3 )

细节

  1. 引用类型,默认值是null
  2. 可输入的参数、不确定的值,可以放在方法括号当中。 public void method(int num){}
  3. 变量 :会变的量。
  4. 实例变量的作用范围是当前类中所有的 非静态 方法,都可以访问。
    • 静态方法通过类名调用。【编程规范】
  5. java中的=号赋值操作,需要**=号俩边的类型一致**,也就是=号右边的数据的类型要和=号左边的变量的类型保持一致,如果不一致,那么就需要做类型的转换,分为隐式转换和显示转换。
  6. - ”号只针对基本数据类型。
  7. 控制台打印出的都是字符串类型
  8. if 、for 共同点 :重复执行,破坏了程序的顺序执行。
  9. 死循环,缺少条件判断。
  10. 循环,图案的输出,重点关注i++,j-- 。(逐渐增多还是逐渐减少)

查漏补缺 !!

  1. System.out.println( ‘a’ + 1 ); // 98 作为int类型来计算

    System.out.println( ‘a’ + ‘1’ ); // 146

    char z = ‘a’ + 1 ; // b

  2. “+” 在 字符串中做拼接,在 char中做计算。

  3. 数值也可以和字符串使用+号连接

  4. System.out.println( “a” + “b” + 1 + 2); // ab12

    System.out.println( 1 + 2 + “a” + “b” ); // 3ab

  5. System.out.println( true & false ); //false

    System.out.println( true && false ); //false 【短路与**&&**,第一个为false时,短路】

  6. 三目类型中基本类型转换:

    • System.out.println(true ? 97 : ‘a’);//a

    • System.out.println(true ? 97 : 1.0);//97.0

    • System.out.println(false ? 97 : ‘a’);//a

    • System.out.println(false ? 1.0 : ‘a’);//97.0

    • System.out.println(false ? 1.0 : 100);//100.0

    • int a = 97;

    • char c = ‘a’;

    • double d = 1.0;

      System.out.println(true ? a : c);//97

  7. 三目运算

    • int 和 double时,输出double。
    • char 和 double时,输出double。
    • int 和 char 直接在输出语句中做判断时,输出char类型。
    • int 和 char通过变量判断时,输出int类型。
      • ​ System.out.println(true ? 97 : ‘a’);//a
        ​ System.out.println(false ? 97 : ‘a’);//a
        ​ int a2 = 97;
        ​ char c2 = ‘a’;
        ​ System.out.println(true ? a2 : c2);//97
        ​ System.out.println(false ? a2 : c2);//97
        ​ System.out.println(true ? c2 : a2);//97
        ​ System.out.println(false ? c2 : a2);//97

作业-查漏补缺
  1. 负数,先原码变成补码,再左移,看符号位是正、负数,再看是否求原码
  2. 打印图案时,观察递增递减,根据图案寻找数学公式、规律,进行替换。

问题、拓展

  1. 三目运算符中关于数据类型转换。

  2. 多个 if 语句,可以用return进行简化。

    public String method4(int num) {
    		if(num >0) {
    			return "num >0";
    		}
    		//不会执行剩余代码
    		if(num <0) {
    			return "num <0";
    		}
    		return "num = 0";
    	}
    
  3. switch 比 if 执行效率高 考虑研究

    • if能处理所有的boolean类型的结果值,switch只能处理byte、short、int、char、String等5种类型的数值比较。

    • switch只能是在常量选择分支时比if…else效率高,但是if…else能应用于更多的场合,if…else比较灵活。

    • if …else走逻辑判断时,每条if语句都独立需要加载,都要走一遍判断。switch…case 根据一个值进行多路分支,只做一次计算。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XoMiqYqG-1629103732106)(C:\Users\asus\Desktop\我的笔记\思维导图-脑图-总结\if-switch对比.png)]

  4. 位移表示int 最大值:1 << 31(最小值) , -1 >>> 1(最大值)

    • -1 二进制表示 全为1 。 1111 1111
    • 二进制的 0000 0000 0000 0000 0000 0000 0000 0000 到 0111 1111 1111 1111 1111 1111 1111 1111 是正数
    • 1000 0000 0000 0000 0000 0000 0000 0000 到 1111 1111 1111 1111 1111 1111 1111 1111 是负数

重点!!!

  1. Math.random()的使用

    while(num != 5) {    【后面乘法要加括号!!!】
    			num = (int)(Math.random()*10);
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是Java代码实现您的需求: ```java import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class CreateFiles { public static void main(String[] args) { // 创建task02目录 String dirPath = "./day19/task02"; File dir = new File(dirPath); if (!dir.exists()) { dir.mkdirs(); } // 使用集合List去存储数据 List<Map<String, String>> fileList = new ArrayList<>(); Map<String, String> fileMap1 = new HashMap<>(); fileMap1.put("name", "task02"); fileMap1.put("type", "dir"); fileList.add(fileMap1); Map<String, String> fileMap2 = new HashMap<>(); fileMap2.put("name", "test01"); fileMap2.put("type", "dir"); fileList.add(fileMap2); Map<String, String> fileMap3 = new HashMap<>(); fileMap3.put("name", "File类操作.avi"); fileMap3.put("type", "file"); fileList.add(fileMap3); Map<String, String> fileMap4 = new HashMap<>(); fileMap4.put("name", "File 学习笔记.md"); fileMap4.put("type", "file"); fileList.add(fileMap4); Map<String, String> fileMap5 = new HashMap<>(); fileMap5.put("name", "Test02"); fileMap5.put("type", "dir"); fileList.add(fileMap5); Map<String, String> fileMap6 = new HashMap<>(); fileMap6.put("name", "java学院-讲师上云-日期讲解.avi"); fileMap6.put("type", "file"); fileList.add(fileMap6); Map<String, String> fileMap7 = new HashMap<>(); fileMap7.put("name", "java学院-讲师上云-日期解析.avi"); fileMap7.put("type", "file"); fileList.add(fileMap7); Map<String, String> fileMap8 = new HashMap<>(); fileMap8.put("name", "任务作业.txt"); fileMap8.put("type", "file"); fileList.add(fileMap8); // 遍历集合, 创建文件及其文件夹 for (Map<String, String> file : fileList) { String fileName = file.get("name"); String fileType = file.get("type"); if ("dir".equals(fileType)) { File newDir = new File(dirPath + "/" + fileName); if (!newDir.exists()) { newDir.mkdirs(); } } else if ("file".equals(fileType)) { File newFile = new File(dirPath + "/" + fileName); try { newFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); } } } System.out.println("文件及其文件夹创建成功!"); } } ``` 运行这段代码后,程序会在day19目录下创建一个名为task02的文件夹,并在其中创建对应的文件及其文件夹。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值