文章目录
(一)面向对象三大特征:
1.封装性:
把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。通过 访问控制修饰符 实现。
2.继承性:
子类通过 extends 关键字 在不用重新编写代码的情况下,继承父类的所有功能,并进行选择性功能扩展。
3.多态性
:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。
( 二)类与对象
类是对对象的抽象。首先产生类,而后才可以产生对象。对象的所有行为,一定在类中进行了完整的定义。
1.类的组成:
1)属性;(一般属性设为private)
2)方法(方法设为public)
2.实例化对象:
1)通过类的构造方法来实例化
2)格式: 类名称 对象名称 = new 类名称();
3. 堆和栈
1)栈内存:存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用-即
堆内存的地址,可以简单的理解为对象的名称)
注:基本数据类型 存放在栈空间,给变量名赋值操作会改变变量值;
2)堆内存:保存的是真正的数据,即对象的属性信息。只要出现了关键词new,即在堆空间分配新内存来存放数据。
3)垃圾内存:所有的垃圾空间会不定期GC,GC会影响性能,所以开发之中一定要控制好对象的产生数
例:
//在堆空间分配了两块内存,分别存放p1和p2的内容
Person p1 = new Person();
Person p2 = new Person();
//将p1的内容赋值给p2,使P2指向的内存成为垃圾内存
p2 = p1;
4.封装和构造方法
1)封装:使用 private 封装属性后,只允许本类访问。要在类外对方法进行访问,需要提供getter,setter方法。
①getter方法:主要用于属性内容的取得
②setter方法:主要用于进行属性内容的设置与修改
例:
class Person {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name =name;
}
}
2)构造方法:使用关键字 new 实例化新对象时调用的操作方法。
①定义构造方法应遵循原则:
a.方法名称必须与类名称相同
b.构造方法没有返回值类型声明
问:构造方法无返回值,为什么没有void声明?
答:一个类的构造函数的返回值的类型就是这个类本身。一个类由 属性,构造方法,普通方法组成。构造方法没有返回值是为了将它和普通方法区分。 如果给构造方法加void,则 编译通过(系统认为它是普通方法), 运行不通过。
public class TestConstructor {
public static void main(String[] args) {
Constructor constructor = new Constructor();
}
}
class Constructor {
public void Constructor() {
System.out.println("Constructor的构造方法");
}
}
c.每个类都有构造方法,如果不自定义,系统自动生成一个无参构造方法
②构造方法重载
public class TestConstructor {
public static void main(String[] args) {
Constructor constructor1 = new Constructor();
Constructor constructor2 = new Constructor("张三");
}
}
class Constructor {
private String name;
public Constructor() {
System.out.println("Constructor的无参构造方法");
}
public Constructor(String name) {
System.out.println("Constructor的有参构造方法");
}
}
(三)this关键字
1.用途:
1)调用本类(属性,方法)
①调用本类属性:this.属性名
当参数与类中属性同名时,类中属性无法被正确赋值。此时我们加上this关键字便可以正确给对象属性赋值
例:setName方法中,如果去掉this,则不能给属性name正确赋值。
private String name;
public void setName(String name) {
this.name =name;
}
②调用本类方法:
a.调用普通方法:this.方法名称(参数)
b.调用构造方法:this(参数) 注:this调用构造方法的语句必须在构造方法首行
注:构造方法之间可以互相调用
2)表示当前对象
class Person{
public void print(){
System.out.println("[PRINT]方法:"+this);
}
}
public class TestThis{
public static void main(String[] args) {
Person p1 = new Person();
//输出:Person@15db9742
System.out.println("[MAIN] 方 法 :"+p1);
//输出:Person@15db9742
p1.print();
System.out.println("=================");
Person p2 = new Person();
System.out.println("[MAIN] 方 法 :"+p2);
p2.print();
}
}
(四)static关键字(重要)
1.修饰属性:
静态属性(类属性)
访问方式:类名.属性名 / this.属性名
注:所有的非static属性(实例变量)必须在对象实例化后使用,而static属性(类属性)不受对象实例化控制;此时,我们修改类属性,所有对象都同步此属性值:
2.修饰方法:
静态方法(类方法)
访问方式:类名.方法名
3.注意事项:
①静态属性,静态方法 如果在同一个类中,可以省去类名
②所有的static方法不允许调用非static定义的属性或方法(会出现编译出错);所有的非static方法允许访问static方法或属性