java定义⼀个结构_java类的结构(属性、⽅法、构造函数)⼀、类的定义形式
类定义的⼀般形式如下
[类定义修饰符] class
{  //类体
[成员变量声明] [构造函数]
[成员⽅法]
java接口有没有构造方法
}
前⾯说过,在描述java语法时,⽅括号中的内容都是可以省略掉的。实际上任何程序设计相关语法都是如此,这是国际通⾏的标准。那么,要定义⼀个最简单的类就是如下的写法:
class Test
{
}
这个类因为类体没有包含任何内容,所以什么也不⼲,同时如果直接调试该程序,可以编译,但是运⾏错误,提⽰错误信息如下:“错误:在类 Test 中不到主⽅法, 请将主⽅法定义为:  public static void main(String[] args)”。
为什么会出现这个错误呢?因为讲过前⾯,⼀个java程序或者说⼀个java项⽬,必须有⼀个主类(主类内容接下来会讲),主类必须有⼀个主⽅法,主⽅法就是程序的⼊⼝,即程序⾸先是从主类的主⽅法中开始运⾏的,所以运⾏该程序⾃然会提出错误信息。
⼆、类的定义解释
1、类的定义:  类的定义通过关键字class来实现,所定义的类名应符合标识符的规定。类的名字必须由⼤写字母开头⽽单词中的其他字母均为⼩写;如果类名称由多个单词组成,则每个单词的⾸字母均应为⼤写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应⼤写,如:XMLExample。还有⼀点命名技巧就是由于类是设计⽤来代表对象的,所以在命名类时应尽量选择名词。
2、类定义修饰符 修饰符:修饰符可以省略,也可以是public, protected, private, static, final,其中public、protected , private三个最多只能出现其中之⼀,可以与static, finaf组合起来修饰属性。
3、成员变量声明
成员变量是类的属性,声明的⼀般格式为:
[变量修饰符]
变量修饰符:public、protected、private、和默认(frieddlly)。4、构造函数⼀般我们讲的“函数”就是“⽅法”,构造函数是⼀个特殊的函数,虽然在类定义的过程中⽤⽅括号括起来,即我们可以不写构造函数,但是java系统会默认⾃动为每个类⽣成⼀个缺省的不带任何参数的构造函数,在创建对象时系统会调⽤缺省的构造函数。如果程序中定义了构造函数,系统将不再提供该缺省的构造函数。构造函数具有如下特点:(1)构造⽅法的⽅法名必须与类名相同,其它⽅法不能和类名相同。
(2)构造⽅法没有返回类型,也不能定义为void,在⽅法名前⾯不声明⽅法类型。
(3)构造⽅法的主要作⽤是完成对象的初始化⼯作,它能够把定义对象时的参数传给对象的域。
(4)构造⽅法不能由编程⼈员调⽤,⽽由系统调⽤。
(5)⼀个类可以定义多个构造⽅法,如果在定义类时没有定义构造⽅法,则编译系统会⾃动插⼊⼀个⽆参数的默认构造器,这个构造器不执⾏任何代码。
(6)构造⽅法可以重载,以参数的个数,类型,或排列顺序区分。
使⽤⽆参数构造函数的例⼦
class Test {
String name;
Test(){
name="韦⼩宝";
}
public static void main(String[] args){
Test t1=new Test();
System.out.println(t1.name);
t1.name="康熙";
System.out.println(t1.name);
}
}
执⾏程序,输出结果如下:韦⼩宝康熙
在程序中并没有对对象 t1的name变量进⾏赋值,⽽打印输出 t1.name 输出结果是“韦⼩宝”,此时Test类的构造函数中对name变量进⾏了初始化,输出的就是初始化的值;⽽对t1对象的name属性进⾏了赋值后,此时输出结果就是重新赋值后的值,即“康熙”。使⽤有参数构造函数的例⼦
class Test {
String name;
Test(){
name="韦⼩宝";
}
Test(String myName){
this.name=myName;
}
public static void main(String[] args){
Test t1=new Test();
System.out.println(t1.name);
Test t2=new Test("康熙");
System.out.println(t2.name);
}
}
执⾏程序,输出结果如下:韦⼩宝康熙
5、成员⽅法成员⽅法定义的类的操作和⾏为,⼀般形式为:
[⽅法修饰符] ([])
⽅法体
}
成员⽅法修饰符主要有public、private、protected、final、static、abstract和synchronized七种,前三种的访问权限、说明形式和含义与成员变量⼀致。
与成员变量类似,成员⽅法也分为实例⽅法和类⽅法。如果⽅法定义中使⽤了static ,则该⽅法为类⽅法。public static void main(String [] args)就是⼀个典型的类⽅法
三、类的修饰符及其访问范围
前⾯说了修饰符,但是没有说起含义,这⾥讲解⼀下 常见的类访问修饰符:
可见度
public
protected
private
缺省
同⼀类中可见
同⼀包中对⼦类可见
同⼀包中对⾮⼦类可见
不同包中对⼦类可见
不同包中对⾮⼦类可见
关于包、⼦类概念之后讲解。
Java程序在定义类时,除了使⽤class关键字标识之外,还可以在class之前增加若⼲类的修饰符来修饰限定所定义的类的特性。类的修饰符分为访问控制符和⾮访问控制符两⼤类。修饰符之间的先后排列次序对类的性质没有任何影响。
⼀)⾮访问修饰符。
1,  抽象类:
凡是⽤abstract修饰符修饰的类被称为抽象类。抽象类就是没有具体对象的概念类。
抽象类是⼀种经过优化的概念组织⽅式:把共同特点抽象出来;其后在描述和处理某⼀种具体对象时,
就只需描述不同的特殊之处。这种组织⽅式使得所有的概念层次分明,简洁洗练,⾮常符合⼈们⽇常的思维习惯。
由于抽象类是它的所有⼦类的公共属性的集合,所以使⽤抽象类的⼀个优点就是可以充分利⽤这些公共属性来提⾼开发和维护程序的效率。
值得⼀提的是,⾯向对象技术是要⽤更接近于⼈类思维⽅式的⽅法来处理实际问题,抽象类的设⽴就是这种思想的具体体现之⼀,它是模仿⼈类的思维模式的产物。
2,最终类:
如果⼀个类被final修饰符所修饰和限定,说明这个类不可能有⼦类。
被定义为final的类通常是⼀些有固定作⽤、⽤来完成某种标准功能的类。如Java系统定义好的⽤来实现⽹络功能的InterAddress、Socket 等类都是final类。
abstract和final修饰符不能同时修饰⼀个类,因为abstract类⾃⾝没有具体对象,需要派⽣出⼦类后在创建⼦类的对象;⽽final类不可能有⼦类。这样放在⼀起修饰就没有意义了。
3,有些类的修饰符也可以⽤来修饰类中的域或⽅法:
(1)    域:是类和对象的静态属性,定义域的操作就是说明变量或创建对象的操作。
<1> 静态域:
⽤static修饰符修饰的域是仅属于类的静态域。静态域是类中每个对象共享的域。他们是类的域,不属于任何⼀个类的具体对象。是⼀个公共的存储单元,任何⼀个类的对象访问它时,取到的都是相同的数值。
<2> 静态初始化器:
静态初始化器是由关键字static引导的⼀对⼤括号括起的语句组。作⽤是:在加载时,初始化类的静态域。
与构造函数相同,他们都是⽤来完成初始化的⼯作,但是静态初始化器与构造函数有三点不同:
①构造函数是对每个新创建的对象初始化,⽽静态初始化器是对类⾃⾝进⾏初始化。
②构造函数是在⽤new运算符产⽣新对象时由系统⾃动执⾏,⽽静态初始化器则是在它所属的类加载到内存时由系统调⽤执⾏。
③不同于构造函数,静态初始化器不是⽅法,没有⽅法名、返回值和参数列表。
<3> 最终域:
⽤final修饰的域,实际上就是Java中的常量。
⽤final修饰符说明常量时,需要注意以下⼏点:
①需要说明常量的数据类型。
②需要同时指出常量的具体取值。
③因为所有类对象的常量成员,其数值都固定⼀致,为了节省空间,常量通常声明为static。
<4> 易失域:
如果⼀个域被volatile修饰符所修饰,说明这个域可能同时被⼏个线程所控制和修改,即这个域不仅仅被当前程序所掌握,在运⾏过程中可能在其他未知的程序操作影响和改变该域的取值。在使⽤当中应该特别注意。
通常,volatile⽤来修饰接受外部输⼊的域。如表⽰当前时间的变量将系统的后台线程随时修改,以保证程序中取到的总是最新的当前系统时间,所以可以把它定义为易失域。
(2)⽅法:是类的动态属性,标志了类所具有的功能和操作。⼩括号是⽅法的标志。
<1> 抽象⽅法:
修饰符abstract修饰的抽象⽅法是⼀种仅有⽅法头,⽽没有具体的⽅法体和操作实现的⽅法。使⽤抽象⽅法的⽬的是使所有的⼦类,对外都呈现⼀个相同名字的⽅法,是⼀个统⼀的接⼝。所有的抽象⽅法,都必须存在于抽象类之中。
<2> 静态⽅法:
⽤static修饰符修饰的⽅法,是属于整个类的类⽅法,不⽤的是对象或实例的⽅法。调⽤这种⽅法时,应该使⽤类名作前缀;这种⽅法在内存中的代码段将随着类的定义⽽分配和装载,不被任何⼀个对象专有;只能处理属于整个类的成员变量。
<3> 最终⽅法:
⽤final修饰符修饰的类⽅法。功能和内部语句不能再更改的⽅法,不能再被继承。
注意:所有已被private修饰符限定为私有的⽅法,以及所有包含在final类中的⽅法,都被缺省地认为是final的。
<4> 本地⽅法:
⽤native修饰符声明其他语⾔书写⽅法体并具体实现⽅法功能的特殊的⽅法。这⾥的其他语⾔包括C/C++/FROTRAN/汇编等。由于native的⽅法的⽅法体使⽤其他语⾔在程序外部写成,所以所有的native⽅法都没有⽅法体,⽽⽤⼀个分号代替。
<5> 同步⽅法:
如果synchronized修饰的⽅法是⼀个类的⽅法(即static的⽅法),那么在被调⽤执⾏前,将把系统类Class中对应当前类的对象加锁。如果synchronized修饰的是⼀个对象的⽅法(未⽤static修饰的⽅法),则这个⽅法在被调⽤执⾏前,将把当前对象加锁。Synchronized修饰符主要⽤于多线程共存的程序中的协调和同步。
⼆)访问控制符。
访问控制符是⼀组限定类、域或⽅法是否可以被程序⾥的其他部分访问和调⽤的修饰符。类的访问控制符只有⼀个public,域和⽅法的访问控制符有四个,分别是public、private、protected、private protected,另外还有⼀种没有定义专门的访问控制符的缺省情况。
1,  公有访问控制符public:
Java的类是通过包的概念来组织的,包⽒类的⼀个松散的集合。处于同⼀个包中的类可以不需要任何说明⽽⽅便的互相访问和引⽤,⽽对于不同包中的类,则不⾏。但当⼀个类被声明为public时,他就具有了被其他包中的类访问的可能性,只要这些其他包中的类在程序中使⽤import语句引⼊public类,就可以访问和引⽤这个类。
类中被设定为public的⽅法是这个类对外的接⼝部分,避免了程序的其他部分直接去操作类内的数据,这实际就是数据封装思想的体现。
每个Java程序的主类都必须是public类,也是基于相同的原因。
⽤public修饰的类的域称为公共域。如果公共域属于公共类,则它能被所有的其他类所引⽤。public修饰符会造成安全性的数据封装性下降,所以⼀般应减少public域的使⽤。
2, 缺省访问控制符:
缺省访问控制权规定,该类只能被同⼀个包中的类访问和引⽤,⽽不可以被其他包中的类使⽤,这种访问特性⼜称为包访问性。
同样道理,类内的域或⽅法如果美育访问控制符来限定,也就具有包访问性。
简单说,定义在同⼀个程序中的所有类属于⼀个包。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。