java类和对象的基础特性-1

简介: java类和对象的基础特性

       前言:

       在java语言中经常被提到的两个词是类和对象。它是面向对象的基本。实际上,类可以看做是对象的载体,也就是说类是对象所具有的属性,也可以说类是定义对象的基本规范。

       1、面向对象概述


由来:早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2 = 4,通过设计一个算法就可以解决当时的问题。但是随着软件规模越来越庞大,处理过程越来越复杂,这种面向过程的结构化语言的弊端也就逐渐暴露出来,开发周期也越来越长,产品质量不尽人意。这时人们开始引入另一种开发思想--面向对象。

          一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象是类的具体化实现。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。


       2、类和对象

       1、对象

       现实世界中,任意一个物品都可以看做是一个对象。例如,我们写代码常用的电脑,我们日常联系使用的手机,都是一个对象。对象是事物存在的实体,因为是实体,那么它一定会具有一些物理或者化学属性,就拿 一个人来举例,一个人所具有的可能的属性有:五官,身高,体重,血型等等。只有这些属性并不能成为一个完整的人,因为还具有许多行为属性,例如唱、跳、rap、打篮球等等,根据对象的实体化,我们将其属性划分为静态部分和动态部分。


举例:


注意看这个篮球巨星,仔细分析可以知道


静态属性有 》   角色偶像练习生
                         发型中分
                         穿着背带裤

                               .........

动态属性有  》  胯下运球铁山靠 ........ 等一些专业动作指导。

       而在计算机世界中,我们可以根据对象在现实世界中所具有的属性将其抽象出来,在识别这个对象的属性后,这个对象就被定义完成了,然后可以根据这个对象的属性来制定具体的解决问题的方案,这就是对象。

       2、类

       在我们现实生活中有很多事物,就比如手机,有很多品牌,比如华为,小米,等等。虽然是不同品牌,但是他们都离不开手机这一类事物,他们都具有像处理器,屏幕,内存,摄像头等静态属性,也具有打游戏,拍照,聊天等动态属性。所以我们就将这具有相同特征的一类事物称为



在java语言中,类中对象的动态属性是以方法的形式定义的,对象的静态属性是以成员变量的形式定义的,所以类包括对象的静态和动态属性。

       3、类的定义格式

// 创建类
//class ClassName{ 
//    field;     字段(属性) 或者 成员变量
//    method;     行为 或者 成员方法 
//}
 
// 例如定义手机类
class Phone{
    String SizeOfPhone;
    String CpuModel;
    int DateOfManufacture;
    //.......等等静态部分
    public void function_TakeAPicture(){
        System.out.println("正在拍照");
    }
    // ......等等动态部分
}


       根据上面的代码,使用者可以用class来定义一个手机对象(这里为了和对象名进行区分,推荐使用大驼峰的形式来书写类名),Phone为类名,同时在Phone这个类中定义了他的属性,我们可以看到,静态属性是用变量来进行定义的,动态属性是以方法来定义的:


       1、成员变量(静态部分)

       例如,手机尺寸,我们用字符串来定义:String SizeOfPhone;   SizeOfPhone 为变量名,也可以是java中其他合法数据类型:

例如: Boolean类型  等等。我们可以为其设置初始值,String SizeOfPhone  = "长 x 宽 x 高 " ;

但也可以不初始化,不初始化就会自动初始化为默认值,Boolean类型的默认值为 false,int  float等默认值为其对应的0值,int为0,float为0.0等,String类型默认为 null,等。


       2、成员方法(动态部分)

       在java语言中,使用成员方法对应于类的对象的行为,就像上述手机这个类中的华为手机拍照这个行为一样,其定义成员方法的格式如下:

权限修饰符  返回值类型   方法名 ( 参数列表) {

       .........   //方法体

      return  返回值 ;  // 无返回值则返回类型为  void

}


       一个成员方法,可以有参数,这个参数可以是一个对象,也可以的是其他合法的变量,返回值可有可无,如果需要返回值,则在需要的地方使用return 关键字,使用到这个关键字的时候,方法的执行将被终止。


       注:如果一个类的方法中如果有与成员变量 同名的局部变量,则方法的执行以局部变量来进行


       3、实例化

       了解什么是类,什么是对象后,就该了解一下什么是实例化。


我们使用上面的方法创建一个类之后,就有了我们所定义的类的属性,然后使用这个类去创建一个对象,这个过程就称为实例化,例如,我们定义了一个手机类,那么我们就可以使用这个手机类创建一个名为华为手机的具体对象。


       在java中 采用 new 关键字来实例化生成对象。

我们这里拿一个狗类来举例      :

f2a5821a6a381a4e231ea49f795c2548_9e617eae47044afab481594f6126b93f.png

 new关键字的使用部分: PetDog  dog1  =   new  PetDog();

                                         PetDog  dog2  =   new  PetDog();

     这里就实例化了两个PetDog的对象:dog1和dog2 。(可以通过英文字符中的点好' . '来访问对象的中的成员)

                               

       3、权限修饰符

       在初学java的时候,不免会看到public,private等修饰符,那么这些关键字都有些什么作用呢,经过学习我们可以了解到,这些都是java中的权限修饰符,主要包括private, public, protected,这些修饰符控制对类和类的成员的访问。


       1、private

如果一个类的成员被private修饰,则该成员只能在其所在的类中访问:

class Dog{
    private String name;
    int age;
    public void bark(){
        System.out.print(name + "is barking!");
    }
}


这里我们在main函数里面试试访问他:结果是显示在编译的时候出现了问题

java: name 在 Dog 中使 private 访问控制 private修饰一个类成员变量无法直接同一个包的不同类中访问

在其后面要讲到的继承的子类中也是不可用的(这个被private修饰的父类成员,可以被继承但是无法访问):

class Dog{
    private String name;
    int age;
    public void bark(){
        System.out.print(name + "is barking!");
    }
}
class specialDog extends Dog{
    public void func(){
        System.out.println("the sepcial dog");
    }
}
public class Test {
    public static void main(String[] args) {
        specialDog dog1 =new specialDog();
        dog1.name = "修勾";
    }
}


我们定一个Dog父类,然后使用specialDog来继承这个Dog父类,然后创建一个specialDog的对象并对父类中的name进行访问:结果同样如下。

无法访问所继承的父类中的private修饰的成员

除此之外,被private修饰的成员对其他包的类也是不可见的:编译出错。

     父类和子类在不同的两个包

设置private可以避免用户直接访问它,从而保证数据的安全性,如果非要在外部调用这个类中被private修饰的成员,可以在这个类中开放一个指向这个private修饰的成员的接口方法,


       2、public

类中被public修饰的成员,除了可以在本类访问这个成员,在其他类和子类,或者其他包中访问。

此处的案例在private中可以类比,不再一一列举。


       3、protected

从上面的内容可以得知,类中private修饰的成员不能夸包访问,而public又可以给到最大权限,可以夸包访问,在不同的类中也可以使用,两种修饰符都太极端,于是就给出了一个中间值,他就是protected类中被protected修饰的变量可以在同一包中的同一类访问,也可以在同一包中的不同类访问,同时还可以在不同包中的子类访问。


       4、default

如果不加修饰符,则默认给出defualt修饰符,defualt修饰符默认只能同一包中的同一类和同一包中的不同类访问。即只有同一个包中的类可以调用这个类的成员。


java类和对象的基础特性-2

https://developer.aliyun.com/article/1515755

目录
相关文章
|
17天前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
14天前
|
存储 安全 Java
java.util的Collections类
Collections 类位于 java.util 包下,提供了许多有用的对象和方法,来简化java中集合的创建、处理和多线程管理。掌握此类将非常有助于提升开发效率和维护代码的简洁性,同时对于程序的稳定性和安全性有大有帮助。
37 17
|
8天前
|
分布式计算 Java API
Java 8引入了流处理和函数式编程两大新特性
Java 8引入了流处理和函数式编程两大新特性。流处理提供了一种声明式的数据处理方式,使代码更简洁易读;函数式编程通过Lambda表达式和函数式接口,简化了代码书写,提高了灵活性。此外,Java 8还引入了Optional类、新的日期时间API等,进一步增强了编程能力。这些新特性使开发者能够编写更高效、更清晰的代码。
20 4
|
6天前
|
安全 Java
Java多线程集合类
本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
|
10天前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
50 4
|
11天前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
26 2
|
15天前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
|
19天前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
|
19天前
|
Java API Maven
如何使用 Java 字节码工具检查类文件的完整性
本文介绍如何利用Java字节码工具来检测类文件的完整性和有效性,确保类文件未被篡改或损坏,适用于开发和维护阶段的代码质量控制。
|
19天前
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
22 3