JAVA语言的基本元素:类和对象

面向对象的核心概念

类(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)
局部变量:加载到栈空间
 
 
 
原文地址:https://www.cnblogs.com/rdchenxi/p/14148188.html