Java基础语法查漏补缺

Java基础语法查漏补缺

注释

1.单行注释:
//
2.多行注释:以/*开头,以*/结尾
/*
 *内容
 */
3.文档注释:以/**开头,以*/结尾
/**
 * @author niyun
 * @date 2021/3/17 16:40
 */

类型转换

本地图片类型转换顺序

本地图片类型转换顺序

  • byte--short--char-->int-->long-->float-->double

  • float类型可能在输出存在bug

  • 强制转换注意精度/溢出问题

  • JDK7新特性,数字之间可以用下划线分割

public class HelloWorld {
    public static void main(String[] args) {
        int money = 10_0000_0000;
        System.out.println(money);
    }
}

输出:1000000000

变量

  • 局部变量必须声明和初始化值

  • 实例变量:从属于对象;如果不进行初始化,默认int 0/String null,boolean false;

  • 变量名前面修饰符不分先后顺序static final double == final static double

运算符

  • short+byte结果为int类型

  • 幂运算用工具类

    Math.pow(2,3)//2的3次方
    

Scanner

  • 使用hasNext方式接收和使用hasNextLine方式接收:

使用hasNext方式接收和使用hasNextLine方式接收

  1. hasNext方式:
public class HelloWorld {
    public static void main(String[] args) {
        //alt+shift+L快捷生成对象前面的
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用next方式接收:");
        if(scanner.hasNext()){
            String str = new String();
            str = scanner.next();
            System.out.println(str);
        }
        scanner.close();
    }
}

输入:hello world!
输出:hello
  1. hasNextLine方式:
public class Scannner {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("使用nextLine方式接收:");
        if(scanner.hasNextLine()){
            String str = new String();
            str = scanner.nextLine();
            System.out.println(str);
        }
        scanner.close();
    }
}

输入:hello world!
输出:hello world!

Switch

Java文件代码:

package com.yunni.struct;
/**
 * @author niyun
 * @date 2021/3/6 17:46
 */

import java.time.Duration;
import java.time.LocalTime;

public class SwitchDemo01 {
    public static void main(String[] args) {
        String name = "niyun";
        switch (name){
            case "niyun":
                System.out.println("倪运");
                break;
            case "zhangsan":
                System.out.println("张三");
                break;
            default:
                System.out.println("error!");
        }
    }
}

IDEA反编译class文件后的代码:

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package com.yunni.struct;

public class SwitchDemo01 {
    public SwitchDemo01() {
    }

    public static void main(String[] args) {
        String name = "niyun";
        byte var3 = -1;
        switch(name.hashCode()) {
        case -1432604556:
            if (name.equals("zhangsan")) {
                var3 = 1;
            }
            break;
        case 104835383:
            if (name.equals("niyun")) {
                var3 = 0;
            }
        }

        switch(var3) {
        case 0:
            System.out.println("倪运");
            break;
        case 1:
            System.out.println("张三");
            break;
        default:
            System.out.println("error!");
        }

    }
}

For循环

  • 100.for快捷生成for循环(fori也可以自动生成for循环)
  • outer标签(了解):
//打印101--150之间的质数
public class OuterDemo {
    public static void main(String[] args) {
        //不建议使用outer标签
        outer:
        for (int i = 101; i < 150; i++) {
            for (int j = 2; j < i / 2; j++) {
                if (i % j == 0) {
                    continue outer;
                }
            }
            System.out.print(i + "\t");
        }
    }
}
  • 打印高度5行的三角形
public class TriangleTestDemo {
    public static void main(String[] args) {
        //打印高度5行三角形
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >=i ; j--) {
                System.out.print(" ");
            }
            for (int k = 0; k < i; k++) {
                System.out.print("*");
            }
            for (int l = 1; l < i; l++) {
                System.out.print("*");
            }
            System.out.println();
        }
    }
}

命令行传参

  • 有时候希望运行一个程序的时候再传递给他信息
public class CommandLine {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "]:" + args[i]);
        }
    }
}
  1. 通过命令行编译该java文件生成class文件
  2. 进入src目录执行(不进入会报错)
  3. 通过java执行class文件,后面携带参数

CommandLine截图

可变参数

  • JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
  • 在方法的声明中,在指定参数类型后加一个省略号(...)。
  • 一个方法中只能指定一个可变参数,它必须是方法最后一个参数。任何普通的参数必须在它之前声明。
public class MaxValue {
    public static void main(String[] args) {
        MaxValue maxValue = new MaxValue();
        maxValue.printMax(1,2,3,4,5,6,7,9,100,1,1000);
    }
    public static void printMax(int ... x) {
        if (x.length == 0) {
            System.out.println("传入参数个数为0!!!");
            return;
        }
        int max = x[0];
        for (int i = 0; i < x.length; i++) {
            if (x[i] > max) {
                max = x[i];
            }
        }
        System.out.println("max is : " + max);
    }
}

输出:max is :1000

值传递和引用传递

  • 引用传递本质上还是值传递

例子:

public class ValueTransmit {
    public static void main(String[] args) {
        int a = 1;
        System.out.print(a+"\t");
        ValueTransmit.change(a);
        System.out.print(a+"\t");

        Person person = new Person();
        System.out.print(person.name+"\t");
        ValueTransmit.changePersonName(person);
        System.out.print(person.name+"\t");
    }
    public static void change(int a) {
        a = 10;
    }
    public static void changePersonName(Person person){
        person.name = "niyun";
    }
}
class Person{
    String name;//null
}

输出:1	1	null	niyun

构造器

  • IDEA看Java的class文件在out目录下:到File--Project Structure--Add Content Root--out--ok

  • 无参构造方法会自动生成

  • 构造方法与类名相同,并且没有返回值

  • 一旦定义了有参构造,必须有无参构造

  • alt + insert 快捷生成构造方法

Java内存图

封装

  • 属性私有,get/set

继承

  • super注意点:

    1. super调用父类的构造方法,必须在构造方法的第一个
    2. super必须只能出现在子类的方法或者构造方法中
    3. super和this不能同时调用gz方法
  • super Vs this:

    代表的对象不同:

    ​ this : 本身调用者这个对象

    ​ super :代表父类对象的应用

    前提:

    ​ this : 没有继承也可以使用

    ​ super : 只能在继承条件才可以使用

    构造方法:

    ​ this();本类的构造!

    ​ super();父类的构造!

  • 重写:需要有继承关系,子类重写父类的方法!

    1. 方法名必须相同
    2. 参数列表必须相同
    3. 修饰符:范围可以扩大但不能缩小: public>protected>default>private
    4. 抛出的异常:范围可以被缩小,但不能扩大; ClassNotFoundException --> Exception(大)

多态

  • 多态注意事项:
    1. 多态是方法的多态,属性没有多态
    2. 父类和子类要有联系,否则类型转换异常!ClassCastException!
    3. 存在条件:继承关系,方法需要重写,父类引用指向子类对象!Father f1 = new Son();
  • 不能重写的方法:
    1. static修饰的方法属于类,不属于实例
    2. final修饰的方法
    3. private修饰的方法
  • instanceof:(x instanceof y,x和y必须有关系,不然直接编译报错)
  • 父类引用指向子类对象:Fu zi=new zi();如果子类重写了父类的方法,那么zi会调用子类的方法,如果父类有方法,子类没有会调用父类的方法,如果父类没有方法子类有方法,要将zi强制转换成子类对象再调用子类方法。

static详解

  • 匿名代码块,静态代码块,构造方法
public class Person {
    //匿名代码块
    {
        System.out.println("匿名代码块");
    }
    //静态代码块,只执行一次
    static {
        System.out.println("静态代码块");
    }
    //构造方法
    public Person() {
        System.out.println("构造方法");
    }
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println("===========");
        Person person02 = new Person();
    }
}

输出:
静态代码块
匿名代码块
构造方法
===========
匿名代码块
构造方法
  • 静态导入包
import static java.lang.Math.random;
import static java.lang.Math.PI;

public class Application {
    public static void main(String[] args) {
        System.out.println(random());
        System.out.println(PI);
    }
}

加入static导包可以直接使用random()方法,否则需要Math.random()

接口

  1. public abstract
  2. public static final
  3. 接口不能被实例化,接口中没有构造方法,抽象类可以有
posted @ 2021-03-22 22:36  血^_^月  阅读(61)  评论(0)    收藏  举报