Java语法笔记(一)


一个.java文件里可以有多个class,但是只能有一个class是public的。.java文件里 可以没有类是public的。包含main的那个类也可以不是public的。

3. .java文件里如果有public的class,那么文件名必须和该类名一致(大小写相关)。如果没有public类,那么文件名也必须和其中某个类(随便哪个都行)相同。

 

 

4. Java程序大小写相关,甚至文件名都是大小写相关的。

5. .java文件的编码必须是ANSI的.

6. Java程序中的每个类,经过编译后会变成一个.class文件,文件名和类名相同。

7. a.java中如果用到了文件b.java中的类,那么不做特殊处理的话, 程序运行时,应确保a.class应该和 b.class在同一个文件夹下[package]。

8. Java没有全局变量和全局函数。所有东西都写在 class里面。

 

数据类型:

1.javaboolean数据类型,没有bool类型

       boolean类型的取值是true或false。boolean和int类型不能互相转换。条件表达式必须是boolean类型的,不能把0当false,非0当true

2.有byte数据类型,byte类型的变量占一个字节, 取值是 -128 – 127。

3. float常量后面要加 'f' 'F',如:

     float y = 0.3f,x = 1.3e-4f;

4.     char类型的变量可以是Unicode字符表中的字符,包括可以是汉字,如 :

    charc = ‘好’; char 为两个字节


5. long类型的变量占8个字节。long类型的常量后面要跟'L''l',如: long a = 0xffffffffffaL;

6.  将精度高的数值赋值给精度低的变量时,必须要进行强制类型转换,不过char类型和int类型可以互相赋值,只要赋给char类型的int值不超过65535;

 

对象

3.      Java 中对象用new创建后,不需要delete。Java虚拟机有垃圾回收机制,定期自动回收没用的对象。

4.      对象间互相赋值会使得两个对象指向(或说是引用)相同的地方

 

数组

  1. Java 中的数组都是对象,有许多属性和方法。比如length属性表示数组元素个数。
  2. 数组定义后并不占有内存,也必须用new运算符创建后才能使用。创建时指定元素个数float gpa[ ];

gpa = new float[300]; //300个元素

  

   也可以定义时直接初始化:

float gpa[ ] =new float[4];

int a [ ] = {1,2,3,4, 5};

  1. System.out.println(a.length);    //输出5
  2. 二维数组的每一行都可以分别初始化,而且每一行的元素个数可以不一样。二维数组的length属性代表其行数,也就是其中一维数组的个数。
  3. 6. 数组是对象,本质是指针。同类型数组之间可以互相赋值。

importjava.util.Arrays; //类似于C++的#incude

public classHelloWorld   {

         publicstatic void main( String args[ ])  {

                   chara[ ] = { 'h','e','k' };

                   charb[ ] = { '1','2','3','4' };

                   a= b; //a b 指向(或称引用)同一个数组,a原来指向的数组被垃圾回收

                   System.out.println(a.length);

                   a[0]= 'a'; //b[0]也变成'a'

                   Strings = Arrays.toString(b);

                   System.out.println(s);

         }//Arrays是Java标准类,能将数组转换成字符串

}

 

 

 

对象的引用与赋值:

Class Arm

Arm a = new Arm(xx);

Arm b = a;

这是对象的赋值,ba是统一个引用实例;

b ==a可以判断为true;

b.equals(a)判断为true

 

Arm b =new Arm();

b.set(a);

这个只是两个对象的内容相同,用b == a判断为false;

b.equals(a)判断为true

 

char类型的的数组可以直接用println输出其全部内容

char a[] ={ 'a','b','c'};

System.out.println(a);  //输出 abc

 

char类型的数组不能如下初始化:
char a[ ] = "this";

 

9. 拷贝数组

System.arraycopy(srcArray,intidx1,destArray,int idx2, int len)

将srcArray从下标idx1开始的len个元素拷贝到destArray从下标idx2开始的地方。destArray必须足够大。

Arrays.copyOfRange(someArray,int from,intto)

将someArray从from开始到to-1的元素复制到一个新数组中并且返回。

 

1.       所有成员函数的函数体都写在

    class {

                   ….
} //此处不需要‘;’

 里面,不能拿出来写。

2. 成员变量可以是本类的对象(因对象本质是指针)

class LinklistNode {

         intn;

         LinklistNodenext;

}

4. 同样存在 “this指针”,当然在Java里不叫指针。在类的方法内可以通过 “ this.成员名”的方式访问成员。总之,C++中的 “->” “::”Java里都是“.”

 

7. 构造方法没有初始化列表。要调用基类的构造方法,就写 super(….);

8. 类派生使用关键字 extends

         Java中的函数,参数都是传值的,没有传引用的。如果参数是对象,则效果和C++中参数是指针的情况一样。【对象传引用】

 

 

包名可以是一个标识符,也可以是多个标识符用"."连接,

package pku;

package pku.eecs.cs;

总之,包名里的一个标识符,就代表一个文件夹。也可以认为包就是一个文件夹。Package可以下嵌套多个package

 

在eclips工程里,编译出来的.class文件都放在工程的bin文件夹下,源程序都放在src文件夹下.源程序文件(.Java)的存放位置与包名的关系,和.class文件存放位置与包名的关系一样。

import语句引入包,可以省去在类前面写包名

import gw1.*;   //gw1里面的类,都不用写包名了

import语句也可以只引入一个类:

import gw1.PackageTest;

一个包对应于一个文件夹,但不包括该文件夹下的子文件夹。例如:

import gw2.*;

使得 gw2文件夹下的类被import进来,但是gw2\subgw1文件夹下的类,并没有被import进来。要import它们,还是需要写:

import gw2.subgw1.*;

 

 

同一个包里的类,不论是否在同一个.java文件中,不论是否是public,都可以互相使用。

只能使用其他包里的 public类,不能使用其他包里的非 public类。

1.  类的成员,前面可以加 public(公有成员),private(私有成员)或protected(保护成员)。

不加这三个标识符,并不缺省为私有,而是称为“友好成员”。

2.       一个类,可以访问同包类对象的公有、友好和保护成员,不可以访问同包类的私有成员

3.      一个类,可以访问异包类对象的公有成员,不能访问异包类对象的保护、私有和友好成员

4.      子类不能访问父类的私有成员。

5、  友好成员和保护成员的区别是:与父类不在同一包中的子类,可以访问父类的保护成员,不能访问父类的友好成员。

判断时,先看同包异包对象,再看是否父类子类。

 

 用 “super.成员名 ”来访问基类的成员;

在构造方法中用“super(….)”调用基类构造方法

如果派生类的构造方法没有调用基类的构造方法,那么等效于用“super();”调用基类的无参构造方法

 

重写基类的方法时,不能缩小方法的可访问范围。比如基类的Function1是public 的,那么派生类中重写的同名同参数表的 Function1,就不能是友好、保护或私有的。

 

Final

  1. final 关键字可以修饰类、成员变量和方法中的局部变量
  1. final关键字修饰的类,不允许有派生类

         finalclass A { }

         A不能有派生类。Java 中的String类,就是final的

  1. final修饰成员变量和局部变量时,作用相当于C++的const,即常量

4.  final成员变量和局部变量必须在声明的时候初始化。

 5. final成员变量必须在声明时初始化或在构造函数中初始化,初始化后,其值不可改变。

class A {

         finalint v = 4;  //声明时初始化

         A(intn) {   }

}

或:

class A {

         final int v;

         A(int n) {v = n;} //构造函数中初始化

}

6.      final局部变量也可以不初始化,但是赋值或创建一次后,就不能修改其值。

7. 一个对象是final的,其含义并不是其成员变量的值不能被修改,而是它不能再指向别的对象,类似于C++ 的

 类型 * const 指针名;

int * const p;

 

abstract

1.      abstract类相当于C++中的抽象类,abstract方法相当于C++的纯虚函数。只有abstract类才能有abstract方法。和C++不同之处在于,abstract类中可以没有abstract方法。

         abstractclass A {

                   abstractvoid func();  //不能写函数体

          }

2.   abstract类不能用new运算符创建对象

        

Interface

接口和类有点像,但是其所有的成员变量都是public且final的(不写public和final也有一样),所有的成员函数都是abstract 且public的(不写public和abstract 也有一样)。例如:

interface A {

         intn = 5;

         voidFunc(int a,int b);

         intPrintInfo();

}

可以定义接口变量,如  :   A a;

但是,不能用new运算符来创建“接口对象”。

2. 接口可以派生出子接口:

interface B extends A {

         doublef = 3.0;

         intCount();

}

接口可以派生出类。从接口派生类,用implements关键字,也称为类“实现”了某个接口:

实现了接口的类,一定要对接口中的全部方法都重写,写成public的,要写出函数体。若有接口的方法没有被重写,则这个类就必须是abstract 的。

 

可以让接口变量指向一个new出来的实现了该接口的类的对象:

interface B {

         intv = 6;  void FuncB();  

}

class E implements B {

         publicvoid FuncB() {

                   System.out.println("inB.FuncB");

         }

}

public class HelloWorld   {

         publicstatic void main( String args[ ])  {

                   B b = new E();

                   b.FuncB();

         }

接口也可以用public来修饰,称为“公有接口”。public 接口可以被任何类实现,非 public接口仅可以被同一个包中的类实现。

 

 

Java中没有多继承。一个类最多只能有一个基类。但是一个类可以在继承一个基类的同时,还实现多个接口(也可以只实现多个接口而不继承任何类)。

classD extends C implements A,B {

         publicvoid Func(int a,int b) { }

         publicint PrintInfo() { return 0; }

         publicvoid FuncB() { }

}

 

1. Java中的方法,除了类方法(静态成员函数)外,都可以认为相当于是C++中的虚函数。

2. Java中多态的规则如下:

         1)通过基类对象,调用基类和派生类都有的同名同参数表的方法时,是多态。该基类对象如果指向的确是基类对象,那么指向的就是基类的方法,如果指向的是派生类对象,那么执行的就是派生类的方法。

         2)通过接口变量,调用接口和实现了该接口的类都有的同名同参数表的方法时,是多态。被执行的是类的方法。

接口存在的目的,就是为了实现多态

 

 

String

String s = "123456";

x = Integer.parseInt(s);

String str = String.valueOf(1233.223);

 

字符串和字节数组 byte d[]字节数组,若干个字节,字节【-128,127】

                   byted[ ] = "abc你我他".getBytes(); //由字符串生成字节数组。

                   System.out.println(d.length);

                   Strings = new String(d,3,2);//从字节数组,生成字符串。

                   System.out.println(s);

 

4. StringBuffer类

String字符串不能修改,StringBuffer可以

StringBuffer str = newStringBuffer("123");

str.append("456");

System.out.println(str);

char c = str.charAt(2);

System.out.println(c);

str.setCharAt(0,'X');

System.out.println(str);

str.insert(2, "abc");

System.out.println(str);

String s1 = "string obj";

str = new StringBuffer(s1);

String s2 = new String(str);

输出:

123456

3

X23456

X2abc3456

 

 

 

 

 

GUI

使用图形界面,需要importjava.swing.*;

 

JComponent类及其派生类的对象叫“组件”

Container类及其派生类的对象叫“容器”

容器上可以添加组件

虽然组件也是容器,但许多组件一般不当做容器用,比如JButton。但JPanel会作为容器使用。

窗口一般从Jframe派生

对话框从Jdialog派生

在一个窗口或对话框上可以添加组件

各种按钮,编辑框,选择框,列表框,菜单,都是组件。

 

 

 

 

往容器上放组件前,要设置布局。布局决定了组件的摆放方式。

class TextWindow extends JFrame {

         JTextFieldtext1,text2;

         JButtonbt;

         publicTextWindow() {

                   init();

                   setBounds(100,100,236,150);

                   setVisible(true);

         }

         voidinit() {

                   setLayout(newFlowLayout()); //设置布局

                   text1= new JTextField("uneditable");

                   text1.setEditable(false);

                   text2= new JTextField(10); //10个字符宽

                   add(text1);

                   add(text2);

                   bt= new JButton("Please Push");

                   add(bt);

         }

 

有些对象上能够发生“事件”,称为“事件源

importjava.awt.event.*;

事件源通过调用一些方法,某个对象注册为自己的监视器,如文本框,可以用

         addActionListener(对象名)

将一个对象注册为自己的监视器。

能作为监视器使用的对象,必须实现某些特定的接口

比如要作为文本框的监视器的对象,必须实现ActionListener 接口。

ActionListener接口有以下方法:

public void actionPerformed(ActionEvent e)

在文本框中有敲回车时,文本框就会创建一个ActionEvent对象,然后以此对象作为参数,调用监视器对象的该方法,通过该参数,就能知道具体发生的事件是什么样的,以及事件发生在哪个源上。

 

事件有不同规定类型,ActionEvent 是其中一种

比如,ActionEvent 有以下方法:

Object getSource(); 取得事件源对象

String getActionCommand() 获取和事件有关的一个字符串

所有的Java对象都是从Object对象派生而来

 

响应鼠标事件,用:

addMouseListener :  添加响应鼠标点击、进出组件事件的监视器

         监视器需要实现  MouseListener接口

MouseListener : 有以下方法:

         publicvoid mouseExited(MouseEvent arg0) ;

         publicvoid mouseEntered (MouseEvent arg0) ;

         publicvoid mousePressed(MouseEvent arg0) ;

         publicvoid mouseReleased(MouseEvent arg0) ;

         publicvoid mouseClicked(MouseEvent arg0) ;

 

addMouseMotionListener :  添加响应鼠标移动和拖动事件的监视器

         监视器需要实现  MouseMotionListener 接口

MouseMotionListener : 有以下方法:

         publicvoid mouseMoved(MouseEvent arg0) ;

         publicvoid mouseDraged (MouseEvent arg0);

 

响应键盘事件,用:

addKeyListener :  添加响应键盘敲击的监视器

         监视器需要实现  KeyListener接口

KeyListener有以下方法:

public void keyTyped(KeyEvent arg0)

public void keyPressed(KeyEvent arg0)

public void keyReleased(KeyEvent arg0)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值