Java 基础

123 阅读5分钟

一、基础内容介绍

  • JavaSE - 标准版 桌面程序、控制台开发。
  • JavaME - 嵌入式开发(手机、小家电)
  • JavaEE - E企业级开发 (web端、服务器开发...)
  • JDK : Java Development Kit 包含 JRE 和 JVM
  • JRE: Java 运行时环境。包含虚拟机
  • JVM:虚拟机

1、搭建环境

地址 www.bilibili.com/video/BV1Ho… www.bilibili.com/video/BV1Fi…

搭建JDK

  1. 百度搜索JDK8.选择Orcal官方下载 window64 下载。
  2. 双击打开。选择路径、开始安装。
  3. 配置环境变量

系统变量添加 image.png

配置Path变量

image.png

  1. java -version 查看是否安装成功

image.png

2、Java基础知识

(1)、主函数

public class Hellow {
    public static void main(String[] args) { // psvm
        System.out.println("hellow word"); // sout
    }
}

(2)、快捷键

Ctrl + Alt + L 快速格式化代码
Ctrl + Alt + V 快速生成返回值

(3)、数据类型

Java是强类型语言。所有变量都必须先定义后才能使用。 (安全、严谨)

  • 基本类型
public static void main(String[] args) {
    byte age2 = 1;  // 127  一个字节
    short age = (short) 1; // 32767 两个字节
    int a = 2; // 4 个字节  21 4748 3647
    int bigNumber = 10_0000_0000;
    double b = 2.2;
    float c = 1.2f;
    char st = 'a'; // 2个字节
    boolean haveShow = true;

    String str = "111"; //
}
float num1 = 0.1f;
double num2 = 1.0/10;
System.out.println(num1 == num2); // false
// 有限 离散 接近但不等于

(4)、其他

image.png

2、语法

(1) 方法多参数

public static void main(String[] args) {
     // 自调用
    (new  JavaTest()).testMany(1, 2, 3,4444);
}

void  testScannerMain() {
    Scanner s = new Scanner(System.in);
    System.out.println("使用next 接收输入参数 ");
    if (s.hasNext()) {
        String str = s.next();
        System.out.println(str);
    }
    // next() 会自动去除空白。有空格就结束了
    // nextLine() 以回车为结束符。可以获得空白
    s.close();
}

void testScannerOther() {
    Scanner s = new Scanner(System.in);
    System.out.println("使用next 接收输入整数 ");
    if (s.hasNextInt()) {
        int str = s.nextInt();
        System.out.println(str);
    }
    // next() 会自动去除空白。有空格就结束了
    // nextLine() 以回车为结束符。可以获得空白
    s.close();
}

/** 循环的关键字
 * break    终止循环
 * continue 终止本次循环
 * return   终止方法
 */

/**
 * 方法的定义
 * 修饰符  返回值类型    方法名 (参数) {}
 */

/**
 * 方法的重载
 * 一个类中、相同的方法名、不同的参数。 Java 是可以重载的如下方法
 * 方法重载调用的时候会逐个去匹配。如果全都匹配不上就会报错,
 */
void max(double a, double b) {}
void max(int a, int b) {}


/**
 * 可变参数
 * @param arguments
 */
void testMany(int... arguments) {
    for (int i = 0; i <arguments.length; i ++) {
        System.out.println(arguments[i]);
    }
}
  • List
void  testList() {
    System.out.println("hellow word");

    int[] intList = new int[10]; // 可以存放10个类型的int
    intList[0] = 1;

    int[] nums = {1, 2, 3}; // 直接初始化
    // Java数组里面类型相同

    int intList2[];

    // for each
    for (int content: nums) {
        System.out.println(content);
    }

    // Arrays.toStrong(打印数组)
    System.out.println(Arrays.toString(nums));
    // Arrays.sort  排序升序
}
  • 引用类型
package TestObject;

public class Person {

    String name;

    // 默认构造函数
    public Person() {

    }

    // 一定定义有参构造, 机必须显示定义无参构造、不然创建对象会报错。
    public Person(String name) {
        this.name = name;
    }

    // alt + insert 自动生产 get set
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    void  say() {
        System.out.println("aaaa");
    }
}

多态

package TestObject;

// Java 只有单继承
// ctrl + H 可以看继承树  student = Person = Object
public class student extends Person implements UserService {

    @Override
    void say() {
        System.out.println(this.name);
        super.say();
    }

    @Override
    public void run() {

    }

    @Override
    public  void eat() {
        System.out.println("eat");
    }

    // instanceof 用于类型判断
    public static void main(String[] args) {
        Person per = new student();
        System.out.println(per instanceof Person); // true
        ((student)per).eat(); // 类型转换

    }

    static int age = 1;
    double height = 22;

    void testStatic() {
        student stu = new student();
        System.out.println(student.age);
        System.out.println(stu.age);
        System.out.println(stu.height);
    }

    static  { // 静态代码块、类加载的时候会执行、且只会执行一次。

    }

    {// 匿名代码块  可用于 初始值  初始化

    }
    // 加载顺序 1、 静态代码块 == 匿名代码块 === 构造方法。 但是静态代码块只会执行一次
}


/**
 * 多态:
 * 1、同一个方法可以根据发送对象的不同、而采用多种不同的行为方式。
 * 2、一个对象的实际类型是确定的、但可以指向对象的引用类型有很多
 * Person per = new Student();
 * 动态编译:
 */

/**
 * static 方法、属于类:
 *        静态方法:
 *        静态属性:
 * final 常量    断子绝孙
 * private 私有
 */

抽象类

package TestObject;

// 抽象类
public abstract class Action {

    // 约束、有人帮我们实现就好了。
    public  abstract void  doSomething(); // 只有方法名、没有实现

    public void  doSelf() {
        System.out.println("action do self");
    }
}

/**
 * 抽象类不能 new 出来、只能靠自己去实现他, 他就是一个约束。 抽象类就是法律。
 * 抽象类的所有方法、子类必须全部实现、   除非他的子类也是抽象类
 * 正常类不能拥有抽象方法。 但是抽象类可以有正常的方法。
 *
 * 存在的意义:帮一些公有的东西抽象出来、提高开发效率。
 */

接口

package TestObject;

/**
 * 接口:只有规范、没有方法实现。   专业的约束、约束和实现的分离。
 * 正常类、通过 implements 来实现接口。 必须要实现接口中的所有方法。一个类可以实现多个接口  public class student extends Person implements UserService {}
 */

public interface UserService {
    // 接口中的所以定义都是 抽象的  public abstract
    void  run();

    // 接口的 常量也是默认加上 public static final
    public static final int port = 99;

    // public abstract 是灰色的状态。 说明可以不写,
    public abstract void eat();
}

接口和抽象类的区别

(抽象类是对事物的抽象、接口是对行为的抽象、抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。 抽象类是一种模板式设计,而接口是一种行为规范,是一种辐射式设计。)

  • 抽象类可以定义完成的方法。接口只有抽象方法
  • 一个类可以实现多个接口。
  • 接口中的实例变量默认是 final 类型的,而抽象类中则不一定
  • 一个类实现接口的话要实现接口的所有方法,而抽象类不一定 (抽象方法一定要实现、非抽象可以不实现)

(3)、异常

image.png

package TestObject;

public class TestError {

    /**
     * try
     * catch
     * finally  无论执行不执行。都会邹. 例如关闭scanner 关闭 IO流等。
     * throw    主动抛出异常
     * throws
     * @param args
     */
    public static void main(String[] args) {
        int a = 1;
        int b = 0;
        try {
            double c = a / b;
        } catch (ArithmeticException e ) {
            System.out.println(e.toString()); // java.lang.ArithmeticException: / by zero
        } finally {
            System.out.println("哦哦哦");
        }
        System.out.println("send over");

        // ctrl alt T 自动生成代码块  if  try 等
        try {
            if (b == 0) {
                throw new ArithmeticException();
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
        }
    }

    void testThrow() {
        throw new ArithmeticException();
    }

    // 如果这个方法处理不了异常 可以给他跑出来
    void testThrow2() throws Exception{
        throw new ArithmeticException();
    }

}