Java对象和类菜鸟教程

Java作为一种面向对象的编程语言,支持以下基本概念:

1、类(Class):

2、对象(Object):

3、继承(Inheritance):

4、封装(Encapsulation):

privateStringname;publicStringgetName(){returnname;}5、多态(Polymorphism):

6、抽象(Abstraction):

7、接口(Interface):

8、方法(Method):

9、方法重载(MethodOverloading):

publicclassMathUtils{publicintadd(inta,intb){returna+b;}publicdoubleadd(doublea,doubleb){returna+b;}}本节我们重点研究对象和类的概念。

下图中男孩(boy)、女孩(girl)为类(class),而具体的每个人为该类的对象(object):

下图中汽车为类(class),而具体的每辆车为该汽车类的对象(object),对象包含了汽车的颜色、品牌、名称等。

现在让我们深入了解什么是对象。看看周围真实的世界,会发现身边有很多对象,车,狗,人等等。所有这些对象都有自己的状态和行为。

拿一条狗来举例,它的状态有:名字、品种、颜色,行为有:叫、摇尾巴和跑。

对比现实对象和软件对象,它们之间十分相似。

软件对象也有状态和行为。软件对象的状态就是属性,行为通过方法体现。

在软件开发中,方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。

类可以看成是创建Java对象的模板。

通过上图创建一个简单的类来理解下Java中类的定义:

一个类可以包含以下类型变量:

一个类可以拥有多个方法,在上面的例子中:eat()、run()、sleep()和name()都是Dog类的方法。

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

下面是一个构造方法示例:

对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象需要以下三步:

下面是一个创建对象的例子:

编译并运行上面的程序,会打印出下面的结果:

小狗的名字是:tommy访问实例变量和方法通过已创建的对象来访问成员变量和成员方法,如下所示:

下面的例子展示如何访问实例变量和调用成员方法:

编译并运行上面的程序,产生如下结果:

类有若干种访问级别,并且类也分不同的类型:抽象类和final类等。这些将在访问控制章节介绍。

包主要用来对类和接口进行分类。当开发Java程序时,可能编写成百上千的类,因此很有必要对类和接口进行分类。

在Java中,如果给出一个完整的限定名,包括包名、类名,那么Java编译器就可以很容易地定位到源代码或者类。import语句就是用来提供一个合理的路径,使得编译器可以找到某个类。

例如,下面的命令行将会命令编译器载入java_installation/java/io路径下的所有类

importjava.io.*;一个简单的例子在该例子中,我们创建两个类:Employee和EmployeeTest。

首先打开代码编辑器,把下面的代码粘贴进去,将文件保存为Employee.java。

Java程序都是从main方法开始执行,为了能运行这个程序,必须包含main方法并且创建一个实例对象。

下面给出EmployeeTest类,该类实例化2个Employee类的实例,并调用方法设置变量的值。

将下面的代码保存在EmployeeTest.java文件中。

编译这两个文件并且运行EmployeeTest类,可以看到如下结果:

190***276@qq.com

stinkaroo

LadyLeane

q-b***sn.com

package的作用就是c++的namespace的作用,防止名字相同的类产生冲突。Java编译器在编译时,直接根据package指定的信息直接将生成的class文件生成到对应目录下。如packageaaa.bbb.ccc编译器就将该.java文件下的各个类生成到./aaa/bbb/ccc/这个目录。

import是为了简化使用package之后的实例化的代码。假设./aaa/bbb/ccc/下的A类,假如没有import,实例化A类为:newaaa.bbb.ccc.A(),使用importaaa.bbb.ccc.A后,就可以直接使用newA()了,也就是编译器匹配并扩展了aaa.bbb.ccc.这串字符串。

阿弥托福哦

253***7490@qq.com

为什么JAVA文件中只能含有一个Public类

java程序是从一个public类的main函数开始执行的,(其实是main线程),就像C程序是从main()函数开始执行一样。只能有一个public类是为了给类装载器提供方便。一个public类只能定义在以它的类名为文件名的文件中。

每个编译单元(文件)都只有一个public类。因为每个编译单元都只能有一个公共接口,用public类来表现。该接口可以按照要求包含众多的支持包访问权限的类。如果有一个以上的public类,编译器就会报错。并且public类的名称必须与文件名相同(严格区分大小写)。当然一个编译单元内也可以没有public类。

pxn626

790***000@qq.com

成员变量和类变量的区别

由static修饰的变量称为静态变量,其实质上就是一个全局变量。如果某个内容是被所有对象所共享,那么该内容就应该用静态修饰;没有被静态修饰的内容,其实是属于对象的特殊描述。

不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量。

成员变量和类变量的区别:

1、两个变量的生命周期不同

成员变量随着对象的创建而存在,随着对象的回收而释放。

静态变量随着类的加载而存在,随着类的消失而消失。

2、调用方式不同

成员变量只能被对象调用。

静态变量可以被对象调用,还可以被类名调用。

3、别名不同

成员变量也称为实例变量。

静态变量也称为类变量。

4、数据存储位置不同

成员变量存储在堆内存的对象中,所以也叫对象的特有数据。

静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

static关键字,是一个修饰符,用于修饰成员(成员变量和成员函数)。

特点:

1、想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。

2、被静态修饰的成员,可以直接被类名所调用。也就是说,静态的成员多了一种调用方式。类名.静态方式。

3、静态随着类的加载而加载。而且优先于对象存在。

弊端:

1、有些数据是对象特有的数据,是不可以被静态修饰的。因为那样的话,特有数据会变成对象的共享数据。这样对事物的描述就出了问题。所以,在定义静态时,必须要明确,这个数据是否是被对象所共享的。

2、静态方法只能访问静态成员,不可以访问非静态成员。

因为静态方法加载时,优先于对象存在,所以没有办法访问对象中的成员。

3、静态方法中不能使用this,super关键字。

因为this代表对象,而静态在时,有可能没有对象,所以this无法使用。

什么时候定义静态成员呢?或者说:定义成员时,到底需不需要被静态修饰呢?

成员分两种:

1、成员变量。(数据共享时静态化)

该成员变量的数据是否是所有对象都一样:

如果是,那么该变量需要被静态修饰,因为是共享的数据。

如果不是,那么就说这是对象的特有数据,要存储到对象中。

2、成员函数。(方法中没有调用特有数据时就定义成静态)

如果判断成员函数是否需要被静态修饰呢?

只要参考,该函数内是否访问了对象中的特有数据:

如果有访问特有数据,那方法不能被静态修饰。

如果没有访问过特有数据,那么这个方法需要被静态修饰。

成员变量和静态变量的区别:

1、成员变量所属于对象。所以也称为实例变量。

静态变量所属于类。所以也称为类变量。

2、成员变量存在于堆内存中。

静态变量存在于方法区中。

3、成员变量随着对象创建而存在。随着对象被回收而消失。

静态变量随着类的加载而存在。随着类的消失而消失。

4、成员变量只能被对象所调用。

静态变量可以被对象调用,也可以被类名调用。

所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。

Demetris

150***67161@163.com

类变量类型:

publicclassClassName{publicvoidprintNumber(){inta;}//其他代码}2.成员变量:定义在类中,方法体之外。变量在创建对象时实例化。成员变量可被类中的方法、构造方法以及特定类的语句块访问。

ycxchkj

xch***163.com

类的构造方法

1、构造方法的名字和类名相同,并且没有返回值。

2、构造方法主要用于为类的对象定义初始化状态。

3、我们不能直接调用构造方法,必须通过new关键字来自动调用,从而创建类的实例。

4、Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。

new关键字的作用

1、为对象分配内存空间。

2、引起对象构造方法的调用。

3、为对象返回一个引用。

Lynn

276***577@qq.com

Sometimes,youwanttohavevariablesthatarecommontoallobjects.Thisisaccomplishedwiththestaticmodifier.Fieldsthathavethestaticmodifierintheirdeclarationarecalledstaticfieldsorclassvariables.Theyareassociatedwiththeclass,ratherthanwithanyobject.

lllunaticer

tdl***tju.edu.cn

实例:

2333

135***8036@qq.com

2.初始值不同

成员变量如果没有赋值则是有默认值的,数据类型不同则默认值不同。

3.在一个类中,局部变量可以与成员变量同名,但是局部变量优先,如果非要访问成员变量的属性,则必须使用this.color

this代表当前这个对象,也就是当前谁调用这个方法则这个对象就是谁。

对象是具体的一个实例,如:newStudent();new表示创建一个对象,并在堆内存中开辟一块空间。

引用名称是存放的对象的地址。

tfbyly

905***717@qq.com

内部类:将一个类的定义放在另一个类的定义内部,这就是内部类。

如同一个人是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)

显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类,而心脏又在人体当中,正如同是内部类在外部类当中。

1)不用内部类:

publicclassPerson{privateintblood;privateHeartheart;}publicclassHeart{privateintblood;publicvoidtest(){System.out.println(blood);}}2)使用内部类:

publicclassPerson{privateintblood;publicclassHeart{publicvoidtest(){System.out.println(blood);}}publicclassBrain{publicvoidtest(){System.out.println(blood);}}}内部类优点和缺点:

应用举例

//外部类classOut{privateintage=12;//内部类classIn{publicvoidprint(){System.out.println(age);}}}publicclassDemo{publicstaticvoidmain(String[]args){Out.Inin=newOut().newIn();in.print();//或者采用下种方式访问/*Outout=newOut();Out.Inin=out.newIn();in.print();*/}}运行结果:12

从上面的例子不难看出,内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?

因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。

如同心脏可以直接访问身体的血液,而不是通过医生来抽血。

程序编译过后会产生两个.class文件,分别是Out.class和Out$In.class。

其中$代表了上面程序中Out.In中的那个。

Out.Inin=newOut().newIn()可以用来生成内部类的对象,这种方法存在两个小知识点需要注意:

更多详细内容可参考:

小宝呼呼

hua***aoling66@163.com

对构造函数对引用:

classPerson{publicstaticvoidprt(Strings){System.out.println(s);}Person(){prt("父类·无参数构造方法:"+"APerson.");}//构造方法(1)Person(Stringname){prt("父类·含一个参数的构造方法:"+"Aperson'snameis"+name);}//构造方法(2)}publicclassChineseextendsPerson{Chinese(){super();//调用父类构造方法(1)prt("子类·调用父类”无参数构造方法“:"+"Achinesecoder.");}Chinese(Stringname){super(name);//调用父类具有相同形参的构造方法(2)prt("子类·调用父类”含一个参数的构造方法“:"+"hisnameis"+name);}Chinese(Stringname,intage){this(name);//调用具有相同形参的构造方法(3)prt("子类:调用子类具有相同形参的构造方法:hisageis"+age);}publicstaticvoidmain(String[]args){Chinesecn=newChinese();cn=newChinese("codersai");cn=newChinese("codersai",18);}}运行结果:

samcyang

532***194@qq.com

JAVA和C++一样,若是不定义任何的构造函数,会自动构造;如果定义了任何一个构造函数,就不会再自动构造,需要自己定义全部的构造函数。

Phanio

pen***aw@163.com

错误:CMD编译Java源文件时出现的编码GBK的不可映射字符的错误。

办法:使用javac-encodingUTF-8.java指定编码形式。

原因:由于JDK是国际版的,在编译的时候,如果我们没有用-encoding参数指定JAVA源程序的编码格式,则java.exe首先获得我们才做系统默认采用的编码格式,也即在编译JAVA程序时,若我们不指定源程序文件的编码格式,JDK首先获得操作系统的file.encoding参数(它保存的就是操作系统默认的编码格式,如win2k,他的值为GBK),然后JDK就把我们的JAVA源程序从file.encoding编码格式转化为JAVA内部默认的UNICODE格式放到内存中。之后,javac把转换后的UNICODE格式的文件进行编译成class类文件,此时.class文件是UNICODE编码的,它暂放在内存中,紧接着,JDK将此以UNICODE编码编译后的.class文件保存到操作系统中形成我们见到的.class文件。但我们不加设置就编译时,相当于使用了参数:javac-encodinggbkxx.java,就会出现不兼容的情况。

Ekko404

283***6790@qq.com

类:

classA{}//最简单的类,没有任何属性和行为一个类可以包含以下类型变量:

一个类可以拥有多个方法,在上面的例子中:eat()、run()和sleep()等都是Dog类的方法。

创建对象:

对象:

Aobj=newA();Aobj1=A();Aobj2=newA();构造方法(构造函数)

在创建类的里面用:

public类名(){}public类名(Stringname){}访问实例变量和方法

通过已创建的对象来访问成员变量和成员方法,如下所示:

/*实例化对象*/ObjectreferenceVariable=newConstructor();/*访问类中的变量*/referenceVariable.variableName;/*访问类中的方法*/referenceVariable.methodName();类变量类型:

jidaojiuyou

232***1805@qq.com

简单说下类和对象。

以LOL为例。

首先,比如lol中的英雄,它就是一个类。因为所有的英雄都有对应的属性。例如:

publicclassHero{Stringname;//名字intattackDamage;//物理攻击intabilityPower;//法术强度intarmor;//护甲intmagicResistance;//魔抗floatattackSpeed;//攻击速度intcooldownReduction;//冷却缩减intcriticalStrike;//暴击率intmoveSpeed;//移动速度inthp;//血量intmp;//蓝量}除了属性,英雄还有行为。比如拆塔,坑队友,K头,跳舞等。

publicclassHero{publicvoidDestroyTower(){System.out.println("正在拆塔");}publicvoidKeng(){System.out.println("坑了一下队友");}publicvoidKb(){System.out.println("抢到了一个人头");}publicvoidDance(){System.out.println("正在跳舞");}}对象就是指具体的英雄,比如德玛(garen)。就可以在main方法中new一个对象。

THE END
1.运用Java创建一个dog的类,包括颜色,重量,年龄属性和叫,跑,吃的方法在这个例子中,Dog类有三个属性:color(颜色)、weight(重量)和age(年龄),以及三个方法:bark(叫)、run(跑)和eat(吃)。 在main函数中,创建了一个名为myDog的Dog对象,并为其属性赋值。然后,调用了myDog的bark、run和eat方法,输出了小狗叫、跑和吃的信息。 https://blog.csdn.net/Phantomstranger/article/details/130127486
2.写一个狗类javajava定义一个dog类flybirdfly的技术博客写一个狗类java java定义一个dog类 类:Java类是一个模板,是一类具体事物的描述。小猫、小狗就是动物,那么动物就可以是一个类;狗也是可以是一个类,因为萨摩耶、哈士奇、阿拉斯加都是狗。Java类描述的是一类对象的行为和状态。 对象:Java对象是类的具体实现。如果说小狗是一个类的话,那么一只哈士奇就是这一个类的...https://blog.51cto.com/u_13250/9083156
3.《Java基础入门》课后习题1、Java中的程序代码都必须在一个类中定义,类使用__class___关键字来定义。 2、布尔常量即布尔类型的两个值,分别是_true___和_flase___。 3、Java中的注释可分为三种类型,分别是_单行注释//__、__多行注释_/* */__、文档/注释** */___。 4、Java中的变量可分为两种数据类型,分别是_基本数据...https://m.360docs.net/doc/info-dd95a78ae418964bcf84b9d528ea81c759f52e6e.html
4.OCAJavaSE8程序员认证考试指南(Exam1Z0808)OCP 和 OCM 三个级别。同时, Oracle 认证考试有不同的科目,如 Oracle DBA 认证、 Oracle 网络应用开发人员认证等。而本书是关于 Oracle OCA Java SE 8 程序员认证考试的一本考试 指南。 本书严格遵循了 OCA Java SE 8 程序员认证考试的考试大纲,侧重介绍变量、类和接口的 ...https://blog.itpub.net/26421423/viewspace-2216612/
5.javaclass类型转换我们首先创建了一个Dog类的例子,并将其赋值为Animal类的引用变量。在向下转换之前,我们使用它instanceof操作符进行类型检查,以确保animal引用变量的实际类型是Dog类。只有在类型检查通过后,我们才能进行向下转换操作。在成功的向下转换后,我们可以在Dog类中调用fetch()方法。https://www.tulingxueyuan.cn/tlzx/jsp/4226.html
6.6种Java创建对象的方式总结java在Java中,创建对象可以使用多种方式,本文将详细介绍以下六种创建对象的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起了解一下+ 目录 1. 使用new关键字 new关键字是Java中最常用的创建对象的方式。通过调用类的构造函数,new关键字实例化一个对象。 示例如下: 1 2 3 4 5 6 7 8 9 10 11 ...https://www.jb51.net/article/282598.htm