类和对象
面向对象的思想概述
类及类的成员
对象的创建和使用
匿名对象
内存解析
属性
变量和属性其实是一回事。
成员变量和局部变量
默认初始化值
局部变量没有默认初始化值。意味着,我们在调用局部变量之前一定要显示赋值。
内存解析
- 属性:加载到堆空间中(非static)
- 局部变量:加载到栈空间中。
属性赋值过程
方法
重载(overload)
“两同一不同”:同一个类、方法名相同;参数(列表、个数、类型)不同。 跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!
可变形参
@Test
public void test5() {
show("123", "456", "789");
}
public void show(String... strs) {
for (String str : strs) {
System.out.println(str);
}
}
方法参数的值传递机制
🌟重写(override/overwrite)
重载与重写的区别:
构造器
public class Animal {
private int legs;
// 构造器
public Animal() {
legs = 4;
}
public void setLegs(int i) {
legs = i;
}
public int getLegs() {
return legs;
}
}
构造器重载
代码块
static{
System.out.println("hello,static block-2");
}
static{
System.out.println("hello,static block-1");
//调用静态结构
desc = "我是一个爱学习的人";
info();
//不可以调用非静态结构
// eat();
// name = "Tom";
}
{
System.out.println("hello, block - 2");
}
{
System.out.println("hello, block - 1");
//调用非静态结构
age = 1;
eat();
//调用静态结构
desc = "我是一个爱学习的人1";
info();
}
- 总结:由父及子,静态先行。
对属性可以赋值的位置: ①默认初始化
②显式初始化/⑤在代码块中赋值
③构造器中初始化
④有了对象以后,可以通过”对象.属性”或”对象.方法”的方式,进行赋值
执行的先后顺序:① - ② / ⑤ - ③ - ④
内部类
成员内部类
局部内部类
public class InnerClassTest {
public static void main(String[] args) {
//创建Dog实例(静态的成员内部类):
Person.Dog dog = new Person.Dog();
dog.show();
//创建Bird实例(非静态的成员内部类):
// Person.Bird bird = new Person.Bird();//错误的
Person p = new Person();
Person.Bird bird = p.new Bird();
bird.sing();
System.out.println();
bird.display("黄鹂");
}
}
class Person {
String name = "小明";
int age;
public void eat() {
System.out.println("人:吃饭");
}
//静态成员内部类
static class Dog {
String name;
int age;
public void show() {
System.out.println("卡拉是条狗");
// eat();
}
}
//非静态成员内部类
class Bird {
String name = "杜鹃";
public Bird() {
}
public void sing() {
System.out.println("我是一只小小鸟");
Person.this.eat();//调用外部类的非静态属性
eat();
System.out.println(age);
}
public void display(String name) {
System.out.println(name);//方法的形参
System.out.println(this.name);//内部类的属性
System.out.println(Person.this.name);//外部类的属性
}
}
public void method() {
//局部内部类
class AA {
}
}
{
//局部内部类
class BB {
}
}
public Person() {
//局部内部类
class CC {
}
}
}