java语法1

.000000static void main(String args[])

- 创建对象

Box mybox; // declare reference to object
mybox = new Box(); // allocate a Box object
第一行声明了mybox,把它作为对于Box类型的对象的引用。当本句执行后,mybox 包
含的值为null,表示它没有引用对象。这时任何引用mybox的尝试都将导致一个编译错误。
第二行创建了一个实际的对象,并把对于它的引用赋给mybox 。现在,你可以把mybox作为Box的对象来使用。但实际上,mybox仅仅保存实际的Box对象的内存地址。
注意:那些熟悉C/C++语言的读者,可能已经注意到了对象的引用看起来和指针类似。这种怀疑实质上是正确的。一个对象引用和内存指针类似。主要的差别(也就是Java安全的关键)是你不能像实际的指针那样来操作它。这样,对于对象引用,你就不能像指针那样任意分配内存地址,或像整数一样操作它。

刚才已经解释过,new运算符动态地为一个对象分配地址。它的通用格式如下:
class-var = new classname( );
其中,class-var 是所创建类类型的变量。classname 是被实例化的类的名字。类的后面跟的圆括号指定了类的构造函数。构造函数定义当创建一个类的对象时将发生什么。构
造函数是所有类的重要组成部分,并有许多重要的属性。大多数类在他们自己的内部显式地定义构造函数。如果一个类没有显式的定义它自己的构造函数,那么Java将自动地提供
一个默认的构造函数。对类Box的定义就是这种情况。现在,我们将使用默认的构造函数。
不久,你将看到如何定义自己的构造函数。

对象之间赋值

Box b1 = new Box();
Box b2 = b1;
你可能认为,变量b2被赋值为变量b1对象引用的一个拷贝。也就是,你可能认为b1和b2引用的是不同的对象,但实际情况却相反,b1和b2将引用同样的对象。将b1赋值给b2并没有分配任何内存或对原对象做任何部分的拷贝。由于它们是同一个对象,因此通过变量b2对对象的改变也将影响b1所对应的对象。
注意:当你将一个对象引用赋值给另一个对象引用时,你并没有创建该对象的一个拷贝,而是仅仅对引用的一个拷贝。
对象参数的最普通的使用涉及到构造函数。你经常想要构造一个新对象,并且使它的初始状态与一些已经存在的对象一样。为了做到这一点,你必须定义一个构造函数,该构造函数将一个对象作为它的类的一个参数。例如,下面版本的Box允许一个对象初始化另外一个对象:

// Here,Box allows one object to initialize another.
class Box {
    
    
double width;
double height;
double depth;
// construct clone of an object
Box(Box ob) {
    
     // pass object to constructor
width = ob.width;
height = ob.height;
depth = ob.depth;
}
Box(double w,double h,double d) {
    
    
width = w;
height = h;
depth = d;
}
  • Java的main函数
    public static void main(String[] args) {
    }
    }

首先,public 修饰符 main方法是一个公开的方法。static 静态的 Main方法是一个静态的方法。

java中规定,直接被调用的方法都是静态的

其次 main方法拥有一个字符串类型的数组作为参数 那个 [ ] 可以放到括号里头的任何地方。对于JAVA来说 定义数组比较随意。名称一般是args,但是也可以改成别的你喜欢的名字。main和其他的方法一样,只不过功能是程序类的入口而已。

Args[ ] 数组的作用是接受命令行的参数,然后在程序运行的时候进行参数的传递。在使用是可以直接像用数组那样来用。如果不传递参数,则参数为空。

如果你有C++编程经验请注意,类的声明和方法的实现要存储在同一个地方并且不能被单独定义。由于所有类的定义必须全部定义在一个单个的源文件中,这有时会生成很大的.java文件。在Java中设计这个特征是因为从长远来说,在一个地方指明,定义以及实现将使代码更易于维护。

超类变量可以引用子类对象

超类的一个引用变量可以被任何从该超类派生的子类的引用赋值

class RefDemo {
    
    
public static void main(String args[]) {
    
    
BoxWeight weightbox = new BoxWeight(3, 5, 7, 8.37);
Box plainbox = new Box();
double vol;

这里,weightbox是BoxWeight对象的一个引用,plainbox是Box对象的一个引用。既然
BoxWeight是Box的一个子类,允许用一个weightbox对象的引用给plainbox赋值。
当一个子类对象的引用被赋给一个超类引用变量时,你只能访问超类定义的对象的那一部分.
子类可以调用超类中定义的构造函数方法,用super的下面形式:
super(parameter-list);
super( ),
。当一个子类调用,它调用它的直接超类的构
super( )造函数。这样,
总是引用调用类直接的超类。这甚至在多层次结构中也是成立的。
,还有super()必须是子类构造函数中的第一个执行语句
类层次结构中,构造函数以派生的次序调用,从超类到子类。而且,尽管super( )必须是子类构造函数的第一个执行语句,无论你用到了super( )没有,这个次序不变。如果super( )没有被用到,每个超类的默认的或无参数的构造函数将执行。

方法覆盖仅在两个方法的名称和类型声明都相同时才发生。如果它们不同,那么两个方法就只是重载

c++和java的区别

· Java不再支持操作符重载。操作符重载在某些情况下造成类C++程序的含糊不清,
Java的设计人员感觉它带来的麻烦要比它带来的好处多。
· Java不再包括预处理,也不再支持预处理指令。预处理在C++语言中已经不如在C中那么重要,Java的设计者认为是彻底消除预处理的时候了。
· Java不支持自动的类型转换,因为这种类型转换导致精度降低。例如当从长整型转换为整型时,必须显式强制执行类型转换。
· 在Java中的代码必须封装在一个或多个类中。因此Java中不再包含所谓的全局变量或全局函数。
· Java不支持多重继承,即不允许一个子类继承多个父类。
· 虽然Java支持构造函数,但不再支持析构函数。但是,Java增加了finalize( )函数。
· Java不再支持typedef。
· Java的接口与C++的抽象类相似(C++中的抽象类是包括至少一个纯虚函数的类)。
例如,C++的抽象类和Java的接口都不能创建实例。两者都用于指定一个子类实现的一致接口。两者之间最大的不同之处在于接口更清晰的表明了这个概念。
· Java和C++都支持布尔类型的数据,但Java实现true和false的方式和C++不同。在C++中,true是非零值,false是零。在Java中,true和false都是预先定义好的常量,而且是一个布尔表达式能得到的惟一的两个值。虽然C++也定义了true和false,并指定为布尔变量,但C++自动将非零值转换为true,零值转换为false。这种情况在Java中不会出现。

Swing

Swing图形界面类

是AWT的扩展,它提供了更强大和更灵活的组件集合。

除了我们已经熟悉的组件如按钮、复选框和标签外还包括许多新的组件,如选项板、滚动窗口、树、表格。许多一些开发人员已经熟悉的组件,如按钮,都增加了新功能。而且,按钮的状态改变时按钮的图标也可以随之改变。

Java提供了把类名空间划分为更多易管理的块的机制。这种机制就是包。包既是命名机制也是可见度控制机制。
你可以在包内定义类,而且在包外的代码不能访问该类。这使你的类相互之间有隐私,但不被其他世界所知。

多个文件可以包含相同package声明。package声明仅仅指定了文件中定义的文件属于哪一个包。它不拒绝其他文件的其他方法成为相同包的一部分。多数实际的包伸展到很多文件。
你可以创建包层次。为做到这点,只要将每个包名与它的上层包名用点号“.”分隔开就可以了。一个多级包的声明的通用形式如下:
package pkg1[.pkg2[.pkg3]];
包层次一定要在Java开发系统的文件系统中有所反映。例如,一个由下面语句定义的包:
package java.awt.image;
需要在你的UNIX、Windows或Macintosh文件系统的java/awt/image, java\awt\image或java:awt:image中分别保存。一定要仔细选用包名。你不能在没有对保存类的目录重命名的情况下重命名一个包。

猜你喜欢

转载自blog.csdn.net/qq_41358574/article/details/111292250