类和对象要点归纳

  1. 什么是类? 什么是对象?
    类就是一个模板,对象就是这个模板产生出的实例。比如说类是一张图纸,根据这个图纸可以造出不同的房子(对象)
    Java是面向对象的语言
    在这里插入图片描述
  2. oop(面向对象)语言的三大特征:
    1.封装性:用private修饰成员属性,可以使该成员属性仅在此类中有权访问;
    2.继承性:java中可以使用继承(extends)这种操作,来提高代码重用性;
    3.多态性:基类引用派生类对象,并且基类和派生类有同名的覆盖
  3. 面向过程和面向对象的比较
    面向过程 (C):
    程注重的是过程,在整个过程中所涉及的行为,就是功能。
    面向对象(java,c++):
    注重的是对象,也就是参与过程所涉及到的主体。是通过逻辑将一个个功能实现连接起来。

举例:
面向过程: 1.把冰箱打开 2. 把大象放入 3. 冰箱关起来
面向对象: 打开冰箱,储存,关闭都是对冰箱的操作,是冰箱的行为。冰箱就是一个对象,所以只要操作冰箱所具备的功能,都要定义在冰箱中。

  1. java(面向对象)编程开发思路

    1.找对象,
    2.创建对象
    3.使用以及扩展对象

  2. 成员方法的调用要通过实例化对象的引用来调用。
    一个类可以实例化多个对象
    当属性值未初始化时,值为对应类型的0值(如布尔为flase)

class Person {
//属性 
    public String name; 实例变量
    public int age;
    boolean flg;
    public  static int count;
    public final  int SIZE =  666;//实例变量
    public static final  int SIZE2 =  666;
    
    //功能
    public  void fun() {
        count++;
    }

    public static void fun2() {
        System.out.println("count:"+count);
        //System.out.println("name:"+name);
        //eat();
    }
    public  void  eat() {
        System.out.println(name+" "+age+"吃饭!");
    }
    public void sleep() {
        System.out.println("睡觉!");
    }
}

然后在主函数中实例化对象并进行相应操作

public class Main{    
public static void main(String[] args) {        
Person person = new Person();//通过new实例化对象        
person.eat();//成员方法调用需要通过对象的引用调用        
person.sleep();       
 //产生对象     
 实例化对象        
 Person person2 = new Person();        
 Person person3 = new Person(); 
    }
 }
  1. 静态成员(static修饰)不属于对象,不依赖与对象,无法通过对象的引用来调用,但可以通过类名来调用,类中static修饰的函数(静态成员方法)无法访问成员实例变量,因为它不属于对象。
class TestDemo{     
public int a;     
public static int count;         
 public static void change() {        
  count = 100;       
    //a = 10; error  不可以访问非静态数据成员 
      }
  } 

public class Main{      
public static void main(String[] args) {       
TestDemo.change();//无需创建实例对象 就可以调用         
System.out.println(TestDemo.count);   
       } 
 }
  1. 为什么main函数是(static)静态的?
    如果没有static,main函数就是一个普通的成员方法,想要运行就必须new一个对象对main函数进行引用,这样主函数就没有入口无法运行。

  2. 封装 将成员属性定义为私有(private),只能通过类内部进行直接访问

class Person { 
 private String name = "张三";    
 private int age = 18;         
 public void show() {         
   System.out.println("我叫" + name + ", 今年" + age + "岁");   
    }
 } 
 
class Test {    
 public static void main(String[] args) {        
 Person person = new Person();       
 person.show();  
    } 
    } 
 
// 执行结果 我叫张三, 今年18岁

除此之外,还可以在类内通过getter和setter函数间接访问和初始化属性值

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;
}
  1. 实例化一个对象步骤:
    1.为对象分配内存(new)
    2.调用合适的构造函数(如果没写,会自己生成不带参数的一个构造函数)

在这里插入图片描述
构造方法:是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作.
1.方法名称必须与类名称相同
2.构造方法没有返回值类型声明
3.每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
构造函数可以重载(改变函数参数的个数及其类型)

  1. this 代表当前对象的引用(并不是指当前对象)(地址)因为
    实例化一个对象分为两步:
    1.为对象分配内存(new)
    2.调用合适的构造函数(如果没写,会自己生成不带参数的一个构造函数)
    编程中要习惯使用this
    (当一个构造函数内用this调用另一个构造函数时,那一句只能放在第一句)

  2. 实例代码块一般用于初始化实例成员变量。
    静态代码块一般用于初始化静态成员属性
    实例代码块先于构造函数执行,静态代码块(只会执行一次)优先于实例代码块执行
    静态>–实例>–构造函数

  3. 匿名对象
    匿名只是表示没有名字的对象. 没有引用的对象称为匿名对象. 匿名对象只能在创建对象时使用. 如果一个对象只是用一次, 后面不需要用了, 可以考虑使用匿名对象.

class Person {   
   private String name;   
   private int age;     
   public Person(String name,int age) {      
   this.age = age;       
   this.name = name;   
     }    
     
      public void show() {        
       System.out.println("name:"+name+" " + "age:"+age);  
          }
          
      } 
      
public class Main { 
public static void main(String[] args) {   
 new Person("张三",18).show();//通过匿名对象调用方法   
   } 
} 
// 执行结果 name:张三:18
<think>嗯,用户想了解Java中的对象,我得先理清楚这两个概念的关系区别。首先,我应该从基础的定义开始,比如是什么,对象又是什么。然后,可能需要举一些例子来帮助理解。 记得用户提到尽量结构清晰,逐步解决问题,所以分步骤解释比较好。比如先讲,再讲对象,接着两者的关系,最后通过实例说明。同时要确保使用正确的中文术语,避免翻译上的错误。 用户可能刚开始学Java,所以例子要简单明了。比如用“狗”作为,具体的狗品种作为对象。这样贴近生活,容易理解。另外,要提到对象在内存中的表现,比如在方法区,对象在堆内存,这样能加深理解。 还要注意覆盖一些常见问题,比如为什么需要对象,它们的好处是什么,比如代码复用、封装等面向对象的特性。这部分可能需要稍微展开,但不要过于深入,保持基础层面的解释。 检查有没有遵循系统级指令,比如数学公式是否正确使用,这里可能涉及较少,但如果有示例代码,需要用代码块标注。不过用户的问题是关于概念理解,所以重点在文字解释。 最后,确保回答结构清晰,分点明确,每个部分都有小标题,帮助用户逐步建立认识。可能需要总结一下对象的关系,强调是模板,对象是实例,这样用户能有个明确的结论。</think>一、基础概念分步解析 (一) 的本质 1. (Class)是面向对象编程的核心模板 - 作用:定义对象属性(成员变量)行为(方法) - 示例模板: ```java public class Dog { // 名首字母大写 // 成员变量(属性) String breed; int age; // 方法(行为) void bark() { System.out.println("汪汪!"); } } ``` 2. 内存中的存在形式 - 信息存储在方法区(Method Area) - 每个在JVM中只有一份元数据 (二) 对象的本质 1. 对象(Object)是的具体实例 - 通过`new`关键字创建 - 示例: ```java Dog myDog = new Dog(); // 创建具体实例 myDog.breed = "金毛"; // 设置属性值 myDog.age = 3; ``` 2. 内存分布特征 - 对象实例存储在堆内存(Heap) - 每个对象拥有独立的内存空间 二、核心关系解析 $$ \text{} \xrightarrow{实例化} \text{对象} \xrightarrow{抽象} \text{} $$ (双向推导关系:通过实例化生成对象对象通过抽象归纳) 三、关键差异对比表 | 特征 | | 对象 | |---------------|-----------------------------|-------------------------------| | 存在形式 | 代码中的模板定义 | 内存中的具体实例 | | 创建方式 | 通过`class`关键字定义 | 通过`new`关键字实例化 | | 内存分配 | 方法区(元信息) | 堆内存(实例数据) | | 生命周期 | 程序运行期间持续存在 | 根据引用可达性被GC回收 | | 成员访问 | 静态成员可直接访问 | 必须通过实例访问普通成员 | 四、实际应用示例 ```java // 定义 public class BankAccount { // 成员变量 private String owner; private double balance; // 构造方法 public BankAccount(String owner, double initialBalance) { this.owner = owner; this.balance = initialBalance; } // 成员方法 public void deposit(double amount) { balance += amount; } } // 对象使用 public class Main { public static void main(String[] args) { // 创建两个独立对象 BankAccount acc1 = new BankAccount("张三", 1000); BankAccount acc2 = new BankAccount("李四", 2000); acc1.deposit(500); // 仅影响acc1的余额 System.out.println(acc1.balance); // 输出1500.0 System.out.println(acc2.balance); // 仍保持2000.0 } } ``` 五、理解要点总结 1. 设计模式层面 - 相当于产品设计图纸 - 对象是按照图纸生产的具体产品 2. 编程实践原则 - 单一职责原则:每个应聚焦单一功能 - 高内聚低耦合:内部高度整合,之间减少依赖 3. 内存管理视角 - 加载:首次使用时由加载器加载到方法区 - 对象回收:失去所有引用后由垃圾回收器自动回收 建议通过以下练习巩固理解: 1. 设计`Car`,包含品牌、颜色、速度等属性 2. 添加加速/减速方法 3. 创建不同实例测试方法调用 4. 观察不同实例的属性独立性
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值