类和对象---知识点+案例

本文详细介绍了Java中的类和对象,包括包的作用、定义、导入,类的设计与对象的创建,以及对象在内存中的运行机制和垃圾回收。通过案例深入理解类与对象的关系,探讨了成员变量的初始化、访问权限以及对象的内存分配。

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

目录

一、包

1.包的作用:

 2.简单类名和全类名

2.包的定义

3.包的导入

4.类和对象的定义

5.如何设计类

5.4类和对象的使用

5.5总结:

二、案例:

 三、对象在内存中的运行机制:

1.多个对象的内存图

2.两个变量指向同一个对象内存图

3.垃圾回收

 四、案例


一、包

1.包的作用:

(1)区分同名的类。

包最重要的作用:区分同名的类,例如:

JDK自带一个Book类;将来我们做书城项目也会创建Book类

如果没有包名,两个Book类就无法区分了。

(2)将不同的类放在不同包下。

 

 2.简单类名和全类名

简单类名:不带包名的类名

全类名:包名.类名

2.包的定义

包其实就是目录

特别是项目比较大,java 文件特别多的情况下,我们应该分目录管理,在java 中称为分包管理,包名称通常采用小写。

//定义的全格式:公司域名倒叙.项目名.模块名;
//baidu公司开发oa项目,system是oa项目中其中一个模块!
package com.bjpowernode.oa.system;

com.baidu.oa.system;;

public class User{
       public static void main(String[] args){
              System.out.println("User's main method execute!");
       }
}

软件包机制:

①为了解决类的命名冲突问题,在类名前加命名空间(包机制)。

②在java中使用package语句定义包.(单包,复包)。

③package语句只能出现在.java源文件的第一行。

3.包的导入

package com;

//import语句可以引入其他类.

//import语句只能出现在package语句之下,class定义的语句之上。

import com.baidu.oa.system;

//java.lang;软件包下所有类不需要手动导入。系统自动导入.

import java.util.Date;

JDK中主要的包介绍

(1)java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能。

(2)java.net----包含执行与网络相关的操作的类和接口。

(3)java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。

(4)java.text----包含了一些java格式化相关的类

(5)java.sql----包含了java进行JDBC数据库编程的相关类/接口

4.类和对象的定义

(设计图) :是对象共同特征的描述;

对象:是真实存在的具体实例。(万物皆对象)   

结论:在Java中,必须先设计类,才能创建对象并使用

4.1类和对象的关系

程序中的『类』,对应到生活中就是对同一类事物的一个统一的『分类名称』

从抽象和具体的角度来说:

类:抽象描述

对象:具体实体,所以对象也被称作:『类的实例』

5.如何设计类

5.1类的组成部分:

(1)属性(对应程序中的数据)

通过程序中的各种数据类型,来描述一个类的特征

例如:汽车的颜色、汽车的排量、汽车的价格……

(2)行为(对应程序中的操作)

通过程序中的方法(也就是面向过程视角中的函数),来执行这个类的对象能够做的

例如:汽车的行驶、汽车的鸣笛、汽车的启动、汽车的停泊……

 5.2类的声明

 

 5.3类中的属性

①声明属性的语法格式

修饰符 数据类型 属性名;

修饰符 数据类型 属性名 = 初始化值

②初始化值

声明一个属性时,如果没有明确的对这个属性进行初始化值的设置,那么系统会给这个属性设置默认值。所以如果有确定的需要可以设置属性的默认值,如果没有特殊需要,不设置也行。

③权限修饰符

 

 5.3.1修饰符

修饰符指的是函数的访问权限

所谓访问权限,指的就是本类中的成员变量、成员方法对其他类的可见性

Java中有四种访问权限,分别是「public、protected、default(默认)、private」,如果省略了访问修饰符,那默认访问权限为「包访问权限」。 这四种权限从「最大权限」到「最小权限」分别是:

public > protected > default> private。

default没有任何修饰符的权限就是「包访问权限」,意味着当前包的所有类都可以访问这个成员

public被public修饰的成员对任意一个类都是可用的,任何一个类都可以访问到,通过操作该类的对象随意访问public成员

protected:在相同的class内部,同一个包内和其他包的子类中能被访问。要理解protected权限,就需要了解「继承」,因为这个权限处理的就是继承相关的概念,继承而来的子类可以访问「public、protected」,

private: 除了包含这个成员的类之外,所有类都无法访问这个成员,相当于自我封闭,防止其他类改变或删除这个方法。

PS:对class的权限修饰符只有public和缺省(默认)两种

public:表示这个类可以在工程中任意位置访问(开发中实际使用的方式

default:表示这个类只能在同一个包内访问(实际开发不会使用这种方式

public class Car {
        
 // 属性 (成员变量)

String name;
double price;
 // 行为(方法)
public void start(){
}
public void run(){
}

}

 5.3.2 如何得到类的对象:

对象 = new 类名();

Car c = new Car();

5.3.3如何使用对象:

访问属性: 对象名 . 成员变量
访问行为 对象名.方法名(…)

5.4类和对象的使用

 声明类

public class Car {
    // 成员变量(属性)  
  String name;
  double price;   
// 方法(行为)
    public void start()
{
        System.out.println(name+“启动了!”);
    }
    public void run(){
        System.out.println(“价格是:" + price +"的" + name+"跑的快!");
    }
}

测试类

public class Test {
    public static void main(String[] args) {
        Car c1 = new Car();
        c1.name = "奔驰";
        c1.price = 39.78;
        System.out.println(c1.name);
        System.out.println(c1.price);
        c1.start();
        c1.run();
        Car c2 = new Car();
        c2.name = "宝马";
        c2.price = 38.98;
        System.out.println(c2.name);
        System.out.println(c2.price);
        c2.start();
        c2.run();
    }
}

5.5总结:

定义类的补充注意事项:

类名首字母建议大写,且有意义,满足“驼峰模式”。

一个Java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。

成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。

 

1. 定义类有哪些建议,有什么需要注意的?

类名首字母建议大写、英文、有意义,满足驼峰模式,不能用关键字,满足标志符规定

一个代码文件中可以定义多个类,但是只能一个类是public修饰的,public修饰的类名必须是Java代码的文件名称。

2. 成员变量的格式是什么样的,有什么特点?

成员变量的完整格式是:修饰符 数据类型 变量名称 = 初始化值

一般无需为成员变量指定初始化值,存在默认值。

二、案例:

 

package Classstudent.Student;

public class Student1 {
    String name;
    int age;
    String hobby;
    public  void Classroom(){
        System.out.println(age+"岁的"+name+"同学到教室了");
    }
    public void Lateroom(){
        System.out.println(age+"岁的"+name+"同学放学了");

    }
}
package Classstudent.Student;

public class Student1test {
    public static void main(String[] args) {
        Student1 sd=new Student1();
        sd.name="小明";
        sd.age=22;
        sd.hobby="乒乓球、篮球";
        System.out.println("学生姓名:"+sd.name);
        System.out.println("年龄是:"+sd.age);
        System.out.println("爱好是:"+sd.hobby);
        sd.Classroom();
        sd.Lateroom();
        System.out.println("-----------");
        Student1 sd1=sd;
        sd.name="王五";
        sd.age=23;
        System.out.println("学生姓名:"+sd.name);
        System.out.println("年龄是:"+sd.age);
        System.out.println("爱好是:"+sd.hobby);
        sd.Classroom();
        sd.Lateroom();
    }
}

 三、对象在内存中的运行机制:

1.多个对象的内存图

 

 总结:

1. 对象到底是放在哪个位置的?

堆内存中

2. Car c = new Car();  c变量名中存储的是什么?

存储的是对象在堆内存中的地址。

3. 成员变量(nameprice)的数据放在哪里,存在于哪个位置?

对象中,存在于堆内存中。

2.两个变量指向同一个对象内存图

3.垃圾回收

 注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。

补充知识:成员变量、局部变量区别

 

 

 

 四、案例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KK在编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值