Java类

类是对象的模板,既然说对象是模拟现实生活中的灵活扩展性,那么这些都仅仅只是虚拟的东西。我们怎样才能把这虚拟的东西给实现出来?比如设计月饼我们

需要把要求都想好,这些要求仅仅只是你大脑里的想法,要想把月饼样式实现出来,我们就得去刻想好样式的一个模板,然后用模板把月饼做出来。

  我们要把构造好的想法抽到程序里面去那么也需要一个模板把他给实现出来,这个模板就是类,类就是对象的模板。如图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

                                                                                                                                            技术分享:凯哥学堂

时间: 2024-10-11 01:48:43

Java类的相关文章

jvm系列(一):java类的加载机制

java类的加载机制 原文:http://www.cnblogs.com/ityouknow/p/5603287.html 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构.类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口. 类加载器并不需要等到某个

Java类的定义及其实例化

如果你不了解类和对象的概念,请猛击这里:Java类和对象的概念 类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog{ String name; int age; void bark(){  // 汪汪叫 System.out.println("汪汪,不要过来"); } void hungry(){  // 饥饿 System.out.println("主人,我饿了")

js原型对象与Java类的区别

在我学习Javascript的原型对象时,我总是不自觉地拿Java的类思想来做比较,时间久了,我渐渐认识到二者有巨大的不同. 首先,类是不能直接当方法来运行,它最简便的方式是调用其静态方法:而原型对象本身就是一个方法体,它可以直接运行.二者在构造对象的过程中,js可以扮演两种角色,一个可以将原型对象当方法来使用,才接触js时,都是以这种形式来使用,即万物皆方法体,像c;另一个是模仿面向对象的特性,为原型对象定义属性,运用构造器时,将构造器构造的对象的指针指通过原型链指向原型对象的属性,从而实现面

Java类的设计----Object 类

Object类 Object类是所有Java类的根父类如果在类的声明中未使用extends关键字指明其父类,则默认父类为Object类 public class Person { ... } 等价于: public class Person extends Object {. ... }例: method(Object obj){-}//可以接收任何类作为其参数 Object o=new Person; method(o); ==操作符与equals方法 ==操作符与equals方法的区别: =

java类的生命周期

类的生命周期:加载.连接(验证.准备.解析).初始化.使用.卸载主动引用(有且只有)初始化: 1.new.getstatic.putstatic.invokestatic如果类没初始化,则初始化new关键字实例化对象.读取或设置一个类的静态字段(被final修饰.*已在编译期把结果放入常量池的静态字段除外).调用一个类的静态方法  2.使用java.lang.reflect包的方法对类进行发射调用的时候,如果类没有进行过初始化,则初始化 3.当初始化一个类的时候,父类没初始化,则初始化 4.当虚

Java —类和对象

类和对象 类是对象的类型,是具有相同的属性和方法的一组对象的集合. 定义类 访问修饰符 class 类名 { 数据类型 属性名: 访问修饰符 返回值类型 方法名 {} } 创建对象:类名 对象名 = new 类名(); 使用对象:引用对象的属性:对象名.属性名;引用对象的方法:对象名.方法名(); 可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立. 成员变量和局部变量 成员变量:在类中定义,描述对象将要有什么.可以在本类的方法或其他类的方法中使用.java会给成员变量一个初始

Eclipse或MyEclipse没有在java类文件上显示Spring图标的问题

Eclipse或MyEclipse没有在java类文件上显示接口图标的问题解决办法: 前: 后:

Java类的生命周期详解

引言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大多只是告诉你“怎样做”,但至于“为什么这样做”却不多说,所以造成大家在基础和原理方面的知识比较匮乏,所以笔者今天就斗胆来讲一下这个问题,权当抛砖引玉,希望对在这个问题上有疑惑的朋友有所帮助,文中有说的不对的地方,也希望各路高手前来指正. 首先来了解一下jvm(java虚拟机)中的几个比较重要的内存区域,这几

jsp页面应用Java类

两种方法将Java类应用到jsp页面中: 1. <jsp:useBean id="类实例名字" class="具体的类" scope="page/request/session/application" /><jsp:setProperty name="id的值" property="参数名" value="参数值" />//或者多个参数直对<jsp:get

java 类排序

参考文档:Java排序: Comparator vs Comparable 入门 java类经常面临排序问题,据我所知:java提供comparable和comparator两种比较方式: 1. comparable方法需要排序的类继承comparable接口,重写compareTo函数,但是只能实现一种对比方法(重写compareTo一次),例如: 类定义如下: class Student implements Comparable<Student> { private String nam