1、一个简单的Java程序

一个简单的Java应用程序:

public class FirstSample
{
   public static void main(String[] args)
   {
      System.out.println("We will not use 'Hello, World!'");
   }
}
  • Java区分大小写
  • 关键字public称为访问修饰符(access modifier),这些修饰符用于控制程序的其他部分对这段代码的访问级别。
  • 关键字class表明Java程序中的全部内容都包含在类中。
    • 类作为一个加载程序逻辑的容器,程序逻辑定义了应用程序的行为。
  • 关键字class后面紧跟类名。Java中定义类名的规则很宽松。名字必须以字母开头,后面可以跟字母和数字的任意组合。长度基本上没有限制。但是不能使用Java保留字(例如,public或class)作为类名。
  • 类的标准命名:驼峰命名法: 类名是以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母都应该大写。
  • 源代码的文件名必须与公共类的名字相同,并用.java作为扩展名。也区分大小写。
  • 在Java中,每条语句必须用分号结束。
  • 采用双引号分隔字符串。

执行流程:

  1. 编译xxx.java之后就会得到一个包含这个类字节码的文件。Java编译器(javac)将字节码文件自动地命名为FirstSample.class,并与xxx.java存储在同一个目录下。

  2. 使用java xxx :运行已编译的的程序时,Java虚拟机将从指定类中的main方法开始执行(这里的“方法”就是Java中所说的“函数”),因此为了代码能够执行,在类的源文件中必须包含一个main方法


2、注释

  • 注释不会出现在可执行程序中

  • 在Java中,有3种标记注释的方式。

 // 第一种注释,从//开始到本行结束    
//使用/*和*/将一段很长的注释括起来
/* 使用将一段比较长的注释括起来,DC 漫画改编美剧《蝙蝠女侠》(Batwoman)发布首支预告,先前在 CW 绿箭宇宙交叉集「异世界」(Elseworlds)率先登场的角色,如今将要展开自己的冒险旅程。*/
/**/注释不能嵌套。
//第3种注释可以用来自动地生成文档。这种注释以/**开始,以*/结束。
/**DC 漫画改编美剧《蝙蝠女侠》(Batwoman)发布首支预告,先前在 CW 绿箭宇宙交叉集「异世界」(Elseworlds)率先登场的角色,如今将要展开自己的冒险旅程。DC 漫画改编美剧《蝙蝠女侠》(Batwoman)发布首支预告,先前在 CW 绿箭宇宙交叉集「异世界」(Elseworlds)率先登场的角色,如今将要展开自己的冒险旅程。*/

3、数据类型

Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。

  • 强类型语言:也称为强类型定义语言。是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。eg:java、.NET、C/C++
  • 弱类型语言:也称为弱类型定义语言。数据类型可以被忽略的语言。它与强类型定义语言相反, 一个变量可以赋不同数据类型的值。 eg:vb,php…

在Java中,一共有8种基本类型(primitive type),其中有4种整型(int,long,short,)、2种浮点类型(float,double)、1种用于表示Unicode编码的字符单元的字符类型char(请参见论述char类型的章节)和1种用于表示真值的boolean类型。

Java有一个能够表示任意精度的算术包,通常称为“大数值”(big number)。虽然被称为大数值,但它并不是一种新的Java类型,而是一个Java对象

3.1、整型

整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型:

类型名称 关键字 存储要求 取值范围 作为成员变量的默认值
字节型 byte 1字节(B)=8 位(bit) -128(-2^7)~127(2^7-1) 0
短整型 short 2 -32768(2^15)~32767(2^15-1) 0
整型 int 4 -2,147,483,648‬(2^31)~2,147,483,647(2^31-1) 0
长整型 long 8 -9,223,372,036,854,775,808‬(2^63)~9,223,372,036,854,775,807(2^63-1) 0L
  • 在通常情况下,int类型最常用。数据很大的时候用long

  • byte和short类型主要用于特定的应用场合,例如,底层的文件处理或者需要控制占用存储空间量的大数组。

  • 整型的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。

  • Java程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。

    //长整型数值有一个后缀L或l(如4000000000L)。
    4000000000L
    //十六进制数值有一个前缀0x或0X(如0xCAFE)。
    0xCAFE
    0XCAFE
    //八进制有一个前缀0,例如,010对应八进制中的8。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。
    010
    //加上前缀0b或0B就可以写二进制数
    0b1001
    0B1001
    //可以为数字字面量加下划线,如用1_000_000(或0b1111_0100_0010_0100_0000)表示一百万。这些下划线只是为了让人更易读。Java编译器会去除这些下划线。
    1_000_000
  • Java没有任何无符号(unsigned)形式的int、long、short或byte类型。

3.2、浮点类型

浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型:

类型名称 关键字 存储要求 取值范围 作为成员变量的默认值
单精度浮点型 float 4字节(B) -3.403E38~3.403E38 0.0F
双精度浮点型 double 8字节(B) -1.798E308~1.798E308 0.0D
  • double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求。实际上,只有很少的情况适合使用float类型,例如,需要单精度数据的库,或者需要存储大量数据。
  • float类型的数值有一个后缀F或f(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d(例如,3.14D)。
3.14F//float型
3.14f//float型
3.14 //默认为double类型
3.14159D//double型
3.14159d//double型
  • 所有的浮点数值计算都遵循IEEE 754规范。

    • 溢出或者出错三个特殊浮点数值:

      • 正无穷大: eg:12/0 正整数除以0的结果为正无穷大
      • 负无穷大:
      • NaN(不是一个数字): eg:计算0/0或者负数的平方根结果为NaN。
    • 常量Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY和Double.NaN(以及相应的Float类型的常量)分别表示这三个特殊的值,但在实际应用中很少遇到。

3.3、char类型

char类型原本用于表示单个字符。不过,现在情况已经有所变化。如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值。

char类型的字面量值要用单引号括起来。

我们强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元。最好将字符串作为抽象数据类型处理

3.4、boolean类型

  • boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。

  • 整型值和布尔值之间不能进行相互转换。


4、变量

4.1、变量

在Java中,每个变量都有一个类型(type)。

  1. 在声明变量时,变量的类型位于变量名之前。
double salary;
int userId;
long earthPeople;
boolean isTrue;
  • 变量名必须是一个以字母开头并由字母或数字构成的序列。
  • 变量名中所有的字符都是有意义的,并且大小写敏感。变量名的长度基本上没有限制。
  • 不能使用Java保留字作为变量名
  1. 变量初始化

声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万不要使用未初始化的变量。

double salary;
salary=3.14d;
int i=4;//可以将变量的声明和初始化放在同一行中
//在Java中,变量的声明尽可能地靠近变量第一次使用的地方,这是一种良好的程序编写风格。

注意:在Java中,不区分变量的声明与定义。

4.2、常量

在Java中,利用关键字final指示常量。

final double PAI_ZHI=3.1415;
  • 关键字final表示这个变量只能被赋值一次。(常量相当于一种特殊的变量)
  • 一旦被赋值之后,就不能够再更改了。
  • 习惯上,常量名使用全大写。

在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。

public class HelloWord{
    public static final double PAI_ZHI=3.1415;
     public static void main(String[] args)
   {
      System.out.println("We will not use 'Hello, World!'");
   }
}

需要注意,类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。


5、运算符

  • 在Java中,使用算术运算符+、-、*、/表示加、减、乘、除运算。
  • 当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。
  • 整数的求余操作(有时称为取模)用%表示。例如,15/2等于7,15%2等于1,15.0/2等于7.5。
  • 注意:整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。

数学函数与常量

在Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。

  • 在Java中,没有幂运算,因此需要借助于Math类的pow方法
double y=Math.pow(x,a);
//将y的值设置为x的a次幂(xa)。pow方法有两个double类型的参数,其返回结果也为double类型。
  • floorMod方法的目的是解决一个长期存在的有关整数余数的问题。
//计算一个时钟时针的位置。这里要做一个时间调整,而且要归一化为一个0~11之间的数。这很简单:(position+adjustment)%12。不过,如果这个调整为负会怎么样呢?你可能会得到一个负数。所以要引入一个分支,或者使用((position+adjustment)%12+12)%12。不管怎样,总之都很麻烦。
floorMod(position+adjustment,12)
//总会得到一个0~11之间的数。(遗憾的是,对于负除数,floorMod会得到负数结果,不过这种情况在实际中很少出现。)
  • Math类提供了一些常用的三角函数:
Math.sin();
Math.cos();
Math.tan();
Math.atan();
Math.atan2();
  • 还有指数函数以及它的反函数——自然对数以及以10为底的对数:
Math.exp();
Math.log();
Math.log10;
  • Java还提供了两个用于表示π和e常量的近似值:
Math.PI;
Math.E;

不必在数学方法名和常量名前添加前缀“Math”,只要在源文件的顶部加上下面这行代码就可以了。

在Math类中,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程。如果得到一个完全可预测的结果比运行速度更重要的话,那么就应该使用StrictMath类。它使用“自由发布的Math库”(fdlibm)实现算法,以确保在所有平台上得到相同的结果。


数值类型之间的转换

有6个实心箭头,表示无信息丢失的转换;有3个虚箭头,表示可能有精度损失的转换。

例如:n+f,n是整数,f是浮点数,先要将两个操作数转换为同一种类型,然后再进行计算。

  • 如果两个操作数中有一个是double类型,另一个操作数就会转换为double类型。·
  • 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
  • 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
  • 否则,两个操作数都将被转换为int类型。

强制类型转换

在必要的时候,int类型的值将会自动地转换为double类型。但另一方面,有时也需要将double转换成int。在Java中,允许进行这种数值之间的类型转换。当然,有可能会丢失一些信息。在这种情况下,需要通过强制类型转换(cast)实现这个操作。强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名

double x=9.98999
int nx=(int) x;//强制类型转换通过截断小数部分将浮点值转换为整型。

如果想对浮点数进行舍入运算,以便得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用Math.round方法:

double x=9.98999
int nx=(int) Math.round(x);
  • round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。
  • 如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。例如,(byte)300的实际值为44。

6、字符串

从概念上讲,Java字符串就是Unicode字符序列。

Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然地叫做String。每个用双引号括起来的字符串都是String类的一个实例:String e="rookie";

子串

String类的substring方法可以从一个较大的字符串提取出一个子串。

substring的工作方式有一个优点:容易计算子串的长度。字符串s.substring(a,b)的长度为b-a

拼接

与绝大多数的程序设计语言一样,Java语言允许使用+号连接(拼接)两个字符串。

当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串,这种特性通常用在输出语句中。

如果需要把多个字符串放在一起,用一个定界符分隔,可以使用静态join方法:

不可变字符串

String类没有提供用于修改字符串的方法,由于不能修改Java字符串中的字符,所以在Java文档中将String类对象称为不可变字符串。

检测字符串是否相等

可以使用equals方法检测两个字符串是否相等。

检测两个字符串是否相等,而不区分大小写,可以使用equalsIgnoreCase方法。

==只能够确定两个字符串是否放置在同一个位置上。

空串与Null

空串""是长度为0的字符串。空串是一个Java对象,有自己的串长度(0)和内容(空)。

String kong="";

    if (kong.equals("")){
      System.out.println("空字符串");

    }else {
      System.out.println("非空");
    }

    if (kong.length()==0)
    {
      System.out.println("空字符串");
    }else {
      System.out.println("非空");
    }

String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联。

 String nullone = null;
    if (nullone == null) {
      System.out.println("null");
    } else {
      System.out.println(nullone);
    }

检查一个字符串既不是null也不为空串

if(str!=null&&str.length()!=0)

码点与代码单元

StringAPI

构建字符串

7、输入输出

8、控制流程

9、大数值

10、数组


Java      Java

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!