java 面向对象

这篇博客详细介绍了Java中的面向对象概念,包括对象的定义、存储方式(静态内存分配和动态内存管理)、对象引用、对象数组、成员变量和局部变量。此外,还讲解了类的定义、构造函数的作用以及实例化过程。文章强调了Java中类名与文件名一致性的规则以及变量的递归定义可能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类和对象

对象

定义

​ 类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等

class Pet{
   String name;
   void showMe(){
       System.out.println("Hi,I'm"+name+"!");
   }
}
public calss app{
    public static void main(String[] args){
        Pet a = new Pet;//创建对象
        System.out.println("A pet object is created.");
        a.name = "Snoppy";//设置对象的属性
        a.showMe();//只能用引用名来操控对象,不能通过属性值。Snoppy.showMe()错误 => 因为a是Pet类型,其中有showMe方法,而Snoppy是字符串类型,所有错误。但Snoppy.length()正确。
    }
}
对象引用的存储方式
静态内存分配

​ 1.(基于的内存管理模式,内存空间自动分配和回收)假定函数孔家你分配在起始地址为0;空间大小为S的内存块上。当函数执行是,把该空间映射到具体的内存空间,执行结束后,把该函数登记的标记删除。
在这里插入图片描述

​ 2.接受栈内存管理的数据:在函数定义的所有变量(基本型或引用型)

在这里插入图片描述

动态内存管理

​ 1.(基于堆内存管理模式)各子程序共享的内存空间

​ 2.接受堆式内存管理的数据:所有对象空间

在这里插入图片描述

对象的引用

​ 1.格式为:对象.成员,如a.length、“abc”.length()

​ 2.常量引用final:引用不可更改

在这里插入图片描述

对象数组

String[] sa=new String[10] 不是new了一个class对象(而是数组对象),因此未调用String的构造函数。sa[0]是String引用,不是String对象。

成员变量和局部变量

​ 成员变量:类中定义的变量,在该类/对象中属于全局变量;所有的成员变量都会被初始(0,false,null),成员常量只能在定义时或是构造函数中赋值。

在这里插入图片描述

​ 局部变量:方法中定义的变量,局限于该方法。

在这里插入图片描述

​ 一个模板,它描述一类对象的行为和状态 ,=数据+操作(类名一般首字母大写)

public class Dog{
  String breed;
  int age;
  String color;
  void barking(){ }
  void hungry(){  }
  void sleeping(){  }
}//barking()、hungry() 和 sleeping() 都是 Dog 类的方法
  • 注意:

    1.若文件中public类,类名必须同文件名相同。

    2.空类:如class Species{}

    3.Java中是根据类的名字作区分,而非内容。

    class T1{int x;}
    class T2{int x;}
    T1 a;T2 b;
    a = b;//编译错 a、b是不同的类型
    

    4.变量可以递归定义(单链表)。

    class LinkNode{
        Pet String;
        LinkNode next;
    }
    

构造函数

构造函数的特点:

​ 1、与类名相同;

​ 2、不能用return返回一个值,也不能有任何返回类型(包含void)换言之,无返回类型,实际上,就是默认只能返回该类名代表的类型
​ 3、构造函数的作用:对属性进行初始化

class Car(){
    String owner,brand,color;
    Car(String o, String b, String c){ owner=o; brand=b; color=c; }
    
    public String toString(){//注意:必须有public、返回必须是String型、必须无参
     	 return "车主:"+owner+" 品牌:"+brand+" 颜色:"+color;
     	 //return " 品牌:"+brand+" 颜色:"+color;
     	 //此函数的功能:会被System.out.print()在【打印对象时】自动调用;
     }
}

class App{
    {
       Car c=new Car("张三","奇瑞","黑色");
       Car c1=new Car(); //此句编译错,即有若类中定义构造函数,系统将不再补充任何构造函数
       System.out.print(c);
     }
}

实例

/* 实例化对象 */
Object referenceVariable = new Constructor();
/* 访问类中的变量 */
referenceVariable.variableName;
/* 访问类中的方法 */
referenceVariable.methodName();
//public类名必须和文件名相同
public class Puppy{
   int puppyAge;
   public Puppy(String name){
      // 这个构造器仅有一个参数:name
      System.out.println("小狗的名字是 : " + name ); 
   }
 
   public void setAge( int age ){
       puppyAge = age;
   }
 
   public int getAge( ){
       System.out.println("小狗的年龄为 : " + puppyAge ); 
       return puppyAge;
   }
 
   public static void main(String[] args){
      /* 创建对象 */
      Puppy myPuppy = new Puppy( "tommy" );
      /* 通过方法来设定age */
      myPuppy.setAge( 2 );
      /* 调用另一个方法获取age */
      myPuppy.getAge( );
      /*也可以像下面这样访问成员变量 */
      System.out.println("变量值 : " + myPuppy.puppyAge ); 
   }
}
//小狗的名字是 : tommy 小狗的年龄为 : 2  变量值 : 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值