java核心技术卷1第3章 Java基本的程序设计结构

3.1 一个简单的Java应用程序

  1. java大小写敏感
  2. public关键字为访问修饰符,用于控制程序的其他部分对于这段代码的访问级别
  3. 关键词class表示java程序中的全部内容都包含在类中。只需要把类作为一个加载程序逻辑的容器,程序逻辑定义了应用程序的行为。java应用程序中的全部内容都必须放置在类中。
  4. 关键词class后面紧跟类名,java类名要求以大写字母开头的名字,驼峰式命名,FirstSample,原则上不允许出现下划线
  5. java源代码的文件名必须与公有类的名字相同,并且用.java作为后缀名。因此该源代码存储的文件名为FirstSample.java
  6. 每个java应用程序都必须要有一个main方法,一般main方法的访问修饰符都是public
public class FirstSample {
    public static void main(String[] args){
        System.out.println("javaLearn hello"); // 输出换行
        System.out.print("hello"); // 输出不换行
        System.out.print("hello");
    }
}

在这里插入图片描述
java调用的通用方法如下,点号用于调用方法。

object.method(parameters)

如示例即为System.out对象调用其println和print方法

3.2 注释

  1. 单行注释
//
  1. 多行注释,不可嵌套
/*
*/
  1. 长篇注释,可用于自动生成文档,一般作为java源代码的头部注释
/**
*/

在这里插入图片描述

3.3 java的8种基本数据类型

java是强类型语言,必须为每一个变量声明一种类型,java有8种基本数据类型
在java中,所有数值类型所占据的字节数与平台无关
1. 整型(4种),用于表示没有小数部分的数值,允许负数。

  • int(4字节)
  • short(2字节)
  • long(8字节)
    长整型数值有一个后缀L,如40000000000L
    十六进制数值有一个前缀0x,如0xCAFE
    八进制数值有一个前缀0,如010对应十进制的8,(容易混淆最好不用八进制)
  • byte(1字节)
    在这里插入图片描述

2. 浮点类型(2种),用于表示有小数部分的数值。

  • float(4字节)单精度浮点数
  • double(8字节)双精度浮点数

float类型的数值有一个后缀F,如3.402F
没有后缀F的浮点数值默认为double类型,也可以添加后缀D

特殊浮点数:Double.POSITIVE_INFINITY表示正无穷大;Double.NEGATIVE_INFINITY表示负无穷大;Double.NaN表示NaN,即不是一个数字;Double.isNaN(3.14),用于判断3.14是否为数字
在这里插入图片描述

3. 字符类型char,表示Unicode编码的字符单元
char类型用于表示单个字符,通常用来表示字符常量。

char类型常量用单引号表示,如:'A’是编码为65所对应的字符常量。与双引号的"A"不同,"A"是一个包含字符A的字符串。

除了可以采用转义序列符\u表示Unicode代码单元的编码,还有一些用于表示特殊字符的转义序列符。
在这里插入图片描述
在Java中,char类型用UTF-16编码描述一个代码单元。
我们强烈建议不要在程序中使用char类型,除非确实需要对UTF-16代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示

4. 布尔类型boolean,用于表示真值,true/false,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换(c语言中非0位true,0为false)。

3.4 变量

  1. java的变量名必须是一个以字母开头的由字母或数字构成的序列。
  2. 不能将变量名命名为Java保留字。
  3. 尽量不要在一行中声明多个变量,逐一声明每个变量可以提高程序可读性。

3.4.1 变量初始化

  1. 声明一个变量之后,必须用赋值语句对变量进行显式初始化,否则无法使用。也可以变量的声明和初始化放在一行里。
int vacationDays;
vacationDays = 12;

int vacationDays = 12;
  1. 在Java中,变量的声明尽可能地靠近变量第一次使用的地方,这是一种良好的程序编写风格

3.4.2 常量

  1. 使用关键字final声明常量,且只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,常量名使用大写。
 public class FirstSample {
    public static void main(String[] args){
        final double CM_PER_INCH = 2.54;
        double paperWidth = 8.5;
        double paperHeight = 11;
        System.out.println("Paper size in centimeters: "+
                paperWidth * CM_PER_INCH + " by " + paperHeight *CM_PER_INCH);

    }
}
Paper size in centimeters: 21.59 by 27.94
  1. 在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。
  2. 需要注意,类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也可以使用这个常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量,即 public static final
public class FirstSample {
    public static void main(String[] args){
        double paperWidth = 8.5;
        double paperHeight = 11;
        System.out.println("Paper size in centimeters: "+
                paperWidth * CM_PER_INCH + " by " + paperHeight *CM_PER_INCH);
    }
    public static final double CM_PER_INCH = 2.54;
}

3.5 运算符

  1. 在Java中,使用算术运算符+、-、*、/ 表示加、减、乘、除运算。
  2. 当参与 / 运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。
  3. 整数的求余操作(有时称为取模)用%表示。例如,15/2等于7,15%2等于1,15.0/2等于7.5。
  4. 需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
  5. 可以在赋值语句中采用一种简化的格式书写二元算术运算符。
    例如, x += 4; 等价于 x = x + 4;
    (通常,将运算符放在赋值号的左侧,如*= 或 %=。)

3.5.1 自增与自减运算符

++m 先加1后计算
m++ 先计算后加1
在这里插入图片描述

3.5.2 关系运算符与boolean运算符

  1. 检测相等 ==
  2. 检测不相等 !=
  3. 逻辑与 &&
  4. 逻辑或 ||
  5. 逻辑非 !
    &&|| 是按照“短路”方式求值的。如果第一个操作数已经能够确定表达式的值,第二个操作数就不再计算。
  6. Java支持三元操作符 ?:
condition ? expression1 : expression2

3.5.3 位运算符

在处理整型数值时,可以直接对组成整型数值的各个位进行操作。这意味着可以使用屏蔽技术获得整数中的各个位。

&  // and
|  // or
^  // xor
~  // not
<<  // 左移
>>  // 右移,用符号位填充高位,算术移位
>>>  // 右移,用0填充高位,逻辑移位

在这里插入图片描述

3.5.4 数学函数与常量

import static java.lang.Math.*; // 通过静态导入Math类,就不必再方法名和常量名前面添加前缀"Math"
public class FirstSample {
    public static void main(String[] args){
        // 常用数学计算类:Math类
        System.out.println(Math.sqrt(4));  // 2.0  4的平方根
        System.out.println(Math.pow(2, 5));  // 32.0  2的5次方
        System.out.println(Math.exp(1));  // 2.718281828459045 指数函数
        System.out.println(Math.log(10)); // 2.302585092994046 以e为底的log
        System.out.println(Math.log10(10)); // 1.0 以10为底log
        System.out.println(PI);  // π 3.141592653589793
        System.out.println(E);  // 自然常量e 2.718281828459045
        System.out.println(Math.round(9.99));  // 对9.99进行四舍五入,输出10
        System.out.println(Math.sqrt(PI));  // 不使用静态导入 1.7724538509055159
        System.out.println(sqrt(PI));  // 使用静态导入 1.7724538509055159
    }

}

Math.round(x) 返回最接近x的整数,返回的结果为long类型,若有两个返回接近的整数,则取最大的那个.

		int[] test = {
                Math.round(2.4f), // 2
                Math.round(2.5f), // 3, 2和3取大的3
                Math.round(2.6f), // 3
                Math.round(-2.4f), // -2
                Math.round(-2.5f), // -2, -2和-3取大的-2
                Math.round(-2.6f) // -3
        };
        for(int i = 0; i< test.length; i++)
        {
            System.out.print(test[i]+",");
        }

3.5.5 数值类型之间的转换

在这里插入图片描述
数值类型之间的合法转换中,标红的三个转换(int --> float)(long --> float) (long --> double), 可能会有精度损失。

int j = 123456789;
float f = j;
System.out.println("j=" + j + " f=" + f);

输出结果如下,丢失了精度(小数点后第七位)

j=123456789 f=1.23456792E8

当使用上面两个数值进行二元操作时(例如n + f,n是整数,f是浮点数),先要将两个操作数转换为同一种类型,然后再进行计算。
• 如果两个操作数中有一个是double类型的,另一个操作数就会转换为double类型。
• 否则,如果其中一个操作数是float类型,另一个操作数将会转换为float类型。
• 否则,如果其中一个操作数是long类型,另一个操作数将会转换为long类型。
• 否则,两个操作数都将被转换为int类型。

3.5.6 强制类型转换

强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。

// 强制类型转换 (目标类型)
        double x= 3.856;
        int nx = (int) x;
        System.out.println("x=" + x + ",nx=" +nx); // x=3.856,nx=3
        // 四舍五入求最接近的整数,用Math.round(),返回类型为long
        long ny = Math.round(x);
        System.out.println("x=" + x + ",ny=" +ny); // x=3.856,ny=4
        // 需要int则使用显式的强制类型转换将long转换为int
        int nz = (int)Math.round(x);
        System.out.println("x=" + x + ",nz=" +nz); // x=3.856,nz=4

如果想对浮点数进行舍入运算,以便得到最接近的整数(在很多情况下,希望使用这种操作方式),那就需要使用Math.round方法。
Math.round() 方法返回值为long类型,如图所示如果定义变量ny为int,则会提示错误,需要在Math.round()之后进行强制类型转换。
在这里插入图片描述

3.5.7 括号与运算符级别

在这里插入图片描述
在这里插入图片描述

// 3.5.7 括号与运算符级别
        int aa=1,bb=1,cc=1;
        System.out.println("aa=" + aa + ",bb=" +bb + ",cc=" + cc); // aa=1,bb=1,cc=1
        aa += bb += cc; // +=是右结合运算符,等同于 aa += (bb += cc)
        System.out.println("aa=" + aa + ",bb=" +bb + ",cc=" + cc); // aa=3,bb=2,cc=1

在这里插入图片描述
关系运算符的 instanceof 操作符用于判断一个引用类型所引用的对象是否是一个类的实例。操作符左边的操作元是一个引用类型,右边的操作元是一个类名或者接口,形式如下:
obj instanceof ClassName 或者 obj instanceof InterfaceName
关系运算符产生的结果都是布尔型的值,一般情况下,在逻辑与控制中会经常使用关系运算符,用于选择控制的分支,实现逻辑要求。

(????)关系运算符中的"==“和”!="既可以操作基本数据类型,也可以操作引用数据类型。操作引用数据类型时,比较的是引用的内存地址。所以在比较非基本数据类型时,应该使用equals方法。

3.5.8 枚举类型

有时候,变量的取值只在一个有限的集合内。例如:销售的服装或比萨饼只有小、中、大、超大这四种尺寸。这种情况下,可以自定义枚举类型。枚举包括有限个命名的值。枚举一般用大写表示;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值