面向对象的核心概念
类(Class)和对象(Object)是面向对象的核心概念
类是对一类事物的描述,是抽象的,概念上的定义。
对象是实际存在的该类事物的每个个体,因而也称为对象。
“万事万物皆对象”。
设计类其实就是设计类的成员
类的简单及创建调用
package com.chenxi.java; /* 一、设计类,其实就是设计类的成员 属性=(等于)成员变量=(等于)field=(等于)域、字段 方法=成员方法=函数=method */ public class OOPTest { public static void main(String[] age){ Person p1 = new Person();//创建类的对象,实例化一个类 //调用对象结构;属性与方法 //调用属性 p1.name = "tom";//调用赋值 p1.isMale=true;//调用赋值 System.out.println(p1.name);//调用打印输出 //调用方法 p1.eat(); p1.sleep(); p1.talk("chinese"); } } //创建类 class Person{ //类的属性:对应类中的成员变量 String name; int age=1; boolean isMale; //类的方法: 对应类中成员方法 public void eat(){ System.out.println("人可以吃饭"); } public void sleep(){ System.out.println("人可以休息"); } public void talk(String language){ System.out.println("人可以说话"+language); } }
如果创建一个类的多个人对象,则每个对象都独立的拥有这个类的属性。
package com.chenxi.java; /* 一、设计类,其实就是设计类的成员 属性=(等于)成员变量=(等于)field=(等于)域、字段 方法=成员方法=函数=method 二、类和对象的使用(面向对象的思想) 1.创建类,设计类的成员 2.创建类的成员 3.通过"对象.属性"或者"对象.方法()"调用对象的结构 三、如果创建一个类的多个对象,则每个对象都独立拥有一套类的属性。(非static的) 意味着如果修改一个对象的属性a。则不影响另外一个对象属性a的值 */ public class OOPTest { public static void main(String[] age){ Person p1 = new Person();//创建类的对象,实例化一个类 //调用对象结构;属性与方法 //调用属性 p1.name = "tom";//调用赋值 p1.isMale=true;//调用赋值 System.out.println(p1.name);//调用打印输出 //调用方法 p1.eat(); p1.sleep(); p1.talk("chinese"); //*************************** Person p2 = new Person(); System.out.println(p2.name); //输出null;有默认初始化值 Person p3 = p1;//将p1对象保存的对象地址值复制给p3,p1与p3指向同一个地址值 System.out.println(p3.name);//输出p3的name属性值所以也是tom p3.age = 3;//修改p3属性age值其实就是修改p1属性age的值,因为地址空间相同 System.out.println(p1.age);//打印p1属性age的值所以是3 } } //创建类 class Person{ //类的属性:对应类中的成员变量 String name; int age=1; boolean isMale; //类的方法: 对应类中成员方法 public void eat(){
String food ="烙饼";//局部变量 System.out.println("人可以吃饭"); } public void sleep(){ System.out.println("人可以休息"); } public void talk(String language){//局部变量 System.out.println("人可以说话"+language); } }
测试
tom 人可以吃饭 人可以休息 人可以说话chinese null tom 3
对象创建和使用的内存解析
堆(Heap),此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
通常所说的栈(Stack),是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放
方法区(Method Area),用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
类中属性的使用
属性(成员变量) VS 局部变量
1.相同点
1.1定义变量的格式 :数据类型 变量名 = 变量值
1.2 先声明,后使用
1.3 变量都有其作用域
2.不同点
2.1 在类中声明的位置的不同
属性:直接定义在类的一对{}内
局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量
2.2 关于权限修饰符的不同
属性: 可以在声明属性时,指明其权限,使用权限修饰符
常用的权限修饰符有:private、public、缺省、protected----》封装性
局部变量不可以使用修饰符
2.3默认初始化值
属性:类的属性根据其类型都有默认初始化值
整型(byte、short、int、long):0
浮点型(float、double):0.0
字符型(char): 0(或‘u0000’)
布尔型(boolean):false
引用数据类型(类、数组、接口):null
局部变量: 没有初始化值;调用之前一定要赋值;特别的形参在调用时赋值即可
内存中加载的位置不同
属性:加载到堆空间中(非static)
局部变量:加载到栈空间