3.14 面向对象基础(一)(二)(三)
new :在堆内存中生成对象,分配空间
而d1,d2只是一个引用,在栈内存中指向堆内存中的对象
匿名对象 new Dog().jump();
(四)
1.函数重载 (1.在同一个类中 2.参数列表不同 3.函数名相同)
2.构造函数 (不算做成员函数。如果没有写构造函数,编译器编译时会自动加上一个无参数且方法体为空的构造函数)(1.函数名必须和类名相同 2.没有返回值)
16.this this 是一个对象,代表调用这个函数的对象
public class Person {
String name;
void talk(String name){
//这个name 是talk(String name)中的name
System.out.println("my name is"+ name);
//这个this.name 才是这个类的成员变量String name中的name
System.out.println("my name is"+ this.name);
}
}
使用this 调用构造函数 (不能在同一个构造函数中调用两个this(参数),因为不知道哪个该在第一条语句)
Person(String name,int age){
this();//如果想使用两个this(参数)
this.name = name;
this.age = age;
System.out.println("两个参数的构造函数");
}
Person(String name,int age,String address){
this(name,age);
// this + (参数) 调用本类中的其他构造函数时,this(参数)这行代码必须在第一条语句
this.address = address;
System.out.println("三个参数的构造函数");
}
Person(){
System.out.println("无参数的构造函数");
}
主函数中
Person p1 = new Person("zhangsan",20,"北京");
结果为
无参数的构造函数
两个参数的构造函数
三个参数的构造函数
17.static
1.static成员变量 可以用类名.变量名来调用(当然可以用对象名.变量名来调用)
2.非静态
静态变量不是对象层次的变量,而是类层次的变量
2.静态函数中不能使用非静态成员变量
(this解释不通)
如果用this.name 在主函数中用类名.函数名调用时不能确定this指哪个对象
static void talk(String name){
System.out.println("my name is"+ this.name);
}
public static void main(String arg[]){
Person.talk();
}
3.静态代码块
public class Person {
static int i;
static {
System.out.println("静态代码块");
}
}
类的执行分为几个步骤:
先把类装载到内存,装载到虚拟机中,装载完之后再解释执行
装载类时就执行静态代码块
静态代码块主要作用:为静态变量赋初始值
18.java只支持单继承,不支持多继承extends 一个子类只能继承一个父类
但在c++中一个子类可以继承多个父类
extend 扩展