zoukankan      html  css  js  c++  java
  • javaSE小知识点

    javaSE小知识点

    var关键字

    var sb = new StringBuilder();//自动推断sb的类型

    多行字符串

    public class Main {
       public static void main(String[] args) {
           String s = """ //java13
                      SELECT * FROM
                        users
                      WHERE id > 100
                      ORDER BY name DESC
                      """;
           System.out.println(s);
      }

    输出不换行

    package com.bi;

    public class Main {
       public static void main(String[] args) {
           System.out.print("A,");
           System.out.print("B,");
           System.out.print("C. eee ");\不换行
      }
    }

    格式化输出

    public class Main {
       public static void main(String[] args) {
           double d = 3.1415926;
           System.out.printf("%.2f ", d); // 显示两位小数3.14
           System.out.printf("%.4f ", d); // 显示4位小数3.1416
      }
    }

    输入

    import java.util.Scanner;

    public class Main {
       public static void main(String[] args) {
           Scanner scanner = new Scanner(System.in); // 创建Scanner对象
           System.out.print("Input your name: "); // 打印提示
           String name = scanner.nextLine(); // 读取一行输入并获取字符串
           System.out.print("Input your age: "); // 打印提示
           int age = scanner.nextInt(); // 读取一行输入并获取整数
           System.out.printf("Hi, %s, you are %d ", name, age); // 格式化输出
      }
    }

    判断引用类型是否相等

    判断值类型的变量是否相等,可以使用==运算符。但是,判断引用类型的变量是否相等,==表示引用是否相等,或者说,是否指向同一个对象。要判断引用类型的变量内容是否相等,必须使用equals()方法。


    switch

    • java12增加表达式

    public class Main {
       public static void main(String[] args) {
           String fruit = "apple";
           switch (fruit) {
           case "apple" -> System.out.println("Selected apple");
           case "pear" -> System.out.println("Selected pear");
           case "mango" -> {
               System.out.println("Selected mango");
               System.out.println("Good choice!");
          }
           default -> System.out.println("No fruit selected");
          }
      }
    }
    • 利用switch表达式会返回值给变量赋值

    public class Main {
       public static void main(String[] args) {
           String fruit = "apple";
           int opt = switch (fruit) {
               case "apple" -> 1;
               case "pear", "mango" -> 2;
               default -> 0;
          }; // 注意赋值语句要以;结束
           System.out.println("opt = " + opt);
      }
    }
    • 如果需要复杂的语句,我们也可以写很多语句,放到{...}里,然后,用yield返回一个值作为switch语句的返回值:

    public class Main {
       public static void main(String[] args) {
           String fruit = "orange";
           int opt = switch (fruit) {
               case "apple" -> 1;
               case "pear", "mango" -> 2;
               default -> {
                   int code = fruit.hashCode();
                   yield code; // switch语句返回值
              }
          };
           System.out.println("opt = " + opt);
      }
    }
    • switch的计算结果必须是整型、字符串或枚举类型;


    变量应该把访问范围缩到最小的原则。


    for each循环

    for each循环能够遍历所有可迭代的数据类型,如List,数组、Map等。无法拿到索引

    public class Main {
        public static void main(String[] args) {
            int[] ns = { 1, 4, 9, 16, 25 };
            for (int n : ns) {
                System.out.println(n);
            }
        }
    }

    数组打印、排序

    import java.util.Arrays;
    
    public class Main {
        public static void main(String[] args) {
            int[] ns = { 1, 1, 2, 3, 5, 8 };
            System.out.println(Arrays.toString(ns));
        }
    }

    可变参数

    class Group {
        private String[] names;
    
        public void setNames(String... names) {//传空可以,无法传null
            this.names = names;
        }
    }

    调用时:

    Group g = new Group();
    g.setNames("Xiao Ming", "Xiao Hong", "Xiao Jun"); // 传入3个String
    g.setNames("Xiao Ming", "Xiao Hong"); // 传入2个String
    g.setNames("Xiao Ming"); // 传入1个String
    g.setNames(); // 传入0个String

    构造方法

    • 没有在构造方法中初始化字段时,引用类型的字段默认是null,数值类型的字段用默认值,int和boolean的默认值分别是0、false

    • 创建对象实例时,按照如下顺序: 1. 先初始化字段,例如,int age = 10;表示字段初始化为10double salary;表示字段默认初始化为0String name;表示引用类型字段默认初始化为null 2. 执行构造方法的代码进行初始化。

    • 多构造方法,一个构造方法可以复用其他构造方法,通过this关键字。

    class Person {
        private String name;
        private int age;
    
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public Person(String name) {
            this(name, 18); // 调用另一个构造方法Person(String, int)
        }
    
        public Person() {
            this("Unnamed"); // 调用另一个构造方法Person(String)
        }
    }

    super

    • 子类引用父类的字段时,可以用super.fieldName

    • 任何class的构造方法,第一行语句必须是调用父类的构造方法。如果没有明确地调用父类的构造方法,编译器会帮我们自动加一句super();


    final

    • 只要某个class没有final修饰符,那么任何类都可以从该class继承即不允许子类继承。

    • 如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final。用final修饰的方法不能被Override

    • 被final修饰的变量或引用不允许再赋值。

    • 对于一个类的实例字段,同样可以用final修饰。用final修饰的字段在初始化后不能被修改。


    转型

    • 向上转型:把一个子类类型安全地变为父类类型的赋值(upcasting),转型后只能调用父类的方法,如果子类覆盖了父类的方法,则调用子类的方法,对于只有子类才有的方法,通过父类的引用将无法调用。

    • 向下转型:把一个父类类型强制转型为子类类型,就是向下转型(downcasting)。只用父类引用真实指向的是子类,才能向下转型,否则会失败,会报ClassCastException

    • instanceof操作符,可以先判断一个实例究竟是不是某种类型。


    多态

    在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)。

    Override和Overload不同的是,如果方法签名如果不同,就是Overload,Overload方法是一个新方法;如果方法签名相同,并且返回值也相同,就是Override

    Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。

    这个非常重要的特性在面向对象编程中称之为多态。它的英文拼写非常复杂:Polymorphic。

    多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。

     

  • 相关阅读:
    Java在linux环境下和windows环境下日期字符串显示不同
    PPT制作手机手指滑动效果
    linux segmentation fault记录
    Linux SDK之uClinux、Broadcom、Atheros、Realtek、Ralink、Marvell、Intel
    chrome保存网页为单个文件(mht格式)
    解决liblzo2.so缺失
    What is uClinux?
    linux(CentOS5.8)环境下搭建Radius
    去除快捷方式小箭头
    【转载】ssh(安全外壳协议)
  • 原文地址:https://www.cnblogs.com/biwangwang/p/14263079.html
Copyright © 2011-2022 走看看