java 基础知识九 类与对象
1、OO(Object–Oriented )面向对象,
OO方法(Object-Oriented Method,面向对象方法,面向对象的方法)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法
Object Oriented是建立在“对象”概念基础上的方法学
OOP:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。
OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成
OOP 的五个核心:类 对象 继承,多态和封装
类:对现实世界事物的抽象表示,包括事物的状态信息(成员变量)和行为信息(成员方法)
对象:对抽象事物的具体表示,使其具有自身的特点
封装:信息封装,
多态:类实例化成对象之后的不同体现
继承:类与类之间的关联
OOP 的五个核心:类 对象 继承,多态和封装之间的关系,类和对象是两个实体,继承,多态和封装是他们之间的互相转换关系
2、类
类实际上是定义一个模板,而对象是由这个模板产生的一个实例
注意事项:一个java中可以声明多个类 但只能有一个pubulic修饰的类
类定义
修饰符class类名{
修饰符类型实例变量名;
类型实例变量名; ......
修饰符类型方法名(参数类型参数
1,参数类型参数 2...){ //方法体
}
......
}
其中:
修饰符有四种
private:只有本类可见。
protected:本类、子类、同一包的类可见。
默认(无修饰符):本类、同一包的类可见。
public:对任何类可见
变量与方法
成员变量:修饰符 类型 实例变量名,也即是属性,可见区域根据修饰符变化,分静态和非静态
局部变量:方法中定义的变量,有效范围在方法体内
创建对象的入口:类的构造方法
构造方法与类同名,没有返回值,可以有多个参数,但必须有一个是无参数
类的入口:类的主方法 main,程序流程入口,静态无返回值,参数为数组
public static void main(String[] args) {}
成员方法:修饰符 类型 方法名(参数类型 参数 1,参数类型 参数 2...){
//方法体} 分静态和非静态
区别和对比详见下图
3、对象
对抽象事物的具体表示,即类的实例,现实展现。
对象的创建
类 对象引用=new 类();
先创建一个对象引用,再创建一个对象,并将对象初始化,最后通过= 将对象引用指向对象
类:就是上面具体事物的抽象形式
对象引用:可理解为对象别名,通过对象引用找到对象,可以指向一个或者0个对象,其实是寻址信息,类似C的指针,C++的地址
new 类():创建一个对象并采用构造函数初始化,在堆内存中分配空间,new是创建对象的标识符,对象可以被多个对象引用指引。
();通过类的构造函数初始化对象,可以有参数
对象的比较 ==和equal
== 比较对象的引用 equal 比较对象的内容
对象的销毁
将对象引用赋值为null,对象在堆空间中会被jvm通过垃圾回收机制回收
4、堆和栈
堆栈:Java把内存分成两种,一种叫做栈内存,一种叫做堆内存
栈内存
存储一些基本类型的变量和对象的引用变量
当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间。
引用变量就相当于是为数组或对象起的一个名称,通过栈中的引用变量来访问堆中的数组或对象
堆内存
存用来存放由new创建的对象和数组。
在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。
附:例子
public class User { // 静态变量 public static String nationality = "china"; // 非静态变量 public String name; private int age; public User(){} // 带参数构造函数 public User(String name){ // this 的使用 this.name=name; } // 静态方法 public static String getNationality() { return nationality; } public static void setNationality(String nationality) { User.nationality = nationality; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
主类
public class UserTest { /** * @param args */ public static void main(String[] args) { System.out.println(User.nationality);// 静态变量调用 System.out.println(User.getNationality());// 静态方法调用 User user=new User("张三");// 创建对象 创建对象引用 并赋值 System.out.println(user.nationality);// 静态变量调用 不建议 System.out.println(user.name);// 非静态变量调用 System.out.println(user.getName());// 非静态变量调用 // getAge();// 非法 main方法为静态 必须调用静态方法 getStaticAge();// 合法 必须调用静态方法 User user1=new User("lisi"); User user2=new User("lisi"); User user3=user1; if(user1==user3){// 用来比较引用指向是否相等 System.out.println("对象引用相等"); } if(user1.equals(user2)){// 用来比较引用指向的内容是否相等 System.out.println("对象内容相等"); } } // // 普通方法 // public void getAge(){ // System.out.println("三岁");// // } // 静态方法 public static void getStaticAge(){ int age=3;// 局部变量 使用范围是方法内 System.out.println(age+"岁");// } }