Java基础语法(一)

一、基础语法

  1. 数据类型

    • 基本数据类型:

      • 整数类型:包括 byte(1 字节,范围是 - 128 到 127)、short(2 字节,范围是 - 32768 到 32767)、int(4 字节,范围是 - 2147483648 到 2147483647)和 long(8 字节)。例如,定义一个 int 类型的变量int num = 10;

      • 浮点类型:float(4 字节)和 double(8 字节)。float 类型的数值后面需要加fF,如float f = 3.14f;,而 double 类型可以直接写数值,如double d = 3.1415926;

      • 字符类型:char(2 字节),用于表示单个字符,用单引号括起来,如char c = 'A';

      • 布尔类型:boolean,只有truefalse两个值,用于逻辑判断,如boolean flag = true;

    • 引用数据类型:包括类、接口、数组等。例如,定义一个字符串(String 是一个类,属于引用数据类型)String str = "Hello";

  2. 变量和常量

    • 变量:是程序运行过程中可以改变的值的存储单元。变量在使用前需要先声明,声明格式为数据类型 + 变量名,如int age;,然后可以对变量进行赋值,age = 20;也可以在声明时同时赋值int height = 170;

    • 常量:是程序运行过程中不能改变的值。在 Java 中,用final关键字定义常量,例如final double PI = 3.14159;,一旦定义后,PI 的值就不能再被修改。

  3. 运算符

    • 算术运算符:包括加(+)、减(-)、乘(*)、除(/)、取余(%)。例如,int a = 10, b = 3; int result1 = a + b;(结果为 13),int result2 = a % b;(结果为 1)。

    • 关系运算符:用于比较两个值,包括等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。返回值是布尔类型,如boolean compare = (5 > 3);(结果为true)。

    • 逻辑运算符:用于连接多个布尔表达式,包括与(&&)、或(||)、非(!)。例如,boolean andResult = (true && false);(结果为false),boolean orResult = (true || false);(结果为true)。

    • 位运算符:对整数的二进制位进行操作,包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)、右移(>>)和无符号右移(>>>)。例如,int num1 = 5; //二进制为0101,int num2 = 3; //二进制为0011,int bitAndResult = num1 & num2;(结果为 1,二进制为 0001)。

  4. 控制语句

    • 条件语句:

      • if - else 语句:根据条件执行不同的代码块。例如,if (age >= 18) { System.out.println("成年人"); } else { System.out.println("未成年人"); }

      • switch 语句:用于多分支选择,它根据表达式的值来匹配多个case常量。例如,int day = 3; switch(day) { case 1: System.out.println("星期一"); break; case 2: System.out.println("星期二"); break; default: System.out.println("其他"); break; }

    • 循环语句:

      • for 循环:用于已知循环次数的情况。格式为for(初始化表达式; 条件表达式; 更新表达式) {循环体}。例如,for(int i = 0; i < 10; i++) { System.out.println(i); }会输出 0 到 9。

      • while 循环:在条件为真时执行循环体。例如,int j = 0; while(j < 5) { System.out.println(j); j++; }会输出 0 到 4。

      • do - while 循环:先执行一次循环体,然后再判断条件。例如,int k = 0; do { System.out.println(k); k++; } while(k < 3);会输出 0、1、2。

二、面向对象编程(OOP)概念

  1. 类和对象

    • :是一种抽象的数据类型,用于定义对象的属性和行为。例如,定义一个Person类,包含属性(成员变量)nameage,以及行为(方法)speak

class Person {
    String name;
    int age;
    void speak() {
        System.out.println("我叫" + name + ", 我今年" + age + "岁。");
    }
}
  • 对象:是类的实例。可以通过new关键字创建对象,例如Person p = new Person(); p.name = "张三"; p.age = 20; p.speak();

  1. 封装、继承和多态

    • 封装:是将数据(属性)和操作数据的方法封装在一起,对外部隐藏实现细节。在 Java 中,通过访问修饰符(privateprotectedpublic)来控制访问权限。例如,将Person类中的nameage属性设为private,并提供publicgetset方法来访问和修改属性。

class Person {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    void speak() {
        System.out.println("我叫" + name + ", 我今年" + age + "岁。");
    }
}
  • 继承:是一种创建新类(子类)的方式,子类继承父类的属性和方法。例如,定义一个Student类继承Person类,Student类可以继承Person类的nameage属性以及speak方法,并且可以添加自己的属性和方法。

class Student extends Person {
    int grade;
    void study() {
        System.out.println("我是" + grade + "年级的学生。");
    }
}
  • 多态:是指同一个行为具有多种不同表现形式。在 Java 中有两种实现方式,方法重载和方法重写。

    • 方法重载:是在同一个类中,方法名相同,但参数列表不同(参数个数、类型、顺序不同)。例如,在一个Calculator类中有两个add方法,int add(int a, int b) { return a + b; }double add(double a, double b) { return a + b; }

    • 方法重写:是在子类中重新定义父类中已经存在的方法,方法签名(方法名、参数列表、返回类型)必须相同。例如,Student类重写Person类的speak方法,@Override void speak() { System.out.println("我是学生,我叫" + name + ", 我今年" + age + "岁。"); }

三、异常处理

  1. 异常类型

    • 检查异常(Checked Exception):是编译器要求必须处理的异常,例如IOException(用于处理输入输出异常)。如果一个方法可能抛出检查异常,要么在方法内部用try - catch块处理,要么在方法声明中用throws关键字声明抛出异常。

    • 运行时异常(Runtime Exception):是在程序运行过程中可能出现的异常,例如NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)。这些异常可以不进行显式处理,但为了程序的健壮性,最好还是进行处理。

  2. 异常处理机制

    • try - catch - finally 块try块中放置可能抛出异常的代码,catch块用于捕获并处理异常,finally块中的代码无论是否发生异常都会执行。例如,

try {
    int[] arr = new int[3];
    System.out.println(arr[5]);
} catch (ArrayIndexOutOfBoundsException e) {
    System.out.println("数组下标越界");
} finally {
    System.out.println("这部分代码总会执行");
}

四、集合框架

  1. List 接口

    • ArrayList:是一个动态数组,它可以自动扩容。可以通过索引访问元素,元素可以重复。例如,

ArrayList list = new ArrayList<>();
list.add("苹果");
list.add("香蕉");
System.out.println(list.get(0));
  • LinkedList:是一个双向链表实现的集合,它在插入和删除元素时效率较高,特别是在列表头部或尾部操作。例如,LinkedList linkedList = new LinkedList<>(); linkedList.addFirst(1); linkedList.addLast(2);

  1. Set 接口

    • HashSet:是基于哈希表实现的集合,它不允许元素重复,元素的存储顺序是无序的。例如,HashSet set = new HashSet<>(); set.add("红色"); set.add("蓝色");

    • TreeSet:是基于红黑树实现的集合,它不允许元素重复,并且元素是按照自然顺序或者自定义比较器进行排序的。例如,TreeSet treeSet = new TreeSet<>(); treeSet.add(3); treeSet.add(1);(元素会按照从小到大的顺序存储)。

  2. Map 接口

    • HashMap:是基于哈希表实现的键值对集合,键是唯一的,值可以重复。例如,HashMap map = new HashMap<>(); map.put("张三", 20); map.put("李四", 22);

    • TreeMap:是基于红黑树实现的键值对集合,键按照自然顺序或者自定义比较器进行排序。例如,TreeMap treeMap = new TreeMap<>(); treeMap.put("王五", 25); treeMap.put("赵六", 23);(键会按照字典顺序排序)。

五、输入输出(I/O)操作

  1. 字节流和字符流

    • 字节流:用于处理二进制数据,以字节为单位进行读写。例如,FileInputStream用于从文件中读取字节数据,FileOutputStream用于向文件中写入字节数据。

try {
    FileInputStream fis = new FileInputStream("input.txt");
    int data;
    while((data = fis.read())!= - 1) {
        System.out.print((char)data);
    }
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}
  • 字符流:用于处理文本数据,以字符为单位进行读写。例如,FileReader用于从文件中读取字符数据,FileWriter用于向文件中写入字符数据。

try {
    FileReader fr = new FileReader("input.txt");
    int c;
    while((c = fr.read())!= - 1) {
        System.out.print((char)c);
    }
    fr.close();
} catch (IOException e) {
    e.printStackTrace();
}
  1. 缓冲流

    • 缓冲流是在字节流和字符流的基础上增加了缓冲功能,可以提高读写效率。例如,BufferedReader用于缓冲字符输入流,BufferedWriter用于缓冲字符输出流,BufferedInputStream用于缓冲字节输入流,BufferedOutputStream用于缓冲字节输出流。

try {
    BufferedReader br = new BufferedReader(new FileReader("input.txt"));
    String line;
    while((line = br.readLine())!= null) {
        System.out.println(line);
    }
    br.close();
} catch (IOException e) {
    e.printStackTrace();
}

你可能感兴趣的:(python,java,算法)