面向对象
什么是面向对象
JAVA编程最重要的思想就是面向对象编程。
那么什么是面向对象呢?
面向对象是一种看待事物的方式,把自己当成指挥,把任务委托给其他个体去完成,这个个体就是对象。
当需要完成某件事时,首先寻找具有相应功能的对象,如果没有就去创建一个。
类的概念
一类具有相同属性和功能的实体的集合
对象的概念
在一个类中,一个具有特殊功能的实体,能够解决特定的问题,对象也被称为实例。
类与对象之间的关系
类是对象的抽象(模板),对象是类的具体体现(实例)
注意:
- 一个Java文件中可以写多个类,如果写多个类,则编译 后会生成多个.class文件
- 一个Java文件中最多只能有一个被public修饰的类,这个类的类名必须和Java源文件名保持一致
- 一个Java文件中如果只有一个类,并且这个类不用public修饰的话,类名和文件名可以不一样,但习惯上,我们都会写上public
类中成员变量的定义
成员变量:
a.成员变量其实就是全局变量
b.成员变量也被称为属性
c.分为静态变量和非静态变量
d.在静态方法中只能访问静态成员变量,在非静态方法中可以访问非静态成员变量和静态成员变量
类中方法的定义
a.分为静态方法和非静态方法
b.在同一个类中,在静态方法中只能调用静态方法,在非静态方法中可以调用非静态方法和静态方法
总结:
-
静态能访问静态的,不能直接访问非静态的,如果要访问,必须要创建对象。
-
非静态的能直接访问非静态的和静态的。
-
如果要访问另外一个类中的静态成员变量和静态方法 类名.静态成员变量 、类名.静态方法名
public class Person { //成员变量(属性) String name;//姓名 //方法 //写代码 public void writeCode() { System.out.println(name+" 写java代码"); } }
这就是一个(人)类,
有属性:姓名
和行为(方法):写代码
如果你是一个老板,想找一个写代码的,你就需要找一个符合这个类的具体的人。毕竟上面的只是一个模板,模板不能干活。
对象的创建
使用new创建出一个实例
Person(对象类型) p1(对象赋值的变量)=new Person();
p1.name="张三";//给对象属性赋值
p1.writeCode();//调用对象方法 ,让对象完成功能
对象内存分配
程序运行时,操作系统会分配三块主要的内存空间
-
栈:直接存放基本类型数据,和引用类型的地址
- 栈空间比较小,存取速度相对较快
- 先进后出
-
堆:存放引用类型的实际数据部分
- 堆空间比较大,存取速度相对较慢
-
方法区:保存类的信息(包括类的名称、方法信息、字段信息);方法区中有一块空间叫串池(常量池),用来存放字符串常量;另一块空间叫静态区用来存储静态数据。
在jdk1.7之后常量池、静态区作为堆中一部分,方法区的概念弱化。
构造方法的定义
构造方法也叫构造器,是指当实例化一个对象(创建一个对象)的时候,第一个被调用的方法。方法名和类名相同。
注意:
a.构造方法没有返回值类型,构造方法是在实例化对象的过程中自动调用的。
b.如果不写构造方法,系统会默认为我们提供一个无参的构造方法,如果添加了构造方法,系统不再提供默认的构造方法。
上面的例子就是系统默认添加的无参构造
访问权限修饰符 类名(参数列表) {
//方法体
}
public Person(){}
构造方法重载
public Person(String name){
this.name=name;//添加this关键字 指向当前类成员变量
}
前面的name是类声明的成员变量,后面的是构造方法传导的参数。
public Person(String n){
name=n;
}
效果相同
重载后在创建实例时可以直接对对象属性赋值
Person p1=new Person("张三");
this关键字
this.属性:访问本类的成员变量
this.方法:访问本类的其他方法
this():访问本类中的其他构造方法
注意:
(1) this(参数)只能用在构造方法中,必须是第一条语句
(2) this(参数)只能调用一次
public class Dog
{
String name;
int age;
int num;
String hobby;
//提高代码的可读性,可维护性
//构造方法
public Dog() {
}
public Dog(String name) {
this.name = name;
}
public Dog(int age) {
this.age = age;
}
public Dog(String name,int age) {
this.name = name;
this.age = age;
}
public Dog(String name,int age,int num,String hobby) {
this(name,age);
this.num= num;
this.hobby = hobby;
}
}