类是对象的模板,既然说对象是模拟现实生活中的灵活扩展性,那么这些都仅仅只是虚拟的东西。我们怎样才能把这虚拟的东西给实现出来?比如设计月饼我们需要把要求都想好,这些要求仅仅只是你大脑里的想法,要想把月饼样式实现出来,我们就得去刻想好样式的一个模板,然后用模板把月饼做出来。
我们要把构造好的想法抽到程序里面去那么也需要一个模板把他给实现出来,这个模板就是类,类就是对象的模板。如图6.41所示:
图6.41
变量申请在类里面就是属性,比如你在超市里面叫顾客,你在公司里面叫总经理。所以变量在类里面就升级成了属性,但这也仅仅只是一个名称叫法而已。
万事万物为对象,拿到什么就能说出他里面有什么,比如笔,笔他的属性有颜色,有类型,有粗细。功能有能够写字,能够画画,写代码等。比如键盘,键盘属性有颜色,有类型,有重量,功能有可以敲代码,可以玩游戏。
现实生活中的东西都可以把他的属性和行为描述出来,衣服属性有面料,尺寸等,行为有能够穿,能够取暖等这就是行为。万事万物为对象,那么他都可以说出他的行为和属性,行为我们用方法描述,属性我们用变量去描述,所以这就是一个类,描述了对象里面该拥有的一些东西。
类是把我们大脑里面想的东西形成了代码,那么代码又如何把他形成对象呢?那么就需要new出一个对象,如图6.42所示:
图6.42
什么是new?new就是新建的意思,就是将这个Computer类新造一个对象,造对象的过程需要经过内存进行分配存储。
new对象紧紧只是new Computer();这一句有用,前面的跟new对象完全没有一点的关系,new对象真正的就是new Computer。前面的意思是我声明了一个变量,变量的名称叫c,准备等待new好的对象交给变量c。
对象new的时候他会在内存里进行分配一些存储的数据,分配完会再把对象拿出来交给这个变量,这个变量就指向了这片对象内存,这个变量就相当于内存的操作者,就相当于这个对象的代表。new对象的过程如图6.43所示:
图6.43
首先他询问Dog类是否加载,加载好之后那么就开始分配内存先给name分配一个内存地址,然后给age分配内存地址,分配好这些存储大小之后,就nwe出来一个对象,这个对象指向了这些属性。new对象就是将属性的内容分配到内存里面去,分配完毕之后在把内存交给了我们的变量d,变量d就指向了内存的地址。他每new一次重新分配一次,new几次就分配多少个,new就是新生成,new就是新建。如图例题6.44所示:
图6.44
我们把对象new好了之后他就开始分配属性占用内存,首先name和age的内存设置好之后归对象的拥有,对象里面包含了name和age然后再把对象的地址交给变量d,变量d就拿到了这个对象的地址,变量d跟new对象没有任何关系只是用来接收对象的地址。
对象里面的内容如何去访问和调用?这是一个Cat类,里面有name、age这2个属性,还有一个show方法。首先Cat c = new Cat(); 然后又 Cat c1 = new Cat(); 一共new了两个对象。创建了2只猫,那么他在内存里地址是如何分配的?如图6.45所示:
图6.45
Cat c=new Cat();在new对象的时候,他首先实例化里面的属性,所以就为name、age各分配了一个空间。我们分配了2个属性的存储空间,这2个存储空间交给对象管理,然后把这个对象交给了变量c ,c就指向了这个对象的地址。
我们又new了一个对象,又在内存里面开辟了2个属性name、age这2个属性属于新new出来的对象地址,然后又声明了一个变量叫c1,c1指向了这个新new出来的对象地址。我们要访问这个对象那就需要拿着变量c1.属性名[点是访问的意思]比如要访问这个对象的name属性那么就需要[c.name]如图6.46所示:
图6.46
这个点在Java里面是属性和方法的访问符,所以拿着c.一下就是访问了此对象的属性。点在包名里面还可以用作为分割符。
无论你一个类new多少遍,每个对象所new出来的时候,他里面的属性都是独一一份的,不可混搭在一起,他的属性是各自自己的。
那么方法放哪呢?方法他不需要分配内存,因为方法在用的时候才会执行,不用的时候就不会执行,所以方法是不需要分配的。
对象之间的赋值问题,如果new了2个对象每个对象都有一个name属性c.name=”笔记本”; c1.name=”台式机” c=c1; 打印c.name的结果为:台式机。如图6.47所示:
图6.47
为什么会打印台式机?c1等于c就相当于把c1的对象的指向交给了c,以前c的指向断掉重新指向c1的对象。所以c现在的对象就是c1的对象,所以c.name现在对象的name就是台式机。
类里面的成员问题:万事万物为对象,把现实生活中的所有东西都看作为对象去做。既然说万事万物为对象那么类也是一个对象,因为类是由一个米字和大子组成,类是对象的模版那他就是模版对象。就好比做月饼,月饼要用磨子去做,那么磨子也是一个对象,他是磨子对象。所以类是来造就对象的,是对象的一个模版,我们要对象里面的一个东西,就要去类里面去声明对象才会拥有。
类他也是一个对象,对象拥有自己的属性和行为方法的,那么类也应该拥有他自己的属性和方法。类的属性和方法分为2类:属性分为静态属性和实例属性,静态属性也叫类属性,实例属性也叫对象属性。方法分为静态方法和实例方法,静态方法也叫类方法,实例方法也叫对象方法。
对象有2个名称,可以说是对象也可以说是实例都是一回事。类里面称之为静态,所以在申请的时候就有2个部分一个是静态成员和实例成员。静态成员就是类成员,类的方法和属性就是模版的方法和属性。
对象可以有千千万万个,但是在Java里模版只能有一个对象。模版的方法叫做静态方法和静态属性,给对象设计的方法可以叫做实例方法也可以叫做实例属性。
类创建的叫做实例等于new对象有2种说法,new叫实例化就是将类实例化成对象,所以在类创建的可以说是实例也可以叫对象。
为什么类只能有一个对象,因为类是一个模版,模版不可能有多个,如果有多个就乱了,所以类只能有一个对象。静态是类的声明,因为类他也是一个对象,就会有属性和方法,但是他的属性和方法叫做静态。静态只有一份,因为类的对象只有一个而且还会给对象进行公开使用。
模版所造就出去的对象可以说是他的孩子,模板为母亲,一个模版可以造就千千万万个对象出来,每个对象都可以享用模版里面的功能,因为在分配的时候都给了权限。
静态属性和静态方法都需要加个static关键字这就是静态的属性与方法。实例的就是去掉static就是实例的属性和方法了。如图6.48所示:
图6.48
加了static就是类的属性和类的方法,区别就是对象都可以访问静态的属性和静态的方法如图6.49.所示:
图6.49
Test t1 = new Test();首先加载对象Test的内存,里面有一个type属性,这是属于Test类的属性。然后开始分配name和age的存储空间给了对象,这个对象同时又指向了type属性,为什么又执行了他?因为Test是模版,模版里面一些静态的东西都可以使用,所以就直接指向了type属性。也就是等于对象里面有一个type属性,同时拿类的时候,类也有type属性,他们都有type属性。然后又new Test(); Test又开始创建内存,分配了name和age的内存。有分配了一个对象,这个对象指向了name和age同时又指向了type。然后声明了2个变量,c1和c2。c1指向了这个对象,c2指向了那个对象。
图6.49中的打印结果是钢材,因为静态一份对象可以公用静态的对象,访问静态的成员,但是静态的成员是不可以访问对象的任何成员的。所以访问的都是同一份。
第一静态成员类被开始的第一次会被加载。第二静态成员可以被对象访问,但是访问的都是同一份。第三我们new千千万万个对象时候,他直接会对静态的成员自动产生引用的关系。如图6.490所示:
图6.490
技术分享:凯哥学堂
相关推荐
根据xsd批量生成java类,觉得很方便也很酷。但是有时候xsd生成的java类中含有汉字,结果总是有些问题。 可是xjc命令参数又没有encoding参数之类的。在网上搜了一通,忽然发现了一个好东东:xjc是由...
在Java开发中,JAXB提供了一种方便的方式,允许开发者通过XML Schema (XSD) 文件来生成对应的Java类,从而简化XML处理的工作流程。 1. **XML Schema (XSD) 文件**: - XML Schema是一种W3C标准,用于定义XML文档的...
为了在Java环境中与这些Web服务交互,我们需要将WSDL文件转换为Java类,这就是`wsdl2java`工具的作用。 `wsdl2java`是Apache Axis项目的一部分,它是一个强大的工具,可以自动生成Java客户端和服务端代码,这些代码...
Kettle提供了丰富的转换和作业元素,能够处理各种数据源和目标,其中就包括对Java类的调用。在标题《kettle中调用java类》示例代码中,我们关注的是如何在Kettle的转换或作业中嵌入Java代码,以实现更复杂的数据处理...
类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java ...
在跨平台开发中,有时需要将不同编程语言的组件整合在一起,例如在C#应用中调用Java类或使用Java的jar包。本篇将详细阐述如何在C#环境中实现对Java类的调用以及使用Java的jar包。 首先,要理解C#与Java之间的互操作...
classguard是防止java反编译工具的工具,它允许java类文件使用128bit的AES加密加密。AES密钥是随机生成的每次启动加密工具。解密是一个自定义的类装载器透明地做。这类装载器的主要部分是用C防止反编译等篡改。
### Axis将WSDL转换为JAVA类:深入了解与实践 #### 核心概念解析: **Axis** 是Apache组织下的一个开源项目,它提供了在Java平台上创建和调用Web服务的能力。Axis实现了SOAP(Simple Object Access Protocol)协议...
通过java类的路径实例化类并调用方法:仅仅知道类的路径,就可以实例化对象,利用反射机制调用其方法
java 类中类 程序 学习java必须要学习的经典案例,加油学习把
java类,c++类编辑工具java类,c++类编辑工具java类,c++类编辑工具java类,c++类编辑工具java类,c++类编辑工具java类,c++类编辑工具java类,c++类编辑工具java类,c++类编辑工具java类,c++类编辑工具java类,c++...
JAVA类反编译软件-绿色版 javaJAVA类反编译软件-绿色版JAVA类反编译软件-绿色版
当要看别人的源码时,由于类包层次有时太多,分别反编译每个类文件,很费事,此软件只要你指明要反编译的类包和要输出的目标路径,就可以按照类包的层次一一对应地反编译成java文件。内置 反编译器是jad1.5.8g.
oracle完整引入jar包和编译java类,实现数据库级别的函数的调用
java类加载器学习三、类加载器的委托模式
java类和对象练习题.docx
基于java的开发源码-tjpcms国产java类cms.zip 基于java的开发源码-tjpcms国产java类cms.zip 基于java的开发源码-tjpcms国产java类cms.zip 基于java的开发源码-tjpcms国产java类cms.zip 基于java的开发源码-tjpcms...
4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4.java类的声明.zip4....
- JavaBridge支持基本类型、数组、对象和自定义Java类作为参数传递。对于复杂的数据结构,如自定义Java类,需要确保PHP端有对应的Java类型映射。 - Java方法的返回值同样会转换为PHP可识别的类型,例如基本类型、...
通过测试,Delphi的RSA算法无法与Java的RSA算法兼容,经过各种周折最终尝试了Delphi调用Java的类的方法进行RSA加密解密;这是非常令人振奋的解决方案,但是前期也遇到不少问题。 在网上找到...