- 方法的重载: 指的是方法名称相同,但是参数的类型和个数不同。通过参数的类型和个数不同来完成不同的功能。
- 类的定义:
class 类名称 {
String name; // 属性
int age;
public void tell(){ // 方法
System.out.println("姓名:" + name + " " + "年龄:" + age);
}
}
- 类与对象的关系:类是对某一类事物的描述,是抽象的概念上的意义。对象是实际存在于该类事物的每一个个体,是类的实例。
public static void main(String[] args) {
/*
创建对象
赋值: 对象.属性
对方法进行调用: 对象.方法
*/
people per = null; //声明 开辟了栈内存空间
per = new people(); //实例化 使用new开辟了堆内存空间
people per = new people(); //声明并实例化
}
- 面向对象的三大特性:
封装:对外部不可见
继承:扩展类的功能
多态:方法的重载,对象的多态性 - 方法的递归:递归调用是一种特殊的调用形式,就是方法自己调自己。
方法是否满足条件? 是:返回调用处
否:执行语句,递归调用
// 递归示例,从100加到1
public class addNum {
public static void main(String[] args) {
System.out.println(addANum(100));
}
public static int addANum(int nums) {
if (nums == 1) {
return 1;
} else {
return nums + addANum(nums - 1);
}
}
}
- 封装性的使用
目的:保护某些属性和方法不被外部访问
实现: 对属性和方法进行封装是通过关键字private进行声明的。
Get和set可以为外部访问提供接口
class people {
private String name;
private int age;
public int getAge(){
return age;
}
public void setAge(int a){
if (a > 0 && a < 150) {
this.age = a;
}
}
public String getName(){
return name;
}
public void setName(String n){
this.name = n;
}
public void tell() {
System.out.println("姓名:"+ getName() +" "+"年龄:"+ getAge());
}
}
public class Person {
public static void main(String[] args) {
people per = new people(); //声明并实例化
per.setName("Vicki");
per.setAge(25);
per.tell();
}
}
- 匿名对象
匿名对象就是没有名字的对象,适用于程序中只是用一次的对象。好处涉及GC垃圾回收机制,可做扩展。
Student stu = new Student();
Stu.tell();
// 以上可转换为匿名对象格式:
new Student().tell(); //匿名对象
- 构造方法
格式:
访问修饰符 类名称(){
程序语句
}
注意: 构造方法名称必须与类名称一致
构造方法没有返回值
作用: 为类中的属性做初始化。每个类在实例化后都会调用构造方法,如果没有构造方法,程序在编译的时候会创建一个无参的,什么都不做的构造方法。
构造方法可以重载。
- this 关键字:
表示类中的属性和调用方法
调用本类中的构造方法
表示当前对象
public class Person {
public static void main(String[] args) {
people per = new people("Vicki", 30); //声明并实例化
per.tell();
third th = new third();
th.prt(); // 与下一行输出一致
System.out.println(th);
}
}
class third {
public void prt(){
System.out.println(this); // this表示当前对象
}
}
class people {
private String name;
private int age;
public people(String name, int age) {
this(); // 调用本类中的构造方法,必须放在第一行
this.name = name; //表示类中的属性
this.age = age;
}
public people(){
System.out.println("无参数构造方法");
}
public int getAge(){
return age;
}
public void setAge(int a){
this.age = a;
}
public String getName(){
return name;
}
public void setName(String n){
this.name = n;
}
public void tell() {
System.out.println("姓名:"+ getName() +" "+"年龄:"+ getAge());
}
}
- static关键字:
使用static声明全局属性
使用static声明方法,直接通过类名调用
使用static方法时,只能访问static访问的属性和方法,而非static声明的属性和方法是不能使用的。