一、数组
数组是一种存储多个相同类型数据的线性数据结构。
在Java中,可以使用new
关键字来创建数组,并可以在定义时直接赋值。
注意:数组的定义和赋值要在同一行
int[ ]a = new int[19];//创建一个包含19个整数的数组a
/*这里,a
是数组的引用变量,它存储了数组在内存中的地址。数组本身存储在堆内存中,而引用变量a
则存储在栈内存中。*/
不能直接对二维数组的第一维进行赋值,如a[][]
这样的语法是不正确的。
正确的做法是先初始化第一维,再对第二维进行初始化。例如:
int[][] a = new int[3][]; // 创建一个3行的不定列数的二维数组
a[0] = new int[5]; // 为第一行分配5个整数的空间
a[0][1] = 1; // 给第一行第二列的元素赋值为1
二、面向对象
面向对象编程(OOP)是Java的核心特性之一。
它强调以类为中心,通过类和对象来描述现实世界中的事物和它们之间的关系。
学习目标:
1.理解对象和类
2.如何定义类和创建类的对象
3.理解并使用构造方法
4.使用UML符号描述类和对象
5.区分对象引用变量和基本类型变量
6.声明带有get方法和set方法的私有数据域
7.编写带有参数的方法
8.理解静态变量与实例变量、静态方法与实例方法的区别
9.掌握使用this
关键字访问对象自身的方法或属性。
封装性:
对象属性和行为变为整体;部分信息不透露
封装是面向对象编程的三大特性之一。它通过将对象的属性和行为封装在一个整体中,隐藏对象的内部状态和实现细节,仅对外提供公共的访问方式(如getter和setter方法),从而保护对象不被外部随意修改,确保数据的完整性和安全性。
Getter方法:
用于获取私有变量的值。
这些方法通常没有参数,并且返回一个与私有变量类型相同的值。例如:
public class User {
private String password;
public String getPassword() {
return password;
}
}
在这个例子中,getPassword()就是一个getter方法
它返回password私有变量的值。
Setter方法:
用于设置私有变量的值。这些方法通常有一个参数,用于指定新的值。例如:
public class User {
private String password;
public void setPassword(String newPassword) {
this.password = newPassword;
}
}
在这个例子中,setPassword(String newPassword)就是一个setter方法
它接受一个字符串参数newPassword,并将其设置为password私有变量的新值。
继承性:
类之间的关系,在原有类的基础上进行扩展.
继承是面向对象编程中的另一个重要特性,它描述了类之间的层次关系。通过继承,一个类(子类或派生类)可以继承另一个类(父类或基类)的属性和方法,从而实现对原有类的扩展和复用。
多态性:
多态性是面向对象编程的第三个特性,它允许使用父类类型的引用变量来引用子类对象,并在运行时根据对象的实际类型来调用相应的方法。这增强了代码的灵活性和可扩展性。
类的定义:
类是使用class
关键字来定义的。类包含了成员变量(属性)和成员方法(行为)。
class name{
成员变量;//全局变量
成员方法;
}
类名通常采用驼峰命名法,即第二个单词的首字母大写,其余小写。
class Student { // 定义一个名为Student的类
String studentName; // 成员变量:姓名
int studentAge; // 成员变量:年龄
String studentSex; // 成员变量:性别
void read() { // 成员方法:读书
// 方法体
}
// 可以包含其他方法或构造函数等
}
对象创建与使用:
对象是通过类的构造方法来创建的。首先,我们需要声明一个对象引用变量,并将其初始化为null
。然后,使用new
关键字调用类的构造方法来创建对象,并将对象的引用赋值给引用变量。例如:
类名 对象名称 = null;//声明
对象名称 = new 类名();//创建
Student stu1 = null; // 声明一个Student类型的引用变量stu1并初始化为null
stu1 = new Student(); // 创建Student对象并将引用赋值给stu1
//其实也可以直接
Student stu2 = new Student();
类似C的结构体,在栈内存开辟stu1,stu2的内存空间,”小明“、”李华“存至堆。
class Student{
String name;//声明姓名属性
void read(){
System.out.println("大家好,我是"+name);
}
}
public class Example01{
public static void main(String[] args){
Student stu1 = new Student();//创建第一个Student对象
Student stu2 = new Student();//创建第二个Student对象
stu1.name = "小明";//给stu1对象的name属性赋值
stu1.read();//调用stu1对象的方法read
stu2.name = "李华";//给stu2对象的name属性赋值
stu2.read();//调用stu2对象的方法read
}
}
访问控制权限:
Java提供了四种访问控制权限修饰符
它们按照访问权限从小到大依次为:private-default-protected-public
这些修饰符用于控制类、方法和变量的访问范围,从而保护代码的安全性和封装性。
构造方法:
方法名(){ }
构造方法是类中的一个特殊方法,用于初始化对象的状态。
构造方法的名称必须与类名相同,且没有返回类型。
当创建对象时,构造方法会被自动调用。
class Student {
String name;
int age;
// 构造方法
public Student(String name, int age) {
this.name = name; // 使用this关键字引用当前对象的属性
this.age = age;
}
// 其他方法...
}
重载:
同一类用多个同名方法,参数列表(个数,类型,顺序不同)
重载(Overloading)是Java中面向对象编程的一个重要概念,它允许在同一个类中定义多个同名的方法,但每个方法的参数列表(包括参数的个数、类型或顺序)必须不同。
这样,当调用方法时,Java会根据提供的参数来匹配并调用相应的方法。
重载的方法必须有不同的参数列表,以便编译器能够区分应该调用哪个方法。这增加了代码的灵活性和可读性,因为它允许我们使用相同的方法名来执行不同的操作,只要这些操作接受的参数不同。
public class Calculator {
// 重载的add方法,接受两个整数参数
public int add(int a, int b) {
return a + b;
}
// 重载的add方法,接受两个浮点数参数
public double add(double a, double b) {
return a + b;
}
// 重载的add方法,接受三个整数参数
public int add(int a, int b, int c) {
return a + b + c;
}
public static void main(String[] args) {
Calculator calc = new Calculator();
// 调用接受两个整数参数的方法
int sumInts = calc.add(5, 3);
System.out.println("Sum of integers: " + sumInts);
// 调用接受两个浮点数参数的方法
double sumDoubles = calc.add(5.5, 3.3);
System.out.println("Sum of doubles: " + sumDoubles);
// 调用接受三个整数参数的方法
int sumThreeInts = calc.add(5, 3, 2);
System.out.println("Sum of three integers: " + sumThreeInts);
}
}