Java2实用教程 第二章

标识符

标识符就是一个名字。区分大小写。

语法规则

  1. 由字母、下划线、美元符号、数字组成,长度不受限制。
  2. 第一个字符不能是数字字符。
  3. 不能是关键字。
  4. 不能是true、false、null。

基本数据类型

Java有8种基本数据类型。

逻辑类型

boolean(布尔类型)

  • 常量:true、false
  • 变量:使用关键字boolean来声明逻辑变量,声明时可以赋初值。

整数类型

128=2^7;

byte(-128~127)、short(-2^15~2^15-1)、int(-2^31~2^31-1)、long(-2^63~2^63-1)

  • 变量:x,y,漂亮,width等。例如:
public class C
{
    public static void main(String[] args)
    {
        int 漂亮=98;
        System.out.println((char)65);
        System.out.println(漂亮);
    }
}
运行结果:
C:\Users\15939\Desktop>javac C.java
C:\Users\15939\Desktop>java C
A
98
  • Java中不存在byte、short型常量的表示法。
  • long型常量用后缀L来表示。例如:108L(十进制)、07123L(八进制)。
  • Java中没有无符号的byte、short、int、long。unsigned int m;是错误声明。
  • 变量:L加不加都不影响运行结果。(我认为还是加上吧)
long width=12L,height=2005L;

字符类型

char

  • 内存x中存储的是97,97是字符a在Uniclode表中的排序位置。
char x='a';
等价于
char x=97;
  • 有些字符(如回车符)不能通过键盘输入到字符串或程序中,需用到转义字符常量,例如:\n(换行),\b(退格),\t(水平制表),\'(单引号),\"(双引号),\\(反斜线)等。
char ch1='\n',ch2='\"',ch3='\\';
  • 字符串" 我喜欢使用字符串\" "中含有双引号字符。字符串" 我喜欢使用字符串" "是一个非法字符串。
  • 显示字符在Unicode表中的顺序位置,用int型类型转换,如(int)'A'。
public class C
{
    public static void main(String[] args)
    {
        
        System.out.println((int)'A');
    }
}

C:\Users\15939\Desktop>javac C.java
C:\Users\15939\Desktop>java C
65
  • 显示0-65 535之间的一个数所代表的Unicode表中相应位置的字符,用char型类型转换,如(char)65。
public class C
{
    public static void main(String[] args)
    {
        
        System.out.println((char)65);
    }
}

C:\Users\15939\Desktop>javac C.java
C:\Users\15939\Desktop>java C
A
  • Java中char型数据一定是无符号的,不允许使用unsigned修饰声明的变量。
  1. 在 Java 中,可以使用 Unicode 表中字符排序位置的十六进制转义来表示该字符。这种表示方式被称为 Unicode 码点( Unicode code point)。
  2. Unicode 码点是一个 32 位的整数,它表示了 Unicode 表中某个字符的位置。每个 Unicode 字符在 Unicode 表中都有一个唯一的码点。
  3. 例如,字母 'A' 的 Unicode 码点是 0x0041,字母 'B' 的 Unicode 码点是 0x0042,以此类推。可以使用十六进制转义来表示这些 Unicode 码点,例如:
'\u0041' 表示字符 'A'
'\u0042' 表示字符 'B'
  • 在 Java 中,可以使用字符常量或字符串字面量来表示 Unicode 码点。例如:
char c = '\u0041';  // 表示字符 'A'
String s = "'\u0041'";  // 表示字符串 "A"
  • 需要注意的是, Unicode 码点是一个整数,而不是字符。因此,在使用 Unicode 码点时,需要进行类型转换,将其转换为对应的字符类型。例如
char c = (char)0x0041;  // 将 Unicode 码点 0x0041 转换为字符 'A'

浮点类型

float(单精度)、double(双精度)

  • float常量后面必须有有后缀f或F。
  • float型数据保留8位有效数字。
  • double型数据保留16位有效数字。
  • 比较float型数据和double型数据时必须注意数据的实际精度。例如:
float x=0.4f;
double y=0.4;
实际存储在x中的数据是(这里我们把小数点保留16位)0.4000000059604645,
    存储在y中的数据是0.4000000000000000。
因此,y<x

类型转换运算

  • 按精度从低到高排列:                                                                                                      byte  short  char  int  long  float  double
  • 把级别低的变量赋值给级别高的变量,系统自动完成数据类型转换。
  • 把级别高的变量赋值给级别低的变量,必须使用类型转换运算。例如:
格式:    (类型名)要转换的值;
int x=(int)34.89;
long y=(long)56.98f;
int z=(int)19L;
  • 当把一个int型常量赋值给一个byte、short和char型变量时,不可超出这些变量的取值范围,否则必须进行类型转换运算。例如,常量128属于int型常量,超出byte变量的取值范围,如果赋值给byte 型变量,必须进行byte 类型转换运算(将导致精度的损失),如所示:
byte a = (byte)128;    溢出一位
byte b =(byte) (-129); 溢出一位
运行结果:
a=-128   byte的取值范围是-128~127
b=127    溢出的部分对应另一端倒序相应位数
  • 一个常见的错误是,在把一个 double型常量赋值给float 型变量时没有进行类型换运算,例如:
float x = 12.4;
将导致语法错误,编译器将提示“possible loss of precision”。正确的做法是:
float x = 12.4F;
或
float x = (float)12. 4;

输入基本型数据

Scanner是一个类,用它创建对象reader,对象reader调用nextBoolean(),nextByte(),nextShort(),nextInt(),nextLong(),nextFloat(),nextDouble()等方法,读取命令行输入的数据。例如:

import java.util.Scanner;
public class Example2_3
{
    public static void main (String args[ ])
    {
        Scanner reader=new Scanner(System.in);
        double sum=0;
        double x = reader.nextDouble();
        while(x!=0)
        {
           sum=sum+x;
           x=reader.nextDouble();
        }
        System.out.printf("sum=%10.5f\n",sum);
    }
}

C:\Users\15939\Desktop>javac C.java
C:\Users\15939\Desktop>java C
3
4
5
0
sum=12.00000

输出基本数据类型

  • 有三种输出方式:
  1. System.out.print("   "+"   ");//不可换行
  2. System.out.println("   "+"   ");//可换行
  3. System.out.printf("sum=%10.5f\n",sum);//和C语言输出格式类似
  • %f:小数部分最多保留6位。
  • 输出字符串常量时,不能出现回车 

        错误写法:System.out.println("你好,

                                                    很高兴认识你");

        正确写法:System.out.println("你好,"+
                                                   "很高兴认识你");

数组

  1. 数组通过数组名和索引来使用数组元素。数组变量即数组名,数组变量中存放着数组的首元素的地址
  2. 数组属于引用型变量,创建数组分两步:声明数组为数组分配变量

声明数组

  • 声明一维数组有两种格式:                                                                                                                 float boy[ ];                                                                                                                         float [ ] boy;
  • 声明二维数组有两种格式:                                                                                                                 float boy[ ][ ];                                                                                                                       float [ ][ ] boy;
  • Java不允许在声明数组中的方括号内指定数组元素的个数。即int a[12]是错误的。

为数组分配元素

  • 格式:数组名=new 数组元素类型[数组元素个数];(创建数组)                                                             boy=new float[4];                                                                                                               boy=new float[ ][ ];
  • 声明数组、创建数组、给元素一个初始值,可以一起完成,创建数组后,系统会给数组的每个元素一个默认值。
  • Java采用“数组的数组”声明多维数组。构成多维数组的一维数组不必有相同的长度。       int a[ ][ ]=new int[3][ ];//没为3个一维数组分配元素,要创建a的3个一维数组。                 a[0]=new int[6];                                                                                                                   a[1]=new int[12];                                                                                                                 a[2]=new int[8];
  • Java允许使用int型变量的值指定数组元素的个数,例如                                                   int size=30;                                                                                                             double number[ ]=new double[size];

length

数组元素的个数 = 数组的长度 = 数组名.length = 二维数组含有的一维数组的个数。          float a[ ][ ]=new float[12];
float b[ ][ ]=new int[3][6];
a.length的值是12;a.length的值是3。

数组的引用

相同类型的两个数组具有相同的引用,则它们具有相同的元素。

public class Example2_4 
{
   public static void main(String args[]) 
   {
      int a[]={1,2,3,4};
      int b[]={100,200,300};
      System.out.println("数组a的元素个数="+a.length);
      System.out.println("数组b的元素个数="+b.length);
      System.out.println("数组a的引用(带前缀信息)"+a);
      System.out.println("数组b的引用(带前缀信息)"+b);
      a=b; //将b的值赋值给a
      System.out.println("数组a的元素个数="+a.length);
      System.out.println("数组b的元素个数="+b.length);
      System.out.println("a[0]="+a[0]+",a[1]="+a[1]+",a[2]="+a[2]);
      System.out.print("b[0]="+b[0]+",b[1]="+b[1]+",b[2]="+b[2]);
   }
}

C:\Users\15939\Desktop>javac C.java
C:\Users\15939\Desktop>java C
数组a的元素个数=4
数组b的元素个数=3
数组a的引用(带前缀信息)[I@15db9742
数组b的引用(带前缀信息)[I@6d06d69c
数组a的元素个数=3
数组b的元素个数=3
a[0]=100,a[1]=200,a[2]=300
b[0]=100,b[1]=200,b[2]=300

对于char型数组a,System.out.println(a);会输出数组a的全部元素。                                                                              System.out.println(" "+a);才会输出char型数组的引用。

应用举例:折半法

 用折半法判断一个数据是否在一个数组里

import java.util.Arrays;
import java.util.Scanner;
public class Example2_5 {
   public static void main(String args[]) {
      int start=0,end,middle;
      int a[] = {12,45,67,89,123,-45,67};
      int N = a.length;
      int minIndex = -1;
      for(int i=0; i<N-1; i++) {     //选择法排序数组
          minIndex = i;
	  for(int j = i+1; j <= N-1;j++){
              if(a[j] < a[minIndex]){
                 minIndex = j;
              }
          }
          if(minIndex!=i){
             int temp = a[i];
             a[i] = a[minIndex];
             a[minIndex] = temp; 
          } 
      }
      System.out.println(Arrays.toString(a));
      Scanner scanner = new Scanner(System.in);
      System.out.println("输入整数,程序判断该整数是否在数组中:"); 
      int number = scanner.nextInt();
      int count =0 ;
      end = N;
      middle=(start+end)/2;
      while(number!=a[middle]){
           if(number>a[middle])
              start=middle;
           else if(number<a[middle])
              end=middle;
           middle=(start+end)/2;
           count++;
          if(count>N/2)
             break;
      }
      if(count>N/2)
         System.out.printf("%d不在数组中.\n",number);
      else
         System.out.printf("%d在数组中.\n",number);
   }
}

小结

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值