Java基础知识

来源:互联网 发布:淘宝人生txt 久久 编辑:程序博客网 时间:2024/06/14 21:17
 

从Core Java到Thinking in Java
Java是一种跨平台、面向对象、给予网络及支持多媒体的编程语言,并可插入到HTML文档中。
1.在html文档中添加链接,即在<body>标签间插入以下代码:
<applet code=类名.class width=宽度 height=高度></applet>
2.封装是一种将代码及其处理的数据绑定在一起编程机制;
3. 经Javac把每个类都编译成独立的文件,为 类名.class ,它包括可移植的中间语言j-代码。
坐标时按像素点左上角(0,0)处开始计算,以确定何时画图。
4.对象是类的实例,是具有结构和状态的实体,是不被分割的原子单位
5.instanceof()操作符验证存储对象类型,
点号运算符用于选择一个对象或方法
new运算符用于创建对象
垃圾回收自动释放不再被调用的内存空间
按值调用,实参传递给形参
+运算符与concat()方法拼接字符串,str1+”ha!”;str1.concat(str2);
1. 编程模式:
注释:
/* This is a two line comment */
// This is a line comment
/** Java documentation comment */
应用程序模式,如下:
import corejava.*;                   //引用corejava包中本程序用到的类
public class 用户定义的类名{         //定义类
public static void main(String[] args) //void表示方法完成后不返回信息
{
        ---                         //方法体
}
}

如:
public static void main(String[] args){
int n=Console.readInt(“Enter the value of n:”);
for(long i=0;i<=n;i++){
Format.printf(“%d”,i);
Format.printf(“!=%d/n”,factorial(i));
}
}
public static long factorial(long n){
if(n<=1) return 1;
else return n*factorial(n-1);
}
}

Applet 小应用程序编程模式,如下:
import java.awt.Graphics;     //引入java.awt包中的Graphics类
import java.applet.Applet;
public class 用户定义的类名 extends Applet   //用extends定义继承类
{
public void paint(Graphics g) //调用paint方法
{
      ---                      //方法体
}
}

如:
import java.awt.*;
import java.applet.Applet;     // 或import java.applet.*;
import javax.swing.*;
public class CoreJavaApplet extends Applet{
TextField input;
Public void init(){//用init()方法初始化applet所需变量及引用且第一个调用
Jlabel prompt=new Jlabel(“Enter radius of circle”);
input=new TextField(10); //创建TextField对象且为10个字符长
add(prompt);
add(input);         //将Label和TextField放进applet以使之交互
}
public void paint(Graphics g){
try{
String s=input.getText();
Double radius=Double.parseDouble(s);
Double Area=3.14*radius*radius;
g.drawString(“Area of circle is:”+Area,80,100);
showStatus(“Area of circle is:”+Area);
}
catch(NumberFormatException e){ }            //代码块{ --- }
}
public boolean action(Event e,Object o)
{
repaint();
return true;
}
}


2. 语法与语句:
基本输入输出:
基本输入,调用Console类的,如下:
String name=Console.readline(“input your name:”);// 输入字符或字
Console.readDouble(“Enter radius of circle:”);//还有 readInt()
基本输出,如:
System.out.println(“You name is:”+name);
Format.printf(“Your name is:%s/n”,name); //便于格式化输出

用流实现输入与输出:
System.in       标准输入
System.out      标准输出
System.err       标准错误
如:
System.out.println(“Do you want to continue? (y/n)”);
Char ch=(char)System.in.read();
if(ch==’n’||ch==’N’)break;

Math类方法:
sqrt(x)      即算术平方根;      log(x)   即ln(x)
random(x) 即0.0~1.0间随机数;abs(x) 即返回x的绝对值
max(x,y)    min(x,y)   
toRadians(x) 将度转化为弧度;toDegrees(x)   将弧度转化为度
atan(x,y)    即arctan(x/y)
sin(x)   cos(x)   tan(x)     asin(x)    acos(x)     atan(x)
exp(x)      即e的x次幂; pow(x,y)       即x的y次幂
rint(x)     返回x的整数部分
ceil(x)    返回大于等于x的最小整数;floor(x)   返回小于等于x的最大整数   

转义字符:
/n   换行;/t   执行Tab;/b   退格(退回一个字符);/r   光标返回行首
/f    换页;// 输出/;    /’   输出’; /” 输出”;
/ddd   八进制数;/xddd   十六进制数;/uddd   单代码字符

位运算:
&   按位与;|   按位或;^   按位异或;<<   左移;>>   右移;
>>> 带0扩展右移        ~   按位求反

条件语句
if
if else   及其嵌套
switch语句
循环语句
while语句
do while 语句
for语句
跳转语句
break语句,跳出本循环
continue语句,继续下一个循环
用this访问隐藏的静态变量

3. 方法与类。
类是Java的基本构架,先声明、后定义其数据与方法,且主类名与文件名一致,并以 .java 为扩展名。创建类,只创建了一个模板而并未创建实际的对象。只有当一个类是程序运行起点时才须main()方法,而applet就不需main()方法。Object可引用任意类型的变量,Java中每个类及数组都是从Object类扩展或派生的。
在同一作用域中,方法名相同而参数(个数、类型、顺序)不同,则为方法重载,用于对不同类型的数据进行相似的操作。
在子类中重写了超类中的方法体而保持名不变,则为方法重写,以实现动态方法分配使被重写的方法在运行时调用。
继承是一个对象获得另一个对象属性的过程,即从现有类c1派生出新类c2,则c1为超类,而子类c2继承其所有实例变量和方法,并可创建新的数据和方法,从而比超类具有更多的功能。
子类用super(为第一条执行语句)引用超类。
只定义了一个为所有子类共享的一般形式而将细节交给每个子类完成的超类为抽象类。子类必须重写的方法为抽象方法,用abstract声明。
接口是抽象方法的集合,即对象中所有能被外界使用的方法的集合构成对象与外界交互的“界面”。如用接口定义共享常量,文件只需实现该接口即可使用其中的常量。
接口中的方法不包含实体,即接口不提供实现方法,而用interface实现一个接口被多个方法使用的多态性。用implements子句的类实现接口,多个接口用逗号分开。
一个接口可以继承其它接口,但实现接口的类必须实现该接口定义的全部方法,包括从其它接口继承的方法。
方法体内的实体为局部变量,
方法体外的变量中:
由static声明全局变量,
由static final声明符号常量(常大写),且final可防止方法重写即类继承。
用public 修饰可以被所有程序访问
的数据、方法和类,而用private 修饰仅被该类中成员访问的类的成员。

方法即类的专用函数
定义类:
返回类型 方法名(参数表)
{
       ---                //方法体
}
静态方法定义:
public static 返回类型 方法名(参数表)
{
        ---               //方法体
}

方法调用:
方法名(实参表);
对象名.方法名(参数表);
如:
Person(String name,int age){
Name=name;
Age=age;
}
Person person=new Person(“John”,20);
又如:
class Student{
String name;
int age;
boolean sex;
void init(String Name,int Age,boolean Sex){
name=Name;
age=Age;
sex=Sex;
}
String getName(){
return name;
}
int getAge(){
return age;
}
boolean getSex(){
return this.sex;
}
}
Student.aStudent=new Student();
System.out.printin(aStudent.getName());
4.字符串
比较字符串:
==运算符, s1==s2;
equals()方法返回布尔值, s1.equals(s2);
equalsIgnoreCase()忽略大小写返回布尔值,s1.equalsIgnoreCase(s2);
compareTo()方法按字母表比较且返回正值、负值或零,s1.compareTo(s2);
regionMatches()从某处起比较有限个字符,s1. regionMatches(0,s2,0,5);
length()方法获取字符串长度
charAt()方法,获取字符串指定下标的字符。charAt(下标)
subString()方法,从字符串中抽取子字符串
String subString(int beginIndex);
String subString(int beginIndex,int endIndex);
StartsWith()方法和endsWith()方法,测试字符串起始、结尾字符是否与所给相同,返回布尔值
String s=”Core Java”;
Boolean b=s. StartsWith(“c”);
System.out.println(b);
System.out.println(s.endsWith(“c”));
System.out.printin();
indexOf()方法和lastIndexOf()方法,分别正向、逆向测试并返回指定字符在字符串中下标,若无则返回-1.
Str.indexOf(“L”);
Str.indexOf(“A”,0);//从指定下标0开始测试
Replace()替换字符串中字符。String replace(char oldChar,char newChar);
toLowerCase()方法和toUpperCase()方法,将所用字符转化为小写或大些状态
trim()方法,剪除原字符串的前导和尾部空格再返回
hashCode()方法,测试字符串哈希码。

字符串和基本类型的转换,Java.lang软件包。
字符串转换为整型:
int i=Integer.parseInt(“918”);

Integer j=new Integer(“918”);
int i=d.intValue();
字符串转换为浮点型(float或double)
double d=Double.parseDouble(“918”);

double d=new double(“918”);
double x=d.doubleValue();

double x=new Double((“918”).trim()).doubleValue();
使用DoubleFormat类的parseff,对于Number类型数据
DecimalFormat df=newDecimalFormat();
Number n=df.parse(s);

从基本类型转化为字符串。
valueOf()方法,String si=String.valueOf(918);
ToString()方法,
String si=Integer.toString(918);
String si=Integer.toString(918,2);以二进制表示918


4. 数组
数组的创建实际是在运行期间进行的
String[] array=new String[];//创建字符串型数组
float[] array=new int[10];//创建浮点型数组
int[] array={3,4,5,7};
创建对象数组,如按钮对象数组:
Button[] arrayOfButtons=new Button[5];
for(int i=0;i<arrayOfButtons.length;i++)
arrayOfButtons[i]=new Button();
使用动态数组扩展技术给数组以其所需的任意长度,如将10个空间的数组扩展为12个
int[] b=a;//保存a
a=new int[12]; //扩展内存
for(int i=0;i<10;i++)
a[i]=b[i];//恢复数据

定义数组及调用,如冒泡排序:
public static void Sort()
{
for(int pass=1;pass<a.length;pass++)
for(int i=0;i<a.length-1;i++)
if(a[i]>a[i+1])
{
int hold=a[i];
a[i]=a[i+1];
a[i+1]=hold;
}
}


汉诺塔问题
import corejava.*;
public class HanoiTower
{
public static void main(String[] args)
{
char c1=’A’,c2=’B’,c3=’C’;
int m=Console.readInt(“Enter the number of disks:”);
System.out.println(“/nthe step to moving”+m+”disks:”);
HanoiTowers(m,c1,c2,c3);
System.out.println();
}
public static void HanoiTowers(int n,char x,char y,char z)
{
if(n<1)System.out.println(“No dissk present on tower.”);
else{
if(n==1)System.out.println(“Move top disk#”+n+”on tower”+x+
“to tower”+y);
else{
HanoiTowers(n-1,x,z,y);
System.out.println(“Move top disk#”+n+”on tower”+x+
”to tower”+y);
Hanoitowers(n-1,z,y,x);
}
}
}
}

6.软件包
软件包java.lang.system类
arrayCopy(s1,x,s2,y,n)方法,从s1的x处起向s2的y起复制n个数组
软件包java.lang.Object类
getClass()方法,返回对象有关信息的class对象
clone()方法,创建克隆实例
toString()方法
软件包java.lang.Throwable
Throwable()方法,构造一个不具有特定详细信息的Throwable对象
Throwable(String message)方法,构造具有特定信息的Throwable对象
String getMessage()方法,获取Throwable对象的详细信息

软件包java.text.NumberFormat中方法
getCurrencyInstemcd()       将货币数转化为字符串以便于输出
getNumberInstemcd()        将货币数转化为格式数
getPercentInstemcd()         将百分数转化为字符串以便于输出
setMaximumFractionDigits() 设置小数位数最大值
setMinimumFractionDigits() 设置小数位数最小值
setMaximumIntegerDigits()   设置整数位数最大值
setMinimumIntegerDigits()   设置整数位数最小值
软件包java.text.DecimalFormat中方法,自定义数据输出格式,如:
doube d=Console.readDouble();
double x=d/3.0;
//运用软件包java.text.NumberFormat中方法
NumberFormat nf=NumberFormat.getNumberInstance();
String fx=nf.format(x);
System.out.println(fx);
//运用软件包java.text.DecimalFormat中方法,自定义数据输出格式
DecimalFormat.df=new DecimalFormat(“$,##0.00”);
String fx=df.format(x);
System.out.println(fx);

用java.math中的BigInteger和BigDacimal类及其方法处理大数
a.add(b); //a+b
c.multiply(b.add(BigInteger.valueOf(2))); //d=c*(b+2)


软件包java.util.Vector
size()方法,返回向量当前元素个数
Vector()方法,创建空向量
Vector(n)方法,创建能容纳n个元素的空向量
Vector(n,m)方法,创建初始容量为n,容量增量为m的空向量
add(元素)方法,在向量末尾增加一个元素
add(index,obj) 上移一个元素以插入一个新元素
remove(index)方法,删去指定下标的元素并将以上元素下移
setSize(n)方法,设置向量元素数为n
trimToString(),将向量容量减为当前尺寸
get(index)方法,获取指定下标元素内容
set(index,obj)方法,重构指定下标的元素内容
copyInto(数组名)方法,将变量的所用元素构造为指定数组
软件包java.util.date,如:
data1=new Date();
System.out.println(“Date1:”+date1);
Data2=new Date(96,8,14,8,30);//年月日时秒
System.out.println(“Date2:”+date2);
软件包java.util.StringTokenizer类,用于从一个大数列串中提取定界的字符串。
StringTokenizer(String str,String delin)  
// str为从该标记读的输入字符串,delin为包含定界符的字符串。
StringTokenizer(String str)
//构造一个具有默认定界符 /t/n/r 的字符串标记
String nextToken() //返回下一个标记
String nextToken(String delin) //转换到新的定界符后返回下一个标记
boolean hasMoreTokens() //如果存在更多标记则返回true
boolean createNewFile() //创建File对象子目录
boolean mkdir() //创建子目录
boolean mkdirs() //创建父目录
boolean renameTo() //重命名文件
boolean setlastModified(long time)
boolean setReadOnly()
intCountTokens() //返回仍在字符串中的标记个数
File listRoot() //返回根文件的File对象数组
URL toURL()

软件包java.io.File类
public File(String filename)
public File(String path,String filename)
public File(File dir,String filename)
boolean canRead() 指名文件当前是否可读
boolean canWrite() 指名文件是否可写或只读
boolean delete() 删除文件
boolean exits() 文件目录是否存在
boolean isFile() 检查是否是文件
boolean isDirectory()
boolean isHidden()
static boolean createTempFile(String prefix,String suffix,File directory)
void deleteOnExit() 虚拟机关闭时删除文件
String[] list(FilenameFilter filter)
String getName() 以字符串形式返回文件名
String getParent()以字符串形式返回父目录
String getAbsolutePath() 以字符串形式返回文件绝对路径
String getCanonicalPath() 以字符串形式返回文件规范路径
File getCanonicalFile() 以File对象形式返回文件规范路径
File getparentfile()以File对象形式返回文件目录
File getPath()
long lastModified() 返回最近修改文件的时间

 

 

 

 


7.异常处理,以捕获和处理异常
所有异常均由Throwable遗传,Error层描述
Java运行时系统内部错误或资源耗尽,用户不
应抛出这类异常;Exception层中,从
RuntimeException继承的异常包括坏的
强制类型转换、数组访问出界、空指针
访问,从I/O等的错误继承的异常包括
试图读过一个文件结束、试图打开一个
畸形URL、试图找到一个没有表示存在类的字符串类对象。
从RuntimeException继承的异常:
ArithmeticException               除零/溢出异常
NumberFormatException           字符串到数组的非法转换
IndexOutOfBoundsException        数组或字符串的非法下标
NegativeArraySizeException        试图创建负长度的数组
NullpointerException              试图非法使用一个null引用
OutOfMemoryException           没有足够的内存分配给新对象
SecurityException                运行时安全性破坏
StackOverflowException          系统没有栈空间
StringIndexOutOfBoundsException 试图存取字符串中不存在的字符位置
从IOException继承的异常:
java.io.EOFException            在输入完成之前文件结束
java.io.FileNotFoundException     未找到要打开的文件
java.io.IOException              包含大部分I/O异常
InterruptedException             中断异常,通过Thread.sleep方法抛出

被检测的异常必须在throws子句中处理或列出。当方法被调用,可能直接或间接抛出一个标准的被检测的异常,而用catch块处理或显示地指出。
Finally块是try块中最后执行且一定要执行的子句,故可清理try块内创建的某些对象。
throw子句用于抛出、传播一个异常。
若try块内某代码抛出catch()子句中指定类型的异常,则程序跳过try块其余代码而执行catch()子句中的处理代码;若try块没有抛出异常,则程序跳过catch()子句。如:
try{
---                   //正常执行的代码
}
catch(异常类型 e){
---                   //异常处理
}
---                   //更多catch()语句

 


如:
import corejava.*;
class DivideByZeroException{
public static void Divider(int a,int b){
try{
int result=a/b;
Format.printf(“Result=%d/n”,result);
}
catch(ArithmeticException e){
System.out.println(“Error:Divider is zero!/n”);
}
}
}
class DivideByZero{
public static void main(String[] args)throws Exception{
int a=Console.readInt(“Enter an integer:”);
int b=Console.readInt(“Enter an integer:”);
DivideByZeroException obj=new DivideByZeroException();
Obj.Divider(a,b);
}
}


x.
基本流类的使用(DataInputStream,DataOutputStream),如:
DataInputStream dis=new DataInputStream(System.in); //创建流对象
String s=dis.readLine(); //调用流对象
DataOutputStream a=new DataOutputStream(System.out);
Int a=dos.size(); //输出数据个数
Dos.flush; //输出缓冲区全部数据

BufferedReader(Reader in)    使用默认尺寸输入缓冲区
int read()                  读入单个字符并作为整型返回
String readLine()            读入一行文本
boolean ready()             确定流是否准本就绪
void close()                关闭流

InputStreamReader类,读取字节并转换为字符,如:
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));

InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader in=new BufferedReader(isr);
String s=in.readLine();