一. Inheritance(继承)
- 继承(Inheritance)是面向对象编程的重要概念,允许一个类(子类sub-class)从另一个类(父类或超类super-class)继承属性和行为,促进了代码重用和创建类的层次结构。
- 子类可以重用父类的成员变量和方法,并且可以定义自己的新成员变量和方法。
- 继承使用关键字 extends 来实现。子类继承父类的所有非私有****成员变量和方法。子类可以通过继承获得父类的特性,并且可以在其基础上扩展或修改。
- Java 不支持多继承,即一个类不能直接继承多个类。但你可以通过实现接口来实现类似的功能。
- 子类subclass/derived class/child class
- 父类superclass/base class/parent class
- import java.lang.Object
Inheritance_oracle
1. Classes form a hierarchy
- a sub-class extends a super-class
- a child-class extends a parent-class
// 父类(超类)
class Animal {
public void eat() {
System.out.println("Animal is eating.");
}
}
// 子类(继承Animal类)
class Dog extends Animal {
public void bark() {
System.out.println("Dog is barking.");
}
}
// 另一个子类(也继承Animal类)
class Cat extends Animal {
public void meow() {
System.out.println("Cat is meowing.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat(); // 调用父类的方法
dog.bark(); // 调用子类的方法
Cat cat = new Cat();
cat.eat(); // 调用父类的方法
cat.meow(); // 调用子类的方法
// 以下行会导致编译错误,因为Cat类没有bark方法
// cat.bark(); 子类之间不能相互调用
}
}
2. 子类不能直接调用父类的构造方法,需要用super()
- 在Java中,子类是不能直接调用父类的构造函数的。但是,子类的构造函数会隐式调用父类的构造函数,以确保父类的初始化工作完成。
- 这个调用是通过使用 super() 关键字实现的,该关键字用于调用父类的构造函数。在子类的构造函数中,如果没有明确调用 super(),则会自动调用父类的无参数构造函数(如果父类有无参数构造函数)。
class Parent {
private int parentValue;
// 父类构造函数
public Parent(int value) {
this.parentValue = value;
System.out.println("Parent class constructor called with value: " + value);
}
public void displayParentValue() {
System.out.println("Parent value: " + parentValue);
}
}
class Child extends Parent {
private int childValue;
// 子类构造函数
public Child(int parentValue, int childValue) {
super(parentValue); // 显式调用父类构造函数
this.childValue = childValue;
System.out.println("Child class constructor called with value: " + childValue);
}
public void displayChildValue() {
System.out.println("Child value: " + childValue);
}
}
3.子类可访问父类中的public和protected,不能直接访问private,访问private:
1. 使用 Protected 方法
将父类的 private 成员封装在受保护(protected)的方法中,然后子类可以访问这些方法。这种方法使子类能够访问 private 成员,同时仍然保留了一定程度的封装性。
public class Parent {
private int privateField;
protected void setPrivateField(int value) {
privateField = value;
}
}
public class Child extends Parent {
public void modifyPrivateField(int value) {
setPrivateField(value); // 子类可以通过受保护方法访问父类的 private 成员
}
}
2.使用公共方法
如果你希望子类可以间接地访问父类的 private 成员,可以在父类中提供公共方法,通过这些方法来访问 private 成员。
public class Parent {
private int privateField;
public int getPrivateField() {
return privateField;
}
}
public class Child extends Parent {
public void modifyPrivateField(int value) {
int currentValue = getPrivateField();
// 在子类中可以通过公共方法访问父类的 private 成员
}
}
需要注意的是,直接访问父类的 private 成员可能破坏了封装性和安全性,因此在设计时要慎重考虑。通常,推荐使用受保护方法或公共方法来访问这些成员,以保持代码的良好封装和可维护性。
二. 字符&进制
字符字面值包括单个字符,使用单引号括起来。
char letterA = 'A';
字符串字面值使用双引号括起来。
String greeting = "Hello, World!";
浮点数字面值可以使用小数点来表示浮点数,也可以使用科学计数法。
double floatValue = 3.14; // 常规浮点数
double scientificValue = 1.23e-4; // 科学计数法
整数字面值可以用十进制、八进制(以0开头)或十六进制(以0x开头)表示。
- binary二进制
- octal八进制
- demical十进制
- hexadecimal十六进制
int decimalValue = 42; // 十进制
int octalValue = 052; // 八进制
int hexValue = 0x2A; // 十六进制
Java还允许使用特殊字符转义序列来表示特殊字符,如换行符 \n、制表符 \t 等。
String specialCharacters = "Newline: \nTab: \t";
三. Array
Array holds a fixed number of values of a given type (or sub-type) that can be accessed by an index.
oracle_array
1.数组的声明和初始化
要声明一个数组,需要指定数组的数据类型,然后使用方括号 [] 来表示数组。例如,int[] numbers 声明了一个整数数组。
数组可以通过 new 操作符来初始化,或者使用花括号 {} 列出初始化元素。
int[] values;//声明
int[] numbers = new int[5]; // 声明并初始化一个包含5个整数的数组
int[] values = {10, 20, 30, 40, 50}; // 初始化数组并赋予初值
values = new int[]{10, 20, 30, 40, 50};
2.数组的访问
数组的元素可以通过索引来访问,索引从 0 开始,依次递增。例如,numbers[0] 访问数组中的第一个元素。
int firstValue = numbers[0]; // 访问数组中的第一个元素
3.数组的长度
您可以使用数组的 length 属性来获取数组的长度,即数组中包含的元素数量。
int arrayLength = numbers.length; // 获取数组的长度
4.数组的迭代
您可以使用循环来迭代数组中的所有元素,例如 for 循环或增强的 for-each 循环。
for (int i = 0; i < arrayLength; i++) {
int element = numbers[i];
// 处理数组中的每个元素
}
for (int value : values) {
// 使用增强的 for-each 循环遍历数组
}
5.多维数组
Java支持多维数组,例如二维数组、三维数组等。多维数组可以用来表示矩阵、表格等多维数据结构。
int[][] matrix = {
{1, 2, 3},
{4, 5, 6}
};
int value = matrix[1][2]; // 访问二维数组中的元素
6.数组的注意事项
- 数组的大小一旦确定,就无法更改。要改变数组的大小,需要创建一个新数组并复制元素。
- 数组的元素类型必须一致,即数组中的所有元素都必须是相同的数据类型。
- 数组可以存储基本数据类型(如整数、浮点数)或对象引用。
Java数组是一个重要的数据结构,用于处理和组织大量数据。在编写Java程序时,数组通常用于存储和操作列表、集合、表格等数据。通过合理使用数组,可以有效地管理和操作数据。
三. expression & statement
1. expression
- A construct that evaluates to a single value.
- made up of:
-
- variables变量
-
- literals字符
-
- operators操作符
-
- method invocations方法调用
- 在计算机编程中,表达式(Expression)是由操作符、操作数和变量组成的组合,用于计算某个值。表达式可以是数学表达式、逻辑表达式、字符串拼接等,它们可以用于计算或产生值。
- Compound expressions follow precedence rules.(use parentheses clarify, disambiguation
(1) operators 操作符
oracle_operators1; o_operators2
- assignment = 赋值操作符
- arithmetic + - * / % += ± *= /= %= 算数操作符
- unary + - ++ – ! 一元操作符
- equality == !=, relational > >= < <=, logical && || instanceof 相等性、关系和逻辑操作符
(instanceof:用于检查对象是否是特定类的实例。返回布尔值。)
//instanceof 是一个关键字,用于检查对象是否是特定类或接口的一个实例。
//它通常用于进行类型检查,以确定对象是否属于特定的类或接口的子类或实现类。
object instanceof ClassName
object 是要检查的对象。
ClassName 是要检查的类名或接口名。
instanceof 返回一个布尔值,如果对象是指定类或接口的一个实例,则返回 true,否则返回 false。
- bitwise ~ & ^ | << >> >>> 位运算操作符
~:按位取反,对二进制中的每一位取反。
&:按位与,对两个二进制数的每一位进行与操作。
|:按位或,对两个二进制数的每一位进行或操作。
^:按位异或,对两个二进制数的每一位进行异或操作。
<<:左移,将二进制数向左移动指定的位数,相当于乘以2的幂次方。
>>:带符号右移,将二进制数向右移动指定的位数,带符号位保持不变,相当于除以2的幂次方。
>>>:无符号右移,将二进制数向右移动指定的位数,不保留符号位,用0填充。
这些位运算操作符通常用于处理底层的二进制数据,例如位掩码、位标志等。
- object creation(new) 对象创建操作符
new:用于创建对象的关键字。通过 new 关键字,可以实例化类,并在内存中分配对象的空间。例如,MyClass obj = new MyClass(); 创建了一个类型为 MyClass 的对象,并将其引用分配给变量 obj。
2.statement
A complete unit if of execution.
(1)expression statement 表达式语句
表达式语句是一种语句,用于执行表达式并忽略其结果。通常,表达式语句的目的是执行某些操作而不是返回一个值。例如,x++; 是一个表达式语句,它递增了变量 x 的值。
- assignment expresions
- use of ++ or –
- metho call
- object creation expressions
(2)declaration statements 声明语句
声明语句用于定义变量并指定其数据类型。声明语句用于在程序中引入新的变量,以便后续使用。例如,int y; 是一个声明语句,它声明了一个整数变量 y。
(3)control flow statements 控制流语句
控制流语句用于控制程序的执行流程,例如条件语句(如 if、else)、循环语句(如 for、while)以及其他控制结构。这些语句决定了哪些代码块会被执行,以及它们的执行顺序。
int a; // declaration statements
a=7; // expression statements
++a; // expression statement, increase a by 1