首页编程java编程java中为什么可以在类中定义自身的对象?java在类的定义中创建自己的对象

java中为什么可以在类中定义自身的对象?java在类的定义中创建自己的对象

编程之家2023-10-1396次浏览

大家好,如果您还对java中为什么可以在类中定义自身的对象不太了解,没有关系,今天就由本站为大家分享java中为什么可以在类中定义自身的对象的知识,包括java在类的定义中创建自己的对象的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

java中为什么可以在类中定义自身的对象?java在类的定义中创建自己的对象

为什么C++中的类不能定义自身类的对象

原因就是:在C++中,在定义对象的时候就创建了对象的实例,即分配了对象的内存空间。在Java中,只有调用new的方法才能创建对象的实例,在内存中分配对象的空间。所以,如果在定义的时候就定义自身类的对象,就会导致递归创建对象的现象,创建了对象aa,因为aa是一个A类的实例,那么aa中还有一个aa对象,还要创建一个aa对象,为其分配内存…………,这样就会导致递归创建对象,结果就是内存被消耗殆尽。当然,这样的设计本身也不合理。

也就是说在C++的类定义中,是不能够在类中定义自身类的对象的,但是可以定义自身类的指针对象和引用。

比如:

java中为什么可以在类中定义自身的对象?java在类的定义中创建自己的对象

[cpp] view plain copy

<span style="font-family:KaiTi_GB2312;font-size:18px;">class A

{

java中为什么可以在类中定义自身的对象?java在类的定义中创建自己的对象

public:

A()

{

cout<<"Constructor method."<<endl;

};

A aa;

};

Java编程中的AOP和IOC分别是什么呢,什么时候用呢

控制反转(IOC)

(理解好Ioc的关键是要明确“谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”)

1、Ioc—Inversion of Control:即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。

2、谁控制谁,控制什么:传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象即由Ioc容器来控制对象的创建。

谁控制谁?当然是IoC容器控制了对象。

控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

3、为何是反转,哪些方面反转了:有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象。

为何是反转?因为由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转。

哪些方面反转了?依赖对象的获取被反转了。

还是不明白没事,下面搞个简单案例来说就懂啦!!!

例子:当我们在任何一个有实际开发意义的程序项目中,我们会使用很多类来描述他们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑。这个时候,每个类都需要负责管理与自己有交互的类的引用和依赖,代码将会变的异常难以维护和极高的高耦合。而IOC的出现正是用来解决这个问题,我们通过IOC将这些依赖对象的创建、协调工作交给spring容器去处理,每个对象值需要关注其自身的业务逻辑关系就可以了。在这样的角度上来看,获得依赖的对象的方式,进行了反转,变成了由spring容器控制对象如何获取外部资源(包括其他对象和文件资料等)。

总的来说:IOC就是通过在Xml配置文件里依赖注入来解决代码问题。

IOC的注入类型有几种?主要可以划分为三种:构造函数注入、属性注入和接口注入。Spring支持构造函数注入和属性注入

面向切面(AOP)

(面向切面编程,AOP其实只是OOP的补充而已,AOP基本上是通过代理机制实现的。)

我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。

我们都知道 Java是 OOP-面向对象编程的,它有自己的优势,也有自己的不足。比如说:在我们开发中,都会有一条业务主线(即客户的需求)。而我们要做的就是实现这个主线上的需求。我们在实现这些功能的时候,经常要干一些额外的不可避免的事情,比如事务的管理,日志的记录等,就很繁杂且代码量增多,所以 Spring提供了另一种角度来思考程序结构,也就是把这一些事情剥离出来,然后适时适地的把它们加入到我们的代码中,比如说声明式事务管理的时候,我们在 service层检测到save*、update*这些方法要被调用的时候,我们先进行开启事务什么的,这就是AOP,面向编程的思想。

AOP的术语:

1、通知(Advice):就是你想要的功能,也就是上面说的安全,事物,日志等。你给先定义好把,然后在想用的地方用一下

2、连接点(JoinPoint):这个更好解释了,就是spring允许你使用通知的地方,那可真就多了,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.其他如aspectJ还可以让你在构造器或属性注入时都行,不过那不是咱关注的,只要记住,和方法有关的前前后后(抛出异常),都是连接点。

3、切入点(Pointcut):上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知(使用叫织入,以后再说),你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。

4、切面(Aspect):切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。

5、引入(introduction):允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗

6、目标(target):引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。

7、代理(proxy):怎么实现整套aop机制的,都是通过代理,这个一会给细说。

8、织入(weaving):把切面应用到目标对象来创建新的代理对象的过程。有3种方式,spring采用的是运行时,为什么是运行时,后面解释。

JAVA中定义一个类和定义一个对象是什么意思啊

类就是类型,对象就是这种类型的实例,例子。

你可以在计算机中定义一个“人类”类型(类)

然后定义小明同学是“人类”中的一个例子(对象)

你还可以定义“男人类”是一种类型,它来源于人类,是人类的子类型,“extends”扩展了人类(类)

于是你又可以定义小张是男人(对象)

类:它总是一种分法,它是抽象的东西,是分类,划分,结总,它没有血没有肉,是看不见摸不着的,是一种叫法。

对象:它是某种类的实实在在的例子。是具体的,看得见摸得着的。有血有肉的。

public class Human{....}//这种语法就定好一种类型叫Human(人类)

public Human xiaoMing;//现在你定义了xiaoMing同学为人类的实例对象;

在大千世界中,我们生活的世界里,所有的我们看得到的,摸得头的,都是可以被定义成类的,每一个物体都从属于一种或几种类。看你如何去分。

定义成类后就可以被计算机识别进行运算,得到我们想要的结果。

我己经用了最简单的语言来讲解,希望你能明白

java在类的定义中创建自己的对象

1. java是纯面向对象的,所有的方法都要写在类里面,main函数也是。\x0d\x0a2.但是main只是程序的入口,在那儿个类里面都无所谓,很多需要main函数做入口的项目都单独写个类放main函数\x0d\x0a3. main是静态函数,你在其它静态函数里创建一个这个类的对象也是可以的,静态函数是类的方法,不是对象的方法。\x0d\x0a4.建议你看看内存机制。

OK,本文到此结束,希望对大家有所帮助。

国足23人名单(国足23人名单出炉 新闻)java语言加号代表什么?java语句中的输出语句里的每个加号是什么意思