随笔 - 26  文章 - 2  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  1. PrintStream myout = new PrintStream(new FileOutputStream(new File("D:/log.log")));        
  2. System.setOut(myout);         
  3. System.setErr(myout);
posted @ 2011-11-18 00:15 Java_liyadong 阅读(232) | 评论 (0)编辑 收藏
     摘要: 类与对象 【学习目标】本章主要介绍类类型的定义、构造函数与析构函数的定义与作用、友元函数与友元类的声明与作用、派生类的定义与作用、虚函数和多态性的概念、静态数据成员的声明与定义、模板类的定义与实例化等内容。通过本章的学习,要求同学们:掌握类的概念,类类型的定义格式,类与结构的关系,类与操作符重载,类的成员属性,类的封装性,类的继承性,构造函数和析构函数的作用,this指针的含义,类对象的...  阅读全文
posted @ 2011-10-09 22:03 Java_liyadong 阅读(309) | 评论 (0)编辑 收藏
     摘要: 1 类和结构类和结构可以看作是创建对象的模板。每个对象都包括数据,并提供处理和访问数据的方法。类定义了每个对象(实例)包含什么样的数据与功能1.1封装“封装”有时被称为面向对象的编程的第一个支柱或原则。根据封装的原则,类或结构可以指定其每个成员对于该类或结构外部的代码的可访问性。可将无意在类或程序集外部使用的方法和变量隐藏起来,以减小编码错误或遭恶意利用的可能性。1.2&n...  阅读全文
posted @ 2011-10-09 21:58 Java_liyadong 阅读(349) | 评论 (0)编辑 收藏
1.变更的概念
    变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。根据所存储的数据类型的不同,有各种不同类型的变量。变量名代表这块内存中的数据 。
2.java的变量类型
java编程基础-变量及变量的作用域
3.变量字节大小及有效取值范围
byte占用一个字节,数字大小为-27—27-1
short占用两个字节,数字大小为-215—215-1
int占用四个字节,数字大小为-231—231-1
long占用八个字节,数字大小为-263—263-1
float占用四个字节,数字大小为1.4E-45~3.4E+38 , -1.4E-45~-3.4E+38 。用二进制的指数形式表示一个浮点数的格式,如:101*22  , 101*2-3
double占用八个字节,数字大小为4.9E-324~1.7E+308, -4.9E-324~-1.7E+308 。
char占两个字节,数字大小为0—216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。
Boolean占一个字节,其取值只有两个,true和false。
4.基本数据类型之间的转换

自动类型转换(也叫隐式类型转换)

实现这种转换要满足两个条件,第一是两种类型彼此兼容,第二是目标类型的取值范围大于源类型。如,当byte型向int型转换时,由于int型取值范围大于byte型,就会发生自动转换。所有的数字类型,包括整型和浮点型彼此都可以进行这样的转换。如:

byte b=3;

int x=b;
强制类型转换(也叫显式类型转换)

当两种类型彼此不兼容,或目标类型取值范围小于源类型时,自动转换无法进行,这时就需要进行强制类型转换。强制类型转换的通用格式如下:

目标类型 变量=(目标类型)值,如:

byte a;

int b;

a=(byte)b;
表达式的数据类型自动提升
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。

5.变量的作用域

    变量要先定义,后使用,但也不是在变量定义后的语句一直都能使用前面定义的变量。我们可以用大括号将多个语句包起来形成一个复合语句,变量只能在定义它的复合语句中使用。
public class TestScope
{
    public static void main(String[] args)
   {
        int x = 12;          
             {
                   int q = 96;  // x和q都可用
                   int x = 3;//错误的定义,Java中不允许有这种嵌套定义
                   System.out.println("x is "+x);
                   System.out.println("q is "+q);
             }
            q = x;    
            System.out.println("x is "+x);     
   }

6.局部变量的初始化

    在一个函数或函数里而把代码块中定义的变量称为局部变量,局部变量在函数或代码块被执行时创建,在函数或代码块结束时被销毁。局部变量在进行取值操作前必须被初始化或进行过赋值操作,否则会出现编译错误!

 

posted @ 2011-10-09 21:38 Java_liyadong 阅读(4104) | 评论 (0)编辑 收藏

Java 的循环语句有for,while 和 do-while 。这些语句创造了我们通常所称的循环(loops)。你可能知道,一个循环重复执行同一套指令直到一个结束条件出现。你将看到,Java 有

Java 的循环语句有for,while 和 do-while 。这些语句创造了我们通常所称的循环(loops)。你可能知道,一个循环重复执行同一套指令直到一个结束条件出现。你将看到,Java 有适合任何编程所需要的循环结构。

 

5.2.1 while 语句

while 语句是Java 最基本的循环语句。当它的控制表达式是真时,while 语句重复执行一个语句或语句块。它的通用格式如下:

 

while(condition) {

// body of loop

}

 

 

条件condition 可以是任何布尔表达式。只要条件表达式为真,循环体就被执行。当条件condition 为假时,程序控制就传递到循环后面紧跟的语句行。如果只有单个语句需要重复,大括号是不必要的。

 

下面的while 循环从10开始进行减计数,打印出10行“tick”。

 

// Demonstrate the while loop.

class While {

public static void main(String args[]) {

int n = 10;

 

 

while(n > 0) {

System.out.println("tick " + n);

n--;

 

 

}

}

}

 

 

当你运行这个程序,它将“tick”10次:

 

tick 10

tick 9

tick 8

tick 7

tick 6

tick 5

tick 4

tick 3

tick 2

tick 1

 

 

因为while 语句在循环一开始就计算条件表达式,若开始时条件为假,则循环体一次也不会执行。例如,下面的程序中,对println( ) 的调用从未被执行过:

 

int a = 10, b = 20;

 

while(a > b)

System.out.println("This will not be displayed");

 

 

while 循环(或Java 的其他任何循环)的循环体可以为空。这是因为一个空语句(null statement) (仅由一个分号组成的语句)在Java 的语法上是合法的。例如,下面的程序:

 

// The target of a loop can be empty.

class NoBody {

public static void main(String args[]) {

 

 

int i, j;

i = 100;

j = 200;

 

 

// find midpoint between i and j

while(++i < --j) ; // no body in this loop

 

 

System.out.println("Midpoint is " + i);

}

}

 

 

该程序找出变量i和变量j的中间点。它产生的输出如下:

 

Midpoint is 150

 

该程序中的while 循环是这样执行的。值i自增,而值j自减,然后比较这两个值。如果新的值i仍比新的值j小,则进行循环。如果i等于或大于j,则循环停止。在退出循环前,i 将保存原始i和j的中间值(当然,这个程序只有在开始时i比j小的情况下才执行)。正如你看到的,这里不需要循环体。所有的行为都出现在条件表达式自身内部。在专业化的Java 代码中,一些可以由控制表达式本身处理的短循环通常都没有循环体。

 

5.2.2 do-while 循环

如你刚才所见,如果while 循环一开始条件表达式就是假的,那么循环体就根本不被执行。然而,有时需要在开始时条件表达式即使是假的情况下,while 循环至少也要执行一次。换句话说,有时你需要在一次循环结束后再测试中止表达式,而不是在循环开始时。幸运的是,Java 就提供了这样的循环:do-while 循环。do-while 循环总是执行它的循环体至少一次,因为它的条件表达式在循环的结尾。它的通用格式如下:

 

do {

// body of loop

} while (condition);

 

 

do-while 循环总是先执行循环体,然后再计算条件表达式。如果表达式为真,则循环继续。否则,循环结束。对所有的Java 循环都一样,条件condition 必须是一个布尔表达式。下面是一个重写的“tick”程序,用来演示do-while 循环。它的输出与先前程序的输出相同。

 

// Demonstrate the do-while loop.

class DoWhile {

public static void main(String args[]) {

int n = 10;

 

 

do {

System.out.println("tick " + n);

n--;

 

 

} while(n > 0);

}

}

 

 

该程序中的循环虽然在技术上是正确的,但可以像如下这样编写更为高效:

do {

System.out.println("tick " + n);

} while(--n > 0);

 

 

在本例中,表达式“-- n > 0 ”将n值的递减与测试n是否为0组合在一个表达式中。它的执行过程是这样的。首先,执行-- n 语句,将变量n递减,然后返回n的新值。这个值再与0比较,如果比0大,则循环继续。否则结束。

 

do-while 循环在你编制菜单选择时尤为有用,因为通常都想让菜单循环体至少执行一次。下面的程序是一个实现Java 选择和重复语句的很简单的帮助系统:

 

// Using a do-while to process a menu selection

class Menu {

 

 

public static void main(String args[])

throws java.io.IOException {

char choice;

 

 

do {

System.out.println("Help on:");

System.out.println(" 1. if");

System.out.println(" 2. switch");

System.out.println(" 3. while");

System.out.println(" 4. do-while");

System.out.println(" 5. for ");

System.out.println("Choose one:");

choice = (char) System.in.read();

 

 

} while( choice < '1' || choice > '5');

 

System.out.println(" ");

 

switch(choice) {

 

case '1':

System.out.println("The if: ");

System.out.println("if(condition) statement;");

System.out.println("else statement;");

 

 

break;

 

case '2':

System.out.println("The switch: ");

System.out.println("switch(expression) {");

System.out.println(" case constant:");

System.out.println(" statement sequence");

System.out.println(" break;");

System.out.println(" // ...");

System.out.println("}");

break;

 

 

case '3':

System.out.println("The while: ");

System.out.println("while(condition) statement;");

break;

 

 

case '4':

System.out.println("The do-while: ");

System.out.println("do {");

 

 

System.out.println(" statement;");

System.out.println("} while (condition);");

break;

 

case '5':

System.out.println("The for: ");

System.out.print("for(init; condition; iteration)");

System.out.println(" statement;");

break;

 

 

}

}

}

 

 

下面是这个程序执行的一个样本输出:

 

Help on:

 

1. if

2. switch

3. while

4. do-while

5. for

Choose one:

4

The do-while:

do {

 

statement;

} while (condition);

 

 

在程序中,do-while 循环用来验证用户是否输入了有效的选择。如果没有,则要求用户重新输入。因为菜单至少要显示一次,do-while 循环是完成此任务的合适语句。

 

关于此例的其他几点:注意从键盘输入字符通过调用System.in.read( ) 来读入。这是一个Java 的控制台输入函数。尽管Java 的终端 I/O (输入/输出)方法将在第12章中详细讨论,在这里使用System.in.read ( ) 来读入用户的选择。它从标准的输入读取字符(返回整数,因此将返回值choice 定义为字符型)。默认地,标准输入是按行进入缓冲区的,因此在你输入的任何字符被送到你的程序以前,必须按回车键。

 

Java 的终端输入功能相当有限且不好使用。进一步说,大多数现实的Java 程序和applets (小应用程序)都具有图形界面并且是基于窗口的。因此,这本书使用终端的输入并不多。然而,它在本例中是有用的。另外一点:因为使用System.in.read ( ) ,程序必须指定throws java.io.IOException 子句。这行代码对于处理输入错误是必要的。这是Java 的异常处理的一部分,将在第10章讨论。

 

5.2.3 for 循环

在第2章曾使用过一个for循环的简单格式。你将看到,for循环是一个功能强大且形式灵活的结构。下面是for 循环的通用格式:

 

for(initialization; condition; iteration) {

// body

}

 

 

如只有一条语句需要重复,大括号就没有必要。

 

 

for循环的执行过程如下。第一步,当循环启动时,先执行其初始化部分。通常,这是设置循环控制变量值的一个表达式,作为控制循环的计数器。重要的是你要理解初始化表达式仅被执行一次。下一步,计算条件condition 的值。条件condition 必须是布尔表达式。它通常将循环控制变量与目标值相比较。如果这个表达式为真,则执行循环体;如果为假,则循环终止。再下一步执行循环体的反复部分。这部分通常是增加或减少循环控制变量的一个表达式。接下来重复循环,首先计算条件表达式的值,然后执行循环体,接着执行反复表达式。这个过程不断重复直到控制表达式变为假。

下面是使用for 循环的“tick”程序:

 

// Demonstrate the for loop.

class ForTick {

public static void main(String args[]) {

int n;

 

 

for(n=10; n>0; n--)

System.out.println("tick " + n);

}

}

 

 

for 循环中声明循环控制变量

 

控制for循环的变量经常只是用于该循环,而不用在程序的其他地方。在这种情况下,可以在循环的初始化部分中声明变量。例如,下面重写了前面的程序,使变量 n 在for循环中被声明为整型:

 

// Declare a loop control variable inside the for.

class ForTick {

public static void main(String args[]) {

 

 

// here, n is declared inside of the for loop

for(int n=10; n>0; n--)

System.out.printl

 

 

 

本篇文章来源于 黑基网-中国最大的网络安全站点 原文链接:file:///C:/Documents%20and%20Settings/Administrator/桌面/网页学习资料/java%20循环语句-知识-黑基网.htm

posted @ 2011-10-09 21:37 Java_liyadong 阅读(1046) | 评论 (0)编辑 收藏
分支语句根据一定的条件,动态决定程序的流程方向,从程序的多个分支中选择一个或几个来执行。分支语句共有两种:if语句和switeh语句

分支语句根据一定的条件,动态决定程序的流程方向,从程序的多个分支中选择一个或几个来执行。分支语句共有两种:if语句和switeh语句。

1.if语句

if语句的基本语法是:

if{逻辑表达式}

语句1;

[else

语句2:

]

if语句中的else子句是可选的。if关键字之后的逻辑表达式必须得到一个逻辑值,不能像其他语言那样以数值来代替。因为Java不提供数值与逻辑值之间的转换。例如, C语言中的语句形式:

iF(x)

{…}

应该写作:

int X=3;

if(x!=O)

{…}

if语句的含义是:当逻辑表达式结果为true时,执行语句1,然后继续执行if后面的语句。当逻辑表达式为false时,如果有else子句,则执行语句2,否则跳过该if语句,继续执行后面的语句。语句1和语句2既可以是单语句,也可以是语句块。

posted @ 2011-10-09 21:34 Java_liyadong 阅读(391) | 评论 (0)编辑 收藏
运算符
同大多数的编程语言一样,Java语言也包含了许多的运算符。如果大家学习过C或者C++,会发现下面介绍的各种Java的运算符都与之类似。
3.1.1 赋值运算符 =
      这是任何编程语言的最基本的运算符,它用来给变量指定一个值。对于基本类型来说,赋值都便于理解,将新的值赋给变量并保存在变量中供使用。但对于对象类型来说,这里就有一点区别,特别需要提醒大家注意。

对象类型并不是把实际的值(这里是实例)赋给了对象类型的变量,而是赋给的一个参考指针。这样,源对象类型的变量和新的这个变量实际上是指向的同一个实例,如果使用其中一个让实例改变,那么相应的另一个所指向的实例也会改变。这里我们可以借用C里面的指针的概念来方便理解,但实际上Java是不具有指针的概念和定义的。

我们通过下面的例子可以进一步来理解这个概念。

import java.awt.Dimension;

class ReferenceTest {

  Dimension a = new Dimension ( 5,10 );

  System.out.println (“a.height = ” + a.height ) ;

  Dimension b = a ;

  b.height = 30 ;

  System.out,println (“a.height = ” + a.height + “after change to b ”);

}

}
复制代码
运行结果:

c:\java Project\Reference>;java ReferenceTest

a.height = 10

a.    height = 30 afer change to b

另外,赋值运算符还可以和其他的运算符,联合组成新的赋值符。如*=、/=、+=、-=等等,这于C或者C++类似。

3.1.2 比较运算符
比较运算符是用来对相同数据类型的变量进行大小或者是否相等、相同的比较,返回的是Boolean类型的值。因此也就大概分为两类。

n        >;、>;=、<、<=

这是比较变量的大小关系,与我们学过的任何编程语言相同,就不再介绍了。

n        = = 、! = 

这是比较变量是否相等或相同。这对于平常的比较基本类型的变量容易理解,只是我们要强调一下对对象类型的比较。与我们前面介绍的赋值运算符类似的是,它也是进行的对其参考指针的比较,而并不是比较两个内容上的差别。我们可以借助下面的例子来理解。

import java.awt.Button

class CompareRefernce {

    public static void main ( String [ ] args ) {

      Button a = new Button ( “Exit”);

      Button b = new Button ( “Exit”);

      Button c = a;

      System.out.println ( “Is refernce a = = b ? ” + ( a = = b) ) ;

      System.out.println ( “Is refernce a = = c ? ” + ( a = = c) ) ;

}

}
复制代码

运行结果:

Is refernce a = = b ? false

Is refernce a = = c ? true

3.1.3 instanceof运算符
      这个是Java语言特殊的一个运算符,它是用来测试其对象是否属于某类或其超类。但是这里需要提醒大家的是,如果你使用instanceof来比较不是一个继承关系树上的类,Java能够编译通过,但运行的时候会报错。另外,你可以对null对象使用这个运算符,只是无论对于什么类测试的结果都是false。

3.1.4 算术运算符
加+、减-、乘*、除/和取模%运算,这与其他的编程语言类似,不再详述。

3.1.5 自增++、自减--运算符
Java的自增和自减运算符,与C语言类似,同样需要注意的是其放置的位置不同,可能的结果也不同。如果放置在变量的前面,表示先自增(减)再参与下步运算,而如果放置在后面则表示先参与运算再自增(减)。如下的例子说明了自增运算符的使用:

class IncDec{

    public static void main ( String [ ] args ) {

      int a = 1;

      int b = 1;

      int c;

int d;

c = ++b;

d = a++;

c++;

      System.out.println ( “a = ” + a );

      System.out.println ( “b = ” + b );

      System.out.println ( “c = ” + c );

      System.out.println ( “d = ” + d );

}

}
复制代码

运行结果:

a = 2
b = 2
c = 3
d = 1

3.1.6 字符串连接运算符 +
      Java语言与C语言类似,也使用+作为连接字符串的运算符,这实际是对String类重载了+运算符。

3.1.7 位运算符
包括位移运算和位逻辑运算,这也与C语言相似。

->;        位移运算

      >;>;右移、<<左移、>;>;>;无符号右移。

->;        位逻辑运算

&与、|或、^异或、~非运算,这于其他的编程语言类似,不再详述。

3.1.8 逻辑运算符
      与&&、或||,这于其他的编程语言类似,不再详述。只是需要提醒大家不要把它们和位逻辑运算符混淆,这也是初学者最容易犯的错误。

3.1.9 条件运算符 ?:
      这与C语言完全相同,具体不再解释。

3.1.10 类型转换
      我们在编写程序的时候经常需要对变量的类型进行转换,Java语言与其他的编程语言类似,也提供两种类型转换方式,即显式转换和隐式转换。转换的对象可分为两类,一是基本类型,二是对象类型。

这里需要掌握这样一个要点。对于基本类型来说,凡是大转小(以类型的宽度考虑)需要使用显式转换,也就是需要在变量前面强制给出需要转换成的类型。而对小转大来说,系统会自行进行隐式转换。

对于对象类型来说,也与之类似。凡是超类转子类则需要使用显式强制转换,而子类转超类系统可自行进行隐式转换。另外还需要注意的一点是,对于不在一个继承关系树上的类要进行强制转换,Java编译可通过,但实际运行会出错。

3.2 equals()方法
      equals()方法实际与= =运算符作用相同,也是用来比较相同类型的两个变量是否相同或相等。只是有点区别的是,对于String类来说,它重载equals()方法,使用它不是比较两个参考指针的区别,而是实际对所指向的具体内容进行比较,这也满足了平时我们对比较字符串的实际需求。当然,对其他类来说,你也可以重载equals()方法,使其满足你的实际需要,来比较两个对象类型的变量。

3.3 优先级 
      与其他编程语言类似的,Java语言的运算符同样涉及到优先级别的问题,书上130页从高到低给出了所有运算符的优先级。建议大家,如果对某些运算符之间的优先级不是很清楚的时候,可以使用()来改变它们的优先级关系。

3.4 方法的参数传递
      最后,简单讨论一下方法的传递的问题。Java语言的参数传递类型主要可以分为两种,值传递和引用传递。借助C语言的概念,我们知道,第一种就是把参数值直接复制成方法体的参数,这样对方法体中的参数的改变不会影响到调用它的参数。而对于第二种,参数的引用(或者说是个指针)被传递给了方法体的参数,该引用用来访问调用中指定的实际参数。这样,对方法体参数的改变将会影响到调用方法体的参数。
      由于没有指针的概念,Java的参数传递相对比较简单。对于一般的基本类型来说,都采用的是值传递;而对于对象类型则是使用的引用传递
posted @ 2011-10-09 21:32 Java_liyadong 阅读(218) | 评论 (0)编辑 收藏


Java语法总结 - 基本数据类型

Java不是纯的面向对象的语言,不纯的地方就是这些基本数据类型不是对象。当然初期Java的运行速度很慢,基本数据类型能在一定程度上改善性能。如果你想编写纯的面向对象的程序,用包装器类是取代基本数据类型就可以了。

1、基本类型的存储空间。byte--8位,short--16位,int--32位,long--64位,float--32位,double--64位。这六种数字类型都是有符号的。固定的存储空间正是Java可移植性、跨平台的原因之一!

2、基本类型的存在导致了Java OOP的不纯粹性。因为基本类型不是对象,一切皆对象是个小小的谎言。这是出于执行效率的权衡。

3、使用公式-2的(位数-1)次幂到2的(位数-1)次幂-1确定整数类型的范围(byte、short、int、long)。

4、char是16位Unicode字符或者说是16位无符号整数,范围从0到65535。即便如此,可以强制转换非法的数据,如:char c1 = (char) 10000;  char c2 = (char) -200;。可以从二进制存储的角度理解这点。

5、整数有八进制(以0开头的整数)、十进制、十六进制(以0x或0X开头的整数)表示。

6、char可以用单引号表示单个字符,如:'良'。也可以用unicode值'"ucafe'(四位十六进制数)。

7、布尔型boolean。布尔型只能是true或者false,并且测试它为真还是假。它不能进行任何其他的运算,或者转化为其他类型。
正例:boolean b1 = 1 > 2;    反例:int seen = button.isVisible();
实践:简洁是美德,请不要这样写:if ( is == true && done == false ) ,只有新手才那么写。
对于任何程序员 if ( whether && !done ) 都不难理解吧。所以去掉所有的==fasle 和 ==true。

8、默认的浮点类型是双精度(double),要想要一个float必须在浮点数后面加F或者f。如:float pi = 3.14;是错误的。

9、默认的整数类型是int型,要想使用长整型可在后面加“l”或“L”,如:1000L。(小写l容易被误认为1,不推荐用)

10、float可以精确到7位有效数字,第8位的数字是第9位数字四舍五入上取得的;double可以精确到16位有效数字,第17位的数字是第18位数字四舍五入上取得的。盖茨到底有多少钱?要用double表示,用float是装不下的……

11、如果要求精确的答案,请不要使用float和double,因为它们是为了在广域数值范围上提供较为精确的快速近似运算而精心设计的。然而,它们没有提供完全精确的结果。尤其是对货币计算尤为不适合,因为要让一个float或double精确地表达0.1(或者10的任何)

12、BigInteger支持任意精度的整数。BigDecimal支持任意精度的定点数。

13、初始化无论怎么强调都不过分!Java为所有的成员变量提供了默认初始化:byte、short、 int、long--0  float--0.0f double--0.0  boolean--false  char--'"u0000',特别地对象类型的引用全被初始化为null。(注意!除了数组之外的局部变量是得不到这种优待的,需要你自己初始化。另外,默认初始化的值是你想要的吗?所以最好明确地对变量进行初始化,一般是在构造函数中。)

14、基本类型之间的转化。Java的类型检查很严格,从低精度转换到高精度是无须显式转换的,double d = 123;。但是反过来,进行窄化转换,由高精度向低精度,或者一种类型到另一种类型,则必须使用强制类型转化。Java提供了安全转化机制,但是结果是否是期望的,你自己保证吧。
double d = 12.5;
float f = (int) d; //结果不是13,而是12!
浮点型转化为整型时,不进行四舍五入,直接截断小数点后面的数。

15、提升。各种基本数据类型进行混合运算,结果会是表达能力最强的那种。如:int和long运算,结果是long,整型和浮点型运算结果是浮点型。特殊的一点是:只要类型比int小(如char、byte、short),那么在运算之前,这些值会自动地转换成int。例子:
byte b1 = 12;
byte b2 = b1 + 1; //在编译时出错了!因为b1+1已经是int型了!切记!

16、浮点类型的科学表示法。在数学中e代表自然对数(Math.E给出了double值),而在Java中e代表10的幂次。浮点型的数可以这样表示float f = 1e-27f; 代表1乘以10的负27次幂。
posted @ 2011-10-09 21:31 Java_liyadong 阅读(212) | 评论 (0)编辑 收藏
public class TestMethod {
public static void main(String[] args) {
m();
m2(2);
m3('3', 4);
m4(4, 6);
int i = m4(4, 6);
System.out.println(i);
}
public static void m() {
//return;
System.out.println("ok");
System.out.println("hello");
}
public static void m2(int i) {
if(i > 3) 
return;
System.out.println(i);
}
public static void m3(int i, int j) {
System.out.println(i + j);
}
public static int m4(int i, int j) {
return i > j ? i : j;
}
}
posted @ 2011-10-09 21:28 Java_liyadong 阅读(199) | 评论 (0)编辑 收藏
Java中的main()方法详解
 
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。
 
在看Java中的main()方法之前,先看一个最简单的Java应用程序HelloWorld,我将通过这个例子说明Java类中main()方法的奥秘,程序的代码如下:
 
/** 
* Java中的main()方法详解 
*/
 
public class HelloWorld { 
    public static void main(String args[]) { 
        System.out.println("Hello World!"); 
    } 
}
 
一、先说类:
 
HelloWorld 类中有main()方法,说明这是个java应用程序,通过JVM直接启动运行的程序。
既然是类,java允许类不加public关键字约束,当然类的定义只能限制为public或者无限制关键字(默认的)。
 
二、再说main()方法
 
这个main()方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。
 
为什么要这么定义,和JVM的运行有关系。
当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。
 
由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要是限制为public static。
 
对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。
main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类细必须String[],至于字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和sun java规范范例中mian参数名保持一致,取名为args。
 
因此,main()方法定义必须是:“public static void main(String 字符串数组参数名[])”。
 
三、main()方法中可以throw Exception
 
因此main()方法中可以抛出异常,main()方法上也可以声明抛出异常。
 
比如,下面这个写法是正确的:
public class TestMain { 
        public static void main(String[] args) throws Exception { 
                System.out.println("哈哈哈哈哈"); 
                throw new Exception(""); 
        } 
}
 
运行结果:
哈哈哈哈哈 
Exception in thread "main" java.lang.Exception:    
  at maintest.TestMain.main(TestMain.java:11) 
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
  at java.lang.reflect.Method.invoke(Method.java:585) 
  at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90) 

Process finished with exit code 1
 
四、main()方法中字符串参数数组作用
 
main()方法中字符串参数数组作用是接收命令行输入参数的,命令行的参数之间用空格隔开。
 
下面给出一个例子,看看如何初始化和使用这个数组的。
/**
* 打印main方法中的输入参数 
*/
 
public class TestMain { 
    public static void main(String args[]){ 
        System.out.println("打印main方法中的输入参数!"); 
        for(int i=0;i<args.length;i++){ 
            System.out.println(args[i]); 
        } 
    } 
}
 
执行方法和运行结果
D:\Study\basetest\src>javac TestMain.java 

D:\Study\basetest\src>java TestMain 1 2 3 
打印main方法中的输入参数! 


 
 
五、给出HelloWorld的另外一个版本
 
/** 
* 变态版的HelloWorld.呵呵 
*/
 
public class HelloWorld2 { 
    static { 
        System.out.println("Hello Wordld!"); 
    } 
    public static void main(String args[]){ 
        System.exit(0); 
    } 
}
 
这个main()方法执行的内容就一句"System.exit(0);" ,目的是让程序正常结束。那“HelloWorld!”是从哪里打印的,秘密就是在static打印的,因为static代码块的内容会在main调用前调用。
 
总结:
main方法作为一个特殊的规范,与普通的方法有很大区别,限制很多,理解其原理需要学习JVM相关知识。是Java中学习中大障碍。这是我对main原理和使用的总结,欢迎各位在此讨论。
posted @ 2011-10-09 21:27 Java_liyadong 阅读(197) | 评论 (0)编辑 收藏
仅列出标题  下一页