java基础知识4:面向对象编程——类与对象(上)

  1. 面向对象三大特征:1)封装性(private封装) 2)继承性 3)多态性
  2. 面向对象的名词扩展:
    1)OOA:面向对象分析
    2)OOD:面向对象设计
    3)OOP:面向对象编程
  3. 所谓的类就是指共性的概念,而对象指的是一个具体的、可以使用的事物。首先产生类(类是生产对象的蓝图),而后才可以产生对象。对象的所有行为,一定在类中进行了完整的定义。
  4. 类中的组成: 属性(变量,描述每个对象的具体特点)、方法(操作的行为)
    例如:定义一个Person的类
class Person {
	public String name;   //属性
	public int age;   //属性
	public Person(String name,int age) {   构造函数
		this.name = name;
		this.age = age;
	}
	public String  getPersonInfo() {    //方法     不再由主类直接调用,而需要由对象调用
		return "姓名:"+this.name+",年龄:"+this.age;
	}
}
  1. 生产(定义)对象的语法: 类名称 对象名称 = new 类名称();
    例如:生产(定义)一个Person类的实例(对象):
Person p1 = new Person();
Person p2 = new Person("Steven",25);
  1. 通过对象调用实例变量与实例方法。
Person p = new Person(“Steven",25);
System.out.println(p.name);
System.out.println(p.getPersonInfo());
  1. 栈内存(JVM局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用-即堆内存的地址,可以简单的理解为对象的名称),java栈是与线程对应起来的,每当创建一个线程,JVM就为这个线程创建一个对应的Java栈。
  2. 堆内存:保存的是真正的数据,即对象的属性信息。
  3. 只要出现了关键词new,表明在堆上分配了内存并且产生了类的对象引用这部分内存。
  4. 对象(引用数据类型)必须在实例化后调用,否则会产生NullPointerException(运行时错误),编译时不会出错。
  5. 引用传递的本质:一块堆内存可以被多个栈内存所指向。
  6. 垃圾内存:没有任何栈内存指向的堆内存空间。
    所有的垃圾空间会不定期GC(Garbage Collection 垃圾收集、垃圾回收机制),GC会影响性能,所以开发之中一定要控制好对象的产生数量(无用的对象尽量少产生)。
  7. 对象属性的初始化方式?(一般无特殊说明,属性为private修饰)
    1)提供一系列Getter和Setter方法;(快捷方式为 Alt + Insert)
    setter方法:主要用于进行属性内容的设置和修改;
    getter方法:主要用于属性内容的取得。
    2)通过构造函数(方法);
    3)静态代码块和实例代码块。
static {   //静态代码块
}
{   //实例代码块
}
  1. 对象的产生需要以下两步:
    1)为对象开辟内存;
    2)调用合适的构造函数(方法)
    Ps:构造函数可以发生重载,若类中没有给出构造函数,则提供默认的无返回值构造函数(方法)。
  2. 对象的初始化顺序:
    静态——>实例——>构造函数(方法)
  3. native修饰的方法都存储在本地方法栈上。
  4. static修饰的不属于对象,属于类,只能通过类调用,而不能通过对象调用。类中static修饰的变量、常量、方法都要用类调用,例如Person.count。
  5. 方法是静态的,只能访问静态变量,静态代码块只会被初始化一次。
  6. 类的设计原则:
    1)编写类时,类中的所有属性必须使用private封装。
    2)属性若要被外部访问,必须定义setter、getter方法。
  7. 产生对象的语法: ①类名称 ②对象名称 = ③new ④类名称();
    1)任何对象都应该有其对应的类,类是对象的蓝图;
    2)是一个唯一的标记,引用一块堆内存;
    3)表示开辟新的堆内存空间;
    4)构造方法。
  8. 所谓的构造方法是使用关键词new实例化新对象时进行调用的操作方法,定义原则为:
    1)方法名称必须与类名称相同;
    2)构造方法没有返回值类型声明;(没有void声明)
    3)每一个类中一定至少存在一个构造方法(没有明确定义,则系统会自动生成一个无参构造。
  9. 属性:是在对象开辟对内存时开辟的空间;
    构造方法:是在使用new后调用的;
    普通方法:是在空间开辟了、构造方法之后可以多次调用的。
public void Person() { }      //命名不标准的普通方法
public Person() { }    //无参构造方法

PS:构造方法的调用和对象内存分配几乎是同步完成的。

  1. 构造方法重载
public Person() {
	System.out.println("====无参构造====");
}
public Person(String name) {
	System.out.println("====有参构造====");
}
  1. 在进行类定义时顺序为:①定义属性—>②定义构造方法—>③定义普通方法
  2. 匿名对象:无任何的栈空间所指向,使用一次就成为垃圾空间。
new Person("张三",20).getPersonInfo();
  1. this关键字的主要用途:(你是怎么理解this)
    1)当前对象的调用;
    2)调用构造方法(函数);
    3)调用属性。

1)只要在类中,方法访问类中属性,一定要加上关键字。
2)this调用本类方法有以下两种情况:
①调用普通方法:this.方法名称(参数)
②调用构造方法:this(参数)
3)this调用构造方法需注意:
①this调用构造方法的语句即 this(参数),必须在构造方法首行;
②使用this调用构造方法时,请留有出口。

  1. static关键字:
    1)static类属性:保存在全局数据区的内存之中,所有对象都可以进行该数据区的访问。描述共享属性,只需要在属性前添加static关键字即可。
    2)传统属性的特征:保存在堆内存中,且每个对象独享属性。
    3)static属性(类属性)与传统属性的区别:
    ①访问static属性(类属性)应使用类名称.属性名;
    访问非static属性使用对象名称.属性名
    ②所有的非static属性(实例变量)必须在对象实例化后使用,而static属性(类属性)不受对象实例化控制。
  2. static类方法:使用static定义的方法,直接通过类名称访问。
  3. 关于static方法的两点说明:
    ①所有的static方法不允许调用非static定义的属性和方法;
    ②所有的非static方法允许访问static方法或属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值