Java对象与Java类(上)

简介: Java对象与Java类(上)

1.面向对象是什么?


面向对象:object oriented programming 缩写 OOP面向对象的编程语言

1.以分类的方式进行思考和解决问题。

2.面向对象先对整体关系作出分类,然后根据不同的类深入细节的处理。

3.面向对象的思想符合人类的认知习惯。


我见过举的最多的例子就是把大象放进冰箱:

面向对象的思想就是把这件事的三个步骤:打开冰箱,放入大象,关闭冰箱。这三个动作俩个是关于冰箱的,一个是关于操作人的。所以就把打开冰箱,关闭冰箱这俩个操作定义在冰箱这个对象中,把放入大象定义在人这个对象中。于面向过程不同的就是在,面向过程关注的是正在发生什么事,面向对象关注的是发生这件事和谁有关系。


面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。——Java核心技术 卷1(11版)


注意

 面向对象无法取代面向过程,他们是相辅相成的。面向对象关注于从宏观上把握事物之间的关系,在具体到如何实现某个细节时(在类中定义一个方法),仍然采用面向过程的思维方式。

 对于一些规模较小的问题,将它分解为过程的开发方式比较理想,面向对象的设计思想适用于规模较大的项目,把很多个过程转换为较少的类,这更便于程序员管理,寻找错误时与比较方便(假设一个数据出现了错误,你只需要找访问这个数据的方法)。


2.Java类


1.什么是类

类是构造对象的模板或蓝图,我们可以将类想象成制作小甜饼的模具,将对象想象为小甜饼。——Java核心技术 卷1(11版)


也就是说:

1.类就是将一类事物的相同的属性,行为放在一起

2.类是表示一个客观世界某类群体的一些基本特征抽象.


2.Java类

类的结构

变量:事物属性的描述;

方法:事物的行为;(可以做的事情)

构造方法:用于创建对象;(创建类的时候有一个默认的无参的构造方法)

内部类: 即在类体中声明的类。

块:一段没有名称的代码块


Java类的格式

[访问权限修饰符]  [修饰符] class Person{
//第一步声明一个类
  /*访问修饰符有两种public,无(默认)
  修饰符:final,abstract
  关键字class用来定义一个类
  Java类名的命名规范:
  类名首字母大写,见名知意,驼峰表示*/
//第二步给类添加属性
    //成员变量定义
    /*
    [访问权限修饰符] [修饰符] 属性类型 属性名;
    */
    public String name; //名字
    public Integer age; //年龄
//第二步给类添加方法
    /*方法声明格式为:
    [访问权限修饰符] [修饰符] 返回值类型  方法名(){
     }*/
     public void eat(){
         System.out.println("吃饭");
     }
}


3.java对象


对象是类的一个实例,是以类为模板在内存中创建的实际存在的实例

上面举得例子人就是一个类,我们每个人都是一个对象,拥有类中的属性,行为,可以使用。

对象的创建和使用:

Person person = new Person();

Person person:使用Person类作为类型声明一个变量person(对象变量)。

new Person():使用new + Person 类构造方法创建对象.

=:将右边创建的对象地址 赋给 左边的person变量

使用person变量可以访问对象中的成员变量和成员方法.


注意:

1.同一类的每个对象有不同的成员变量存储空间。

2.同一类的每个对象共享该类的方法。


要想使用对象,必须清楚对象的三个主要特征:

1.对象的行为:可以对对象完成哪些操作,或者可以对对象应用哪些方法。

2.对象的状态:当调用那些方法时,对象会怎么样。

3.对象的标识:如何区分具有相同行为与状态的不同对象。


4.类和对象


类是一类事物的抽象概念,是一个模型

对象是由这个模型所创造的一个个具体存在的,实实在在存在的实例。

所以创建对象的过程也叫实例化对象。

编程中现有类后有对象。

现实生活中先有对象后有类(相当于根据对象,总结出来的类)。


5.类中的变量,方法


1.变量分类

按照位置分


成员变量:

成员变量是定义在类中,方法体之外的变量。

成员变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。

在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。

成员变量在创建对象的时候会从类中复制一份到对象中。

成员变量可以被类中方法、构造方法和特定类的语句块访问。

成员变量的作用范围为整个类体。


局部变量:

在方法、构造方法或者语句块中定义的变量被称为局部变量。

局部变量可以使用Java语言中任何一种数据类型(包括基本类型和引用类型)。

局部变量在使用前必须初始化赋值。

变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。


2.方法分类

成员方法:成员方法是定义在类中。这种方法在创建对象的时候创建。

语法格式:

修饰符 返回值类型 方法名(参数列表) {
    方法体语句;
    [return 返回值]
}

构造方法:用来创建对象的方法

构造方法名与类名相同,且没有返回值,且不需要使用void修饰。

构造方法是定义在 Java 类中的一个用来创建对象的方法。

使用 new + 构造方法 创建一个新的对象。在创建一个对象的时候,至少要调用一个构造方法。

每个类都有构造方法。如果没有显式地为类定义构造方法,Java将会为该类提供一个默认构造方法,但是只要在一个Java类中定义了一个显示的构造方法后,默认的无参构造方法即失效。

一个类可以有多个构造方法。

public class Person{ 
  public Person(){ 
  } 
  public Person(String name){ 
      // 这个构造方法有一个参数:name 
  } 
}

例:创建Person类的对象

Person person= new Person();
Person person = new Person("张三");


6.方法重载


方法的重载是指同一个类中具有相同的名字,但参数不同的几个方法。

参数不同(可以有三方面的不同)

1.数量不同

2.类型不同

3.顺序不同

调用时,会根据不同的参数表选择对应的方法。

注意:方法重载跟方法的返回值类型没有任何关系


7.对象与引用


Java 语言中除基本类型之外的变量类型都称之为引用类型。

Java中的对象是通过引用对其操作的。

class Person{    
    String name;
    String age;
}
Person person= new Person();

创建一个对象包含三个动作:

1.右边的“new Person()”,是以Person类为模板,调用Person类的构造方法,在堆空间里创建一个Person类对象。

2.左边的“Person person”创建了一个Person类型引用变量。所谓Person类的引用,就是以后可以用来指向Person对象的对象引用。

3.”=”操作符使对象引用指向刚创建的那个Person对象。

Person person;//对象引用变量
person= new Person();//对象本身

new Person(); 这个语句在堆空间里创建了实体,尽管它们也是确确实实存在的实体,但是,我们看不见,也摸不着。

对象没有名字,也就没法直接访问它。我们需要通过对象引用来间接访问对象。

对象好比是一只很大的气球,但是我们抓不住它。引用变量是一根绳,可以用来系汽球。

Person  person1; //创建一根绳子,一根还没有系上任何一个气球的绳;
Person  person2;//又做了一根绳,还没系上气球,
person1 = new Person();//给person1系上气球;
person2 = person1;//这里,发生了复制行为。要说明的是,对象本身并没有被复制,被复制的只是对象引用。

结果是,person2也指向了person1所指向的对象。两根绳系的是同一只气球。


基本类型和引用类型的区别:

基本类型

byte,short,int,long,float,double,char,boolean

它的值就是一个数字,一个字符或一个布尔值.

引用数据类型

类,接口,数组

它的值是对象在内存空间中的地址,

值传递与引用传递


Java中进行方法调用中传递参数时,参数传递有两种:

1.值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。


2.引用传递:(形参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数。

基本类型传递的是该数据值本身。引用类型传递的是对对象的引用,而不是对象本身 。



目录
相关文章
|
8天前
|
存储 Java
java的对象详解
在Java中,对象是根据类模板实例化的内存实体,具有唯一标识符、属性及行为。通过`new`关键字实例化对象并用构造方法初始化。变量存储的是对象引用而非对象本身,属性描述对象状态,方法定义其行为。Java利用垃圾回收机制自动处理不再使用的对象内存回收,极大地简化了对象生命周期管理,同时对象具备封装、继承和多态性,促进了代码的重用与模块化设计。这使得Java程序更易于理解、维护和扩展。
|
8天前
|
Java
java的类详解
在 Java 中,类是面向对象编程的核心概念,用于定义具有相似特性和行为的对象模板。以下是类的关键特性:唯一且遵循命名规则的类名;描述对象状态的私有属性;描述对象行为的方法,包括实例方法和静态方法;用于初始化对象的构造方法;通过封装保护内部属性;通过继承扩展其他类的功能;以及通过多态增强代码灵活性。下面是一个简单的 `Person` 类示例,展示了属性、构造方法、getter 和 setter 方法及行为方法的使用。
|
3天前
|
Java 编译器
Java——类与对象(继承和多态)
本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
18 9
Java——类与对象(继承和多态)
|
3天前
|
SQL Java 编译器
Java——类与对象(封装)
封装是面向对象编程中的概念,指将数据(属性)和相关操作(方法)组合成独立单元(类),使外部无法直接访问对象的内部状态,只能通过提供的方法进行交互,从而保护数据安全。例如,手机将各种组件封装起来,只暴露必要的接口供外部使用。实现封装时,使用`private`关键字修饰成员变量,并提供`get`和`set`方法进行访问和修改。此外,介绍了包的概念、导入包的方式及其注意事项,以及`static`关键字的使用,包括静态变量和方法的初始化与代码块的加载顺序。
17 10
Java——类与对象(封装)
|
3天前
|
Java C语言
Java——类与对象
这段内容介绍了Java中的类和对象、`this`关键字及构造方法的基本概念。类是对现实世界事物的抽象描述,包含属性和方法;对象是类的实例,通过`new`关键字创建。`this`关键字用于区分成员变量和局部变量,构造方法用于初始化对象。此外,还介绍了标准JavaBean的要求和生成方法。
18 9
Java——类与对象
|
2天前
|
存储 安全 Java
Java——String类详解
String 是 Java 中的一个类,用于表示字符串,属于引用数据类型。字符串可以通过多种方式定义,如直接赋值、创建对象、传入 char 或 byte 类型数组。直接赋值会将字符串存储在串池中,复用相同的字符串以节省内存。String 类提供了丰富的方法,如比较(equals() 和 compareTo())、查找(charAt() 和 indexOf())、转换(valueOf() 和 format())、拆分(split())和截取(substring())。此外,还介绍了 StringBuilder 和 StringJoiner 类,前者用于高效拼接字符串,后者用于按指定格式拼接字符串
9 1
Java——String类详解
|
5天前
|
存储 Java
Java的对象和类的相同之处和不同之处
在 Java 中,对象和类是面向对象编程的核心。
|
3天前
|
Java
Java Character 类详解
`Character` 类是 Java 中的一个封装类,位于 `java.lang` 包中,主要用于处理单个字符。它是一个最终类,提供了多种静态方法来检查和操作字符属性,如判断字符是否为字母、数字或空格,以及转换字符的大小写等。此外,`Character` 类还支持自动装箱和拆箱,简化了 `char` 和 `Character` 之间的转换。以下是一些示例代码,展示了如何使用 `Character` 类的方法来检查字符属性和执行字符转换。掌握 `Character` 类的用法有助于更高效地处理字符数据。
|
3天前
|
Java
Java Number & Math 类详解
在 Java 中,`Number` 类和 `Math` 类是处理数字和数学运算的重要工具。
|
4天前
|
存储 Java
Java编程中的对象序列化与反序列化
【9月更文挑战第12天】在Java的世界里,对象序列化与反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何通过实现Serializable接口来标记一个类的对象可以被序列化,并探索ObjectOutputStream和ObjectInputStream类的使用,以实现对象的写入和读取。我们还将讨论序列化过程中可能遇到的问题及其解决方案,确保你能够高效、安全地处理对象序列化。