java面向对象菜鸟教程,java如何面向对象
这篇文章给大家带来了一些关于java的知识,主要介绍了java面向对象的相关问题,包括面向对象的基本特征,对象之间的关系等等。希望对你有帮助。
如何解决写爬虫IP受阻的问题?立即使用。
一、Java特效
1、简单性
人们希望构建一个无需深厚的专业培训就能编程的系统,而且它应该符合当今的标准实践。所以,虽然人们发现C不适合,但还是把Java设计得尽量接近C,这样系统更容易理解。Java淘汰了c中很多很少使用、难以理解、容易混淆的特性,目前来看这些特性带来的麻烦远远大于好处。
的确,Java语法是C语法的“纯”版本。没有头文件、指针操作(甚至指针语法)、结构、联合、运算符重载、虚拟基类等。但是,设计者并没有试图删除c中所有不合适的特性,例如,switch语句的语法在Java中并没有改变。如果你懂C,你会发现你可以很容易地转换成Java语法。
Java发布的时候,C其实并不是最常用的编程语言。许多开发人员都在使用VisualBasic及其拖放式编程环境。这些开发者认为Java并不简单。Java开发环境花了很多年才赶上来。如今,Java开发环境已经远远超过了大多数其他编程语言。
简单的另一个方面是小。Java的目标之一是支持可以在小型机器上独立运行的软件的开发。的基本解释器和类支持只有40KB左右;加上基本的标准类库和对线程的支持(基本上是一个自带的微内核),需要增加175KB左右。
在当时,这是一个伟大的成就。当然,由于不断扩充,类库已经相当庞大。现在有一个独立的JavaMicroEdition,类库更小,适合嵌入式设备。
2、面向对象
面向对象是一种新的编程方法,或者说是一种新的编程规范。其基本思想是使用对象、类、继承、封装、多态等基本概念。用于编程。软件系统是从现实世界中的客观事物(即物体)出发构建的,在系统构建中尽可能使用人类的自然思维方式。
3、分布式
分布式系统对于用户来说,他们面对的是一个服务器,这个服务器只提供用户需要的服务。这些服务实际上是一个分布式系统,背后有很多服务器组成,所以分布式系统看起来就像一台超级计算机。
4、健壮性
Web的多平台环境对程序有特殊的要求,因为程序必须在各种系统中可靠地执行。因此,在设计Java时,使其具有创建健壮程序的能力已经被提到了高度优先的位置。为了获得可靠性,Java限制了一些关键领域,从而迫使程序员在程序开发的早期发现错误。同时,程序员也不用担心很多会导致编程错误的常见问题。因为Java是一种强类型语言,所以它在编译时检查代码。无论如何,在运行时检查代码。很多难以跟踪的bug往往在运行时难以重现,这在Java中几乎不可能发生。因为让编写的程序在不同的运行条件下以可预测的方式运行是Java的关键特性之一。为了更好地理解Java有多健壮,本文分析了程序失败的两个主要原因:内存管理错误和未处理的异常(即运行时错误)。在传统的编程环境中,内存管理是一项既困难又枯燥的工作。例如,在C/C中,程序员必须手动分配和释放所有的动态内存。有时这可能会导致问题,因为程序员可能会忘记释放以前分配的内存,或者更糟的是,试图释放程序的其他部分仍在使用的内存。Java可以通过为你管理内存的分配和释放,从根本上消除这些问题(其实释放内存是完全自动的,因为Java为不再使用的对象提供了垃圾收集功能)。传统环境中的异常通常是由“被0除”或“文件未找到”等错误引起的,它们必须由一个笨拙且不可理解的结构来管理。Java通过提供面向对象的异常处理在这一领域提供了帮助。在一个编写良好的Java程序中,所有运行时错误都可以而且应该由程序来管理。
5、安全性
Java取消了功能强大但危险的指针,代之以引用。因为指针是可以移动的,所以指针可以任意指向一个内存区域,不管这个区域是否可用。这是很危险的,因为原来的内存地址可能存储了重要的数据或者被其他程序占用了,使用指针的时候数组很容易越界。
垃圾收集机制:垃圾收集器在后台自动收集未使用的内存,无需程序员直接控制内存收集。避免程序忘记及时回收,导致内存泄漏。避免因程序错误回收程序核心类库的内存,导致系统崩溃。
异常处理机制:Java异常机制主要依靠五个关键词:try、catch、finally、throw和throws。
类型转换:只有符合转换规则,转换才能成功。
公钥加密机制(PKC)用于Java字节码的传输。
运行时环境中提供了四种安全机制:字节码检查器-类加载器-运行时内存布局-文件访问限制。
6、体系结构中立
编译器生成架构中立的目标文件格式,这是一种编译后的代码,只要有Java运行时系统,就可以在很多处理器上运行。Java编译器通过生成独立于特定计算机体系结构的字节码指令来实现这一特性。一个设计良好的字节码不仅可以在任何机器上容易地解释和执行,而且可以快速翻译本地机器的代码。
代码在结构上是中性的,与计算机结构无关。
7、可移植性
Java语言最大的特点就是支持可移植性。所谓可移植性,就是同一程序可以在不同的操作系统之间任意部署,从而降低开发难度。在Java中,如果要控制可移植性,主要依靠JVM(Java虚拟机)。Java虚拟机是由软件和硬件模拟的计算机。只要Java虚拟机支持所有的程序,就可以执行程序,不同的操作系统上存在不同版本的JVM,就可以实现可移植性。
版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。
8、解释性
有人说Java是编译的。因为所有的java代码都是编译的。Java不编译就无法执行。也有人说Java是解释型的。因为java代码编译后不能直接运行,是解释的,在JVM上运行,所以是解释的。
9、高性能
实时编译器可以监控哪些代码被频繁执行,并对其进行优化以提高速度。更复杂的优化是消除函数调用(即内联)。编译器及时知道哪些类已经被加载。基于当前加载的类集,如果特定的函数不会被覆盖,您可以使用内联。如有必要,您还可以撤消优化。
10、多线程
表示此程序(一个进程)运行时生成多个线程。
11、动态性
Java本质上是静态语言,不是动态语言。动态语言的显著特点是在程序运行时可以改变程序结构或变量类型。典型的动态语言有Python、ruby、javascript等。Java不是动态语言,但是Java有一定的动态性,表现在以下几个方面:
反射机制;动态字节码操作;动态编译;执行其他脚本代码;
二、对象
对象是系统中用来描述客观事物的实体。它是构成系统的基本单位。一个对象由一组属性和一组操作这组属性的服务组成。
类的实例化可以生成对象,对象的生命周期包括生成、使用、淘汰三个阶段。
当没有对对象的引用时,对象就变成了无用的对象。Java垃圾收集器自动扫描对象的动态内存区域,将未被引用的对象作为垃圾收集并释放它们。当系统内存耗尽或调用System.gc()进行垃圾回收时,垃圾回收线程与系统同步运行。
三、类
类是一组具有相同属性和方法的对象。它为所有属于这个类的对象提供了统一的抽象描述,其内部包括两个主要部分:属性和方法。在面向对象编程语言中,类是一个独立的程序单元,它应该有一个类名,包括两个主要部分:属性和方法。
Java中的类实现包括两部分:类声明和类体。
1、类声明
[public][abstract final]classname[extends superclassname][implements interface name list]{…}其中修饰符public、abstract、final final描述了类的属性,class name是类名,super class name是该类的父类的名称,interface name list是该类实现的接口的列表。
2、类体
类类名{
[public protected private][static][final][transient][volatile]类型variableName//成员变量
[public protected private][static][final abstract][native][synchronized]returnType method name([param list])[throws exception list]{
声明
}//成员方法
}成员变量限定符的含义:
Static:静态变量(类变量)final:常量;Transient:临时变量,用于对象存档和序列化。易变:贡献变量。并发线程共享方法的实现也包括两个部分:方法声明和方法体。
Static: class方法,可以通过类名直接调用abstract: abstract方法。final:没有方法体就不能重写方法。native:集成了其他语言的代码。synchronized:控制多个并发线程的访问方法声明包括方法名、返回类型和外部参数。参数的类型可以是简单数据类型或复合数据类型(也称为引用数据类型)。
对于简单的数据类型,java实现了值传递。该方法接收参数值,但不能更改它们。如果要更改参数的值,请使用引用数据类型,因为引用数据类型被传递到方法在内存中的地址,而方法中对数据的操作可以更改数据的值。
3、方法体
方法体是方法的实现,包括局部变量的声明和所有合法的Java指令。方法中声明的局部变量的范围在方法内部。如果局部变量与某个类的成员变量同名,则该类的成员变量将被隐藏。
为了区分参数和类的成员变量,我们必须使用这个。这用于引用方法中的当前对象,其值是调用该方法的对象。返回值必须与返回类型相同,或者完全相同,或者与其子类相同。当返回类型是接口时,返回值必须实现接口。
4、构造方法
施工法是一种特殊的方法。Java中的每个类都有一个构造函数来初始化该类的对象。该方法与类名同名,并且不返回任何数据类型。重载常用于构造方法。该方法只能由new运算符调用
5、注释
Java中的注释解释了您的代码。Java注释不会被执行,所以可以随意添加注释。
当行注释//多行注释/**/
6、隐式参数和显式参数
(1)显式参数是方法名括号中间的参数。
(2)隐式参数是在类的方法中调用的类的实例域。这个所谓的实例域是一个隐式参数。
(3)代码示例
包com . nezha . javase;
公共类测试1107 {
private int分数;
/**
* x是一个显式参数。
* score是一个隐式参数。
* @param x
*/
public void addScore(int x){
int temp=this . score x;
分数=temp
}
}x是显式参数,score是隐式参数。如果这个加在隐式参数前面,隐式参数会更清楚。
建议在隐式参数前添加此运算符。这个运算符代表这个类。
7、参数可变的方法
在jdk5之前,每个java方法都有固定数量的参数。然而,当前版本提供了可变参数的使用方法。
以大家使用时间最长的sout为例。
System.out.println(奖号: I );println内部调用的是
公共打印流printf(字符串格式,对象.args) {
返回格式(format,args);
}Object…参数类型和Object[]完全一样,也就是说你可以用…这个声明方法来接收相同类型的数组,但是没有固定的数组大小,因为是可变参数。
这里的省略号.是Java代码的一部分,这表明该方法可以接收任意数量的对象。
实际上,printf方法接收两个参数,一个时间格式字符串和一个time Object[]数组,所有参数都存储在这个数组中(如果参数是基本类型,自动装箱会将其转换为对象)。
编译器需要转换printf的每个调用,以便将参数绑定到数组,并在必要时自动装箱。
四、面向对象的基本特性
1、封装
封装是指尽可能隐藏一个对象的内部细节,与外界形成一个边界,只留下有限的接口和方法与外界进行交互。封装的原理是对象外部的部分不能随意访问和操纵对象的内部属性,从而避免外界对对象内部属性的破坏。
(1)通过给类成员设置一定的访问权限,可以实现类中成员的信息隐藏。
Private:仅限于private的类成员只能由该类本身访问。Default:对访问权限没有任何限制的类的成员处于默认访问状态,并且可以被类本身和同一包中的类访问。Protected:定义为protected的类的成员,可由该类本身、其子类(包括同一包和不同包中的子类)以及同一包中的所有其他类访问。Public:仅限于public的类成员,所有类都可以访问它。(2)包装的优势
良好的封装可以减少耦合类的内部结构,可以自由修改,可以更精确地控制成员变量来隐藏信息和实现细节(3)代码示例。
将id、name和age属性设置为private,只有这个类可以访问,其他类不能访问,这样就隐藏了信息。为赋值提供了Set方法,为取值提供了get方法。这在赋值集方法中的作用是解决显式参数与局部变量同名的问题。包com . nezha . javase;
公共课学生{
//将id,name,age属性设置为private,只有这个类可以访问,其他类不能访问,这样就隐藏了信息。
私有整数id;
私有字符串名称;
私有整数年龄;
公共整数getId() {
返回id;
}
公共void集合id(整数id) {
this.id=id
}
公共字符串getName() {
返回名称;
}
public void setName(字符串名){
this.name=name
}
公共整数getAge() {
回归年龄;
}
公共void存储(整数年龄){
this.age=年龄;
}
}:子类
2、继承
的对象拥有父类的所有属性和方法,称为子类对父类的继承。
Java中的一个父类可以有多个子类,但是子类只能继承一个父类,这叫做单继承。实现了代码的重用。Java中的所有类都是通过直接或间接继承java.lang.Object类获得的。子类不能从父类继承具有私有访问权限的成员变量和方法。子类可以覆盖父类的方法,也就是说,用与父类相同的名称命名一个成员变量。在Java中,super用来访问父类的成员,super用来引用当前对象的父类。使用super有三种情况:
访问父类的隐藏成员变量,调用父类中被覆盖的方法来调用父类的构造函数
3、多态
对象的多态性是指父类中定义的属性或方法在被子类继承后可以有不同的数据类型或表现出不同的行为。这使得相同的属性或方法在父类及其子类中具有不同的语义。
Java的多态性体现在两个方面:通过方法重载实现的静态多态性(编译时多态性)和通过方法重写实现的动态多态性(运行时多态性)。
编译多态性:在编译阶段,调用哪个重载的方法,编译器会根据参数的不同,静态确定要调用的对应方法。运行时多态性:因为子类继承了父类的所有属性(私有的除外),所以子类可以作为父类对象。当程序中使用父类对象时,它可以被子类对象替换。对象可以通过引用子类的实例来调用子类的方法。
4、重载
方法重载是类以统一方式处理不同数据类型的一种手段。一个类中可以创建多个方法。它们名称相同,但参数不同,定义不同。当调用方法时,通过传递给它们的不同参数的数量和类型来决定使用哪个方法。返回值的类型可以相同,也可以不同,返回类型不能作为区分重载函数的标准。
5、重写
子类重写父类的方法。如果子类中的一个方法和它的父类有相同的方法名、返回类型和参数表,我们说这个方法被覆盖了。如果想要父类中的原始方法,可以使用super关键字,它指的是当前类的父类。子类函数的访问修改权限不能低于父类。
五、对象间的四种关系
1、依赖
依赖关系表示一个类依赖于另一个类的定义。例如,一个人可以买一辆车和一栋房子,而Person类取决于Car和House类的定义,因为Person类指的是车和房子。与association不同,Person类中没有Car和House类型的属性,Car和House的实例作为参数传递给buy()方法。一般来说,依赖在Java语言中体现为局部变量、方法的形参或者对静态方法的调用。
2、关联
关联是类之间的连接,使一个类知道另一个类的属性和方法。关联可以是双向的或单向的。在Java语言中,关联一般通过使用成员变量来实现。
3、聚合
聚合关系是一种结合关系,而且是强结合关系。聚合是整体与个体的关系。比如汽车与发动机、轮胎等零部件的关系,就是整体与个体的关系。和关联关系一样,聚合关系也是通过实例变量来实现的。但是,在关联关系中涉及的两个类处于同一层次,而在聚合关系中,两个类处于不平等的层次,一个代表整体,一个代表部分。
4、组合
组合关系是一种联想关系,比聚合关系更强。它要求一般聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系不能共享。代表整体的对象需要负责让一些对象存活,在某些情况下,代表部分的对象会湮灭。代表整体的对象可以将代表部分的对象传递给另一个对象,后者负责这个对象的生命周期。换句话说,代表零件的对象在每个时刻只能与一个对象组合,后者专门负责生命周期。零件的生命周期与整体的生命周期相同。
推荐:《java学习教程》以上是简单说说java面向对象的细节。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。