zoukankan      html  css  js  c++  java
  • Java核心技术——第3章

    一个简单的Java应用程序

    public class FirstSample
    {
    	public static void main(String[] args)
    	{
    		System.out.println("We will not use 'Hello,World!'");
    	}
    }
    
    • public:访问修饰符(access modifier),用于控制程序的其他部分对这段代码的访问级别

    • class:表明程序中的全部内容都包含在类中

    • FirstSample:类名

      命名规则:必须以字母开头,后面可以是字母数字的组合,但不能使用Java保留字

      命名规范:类名为以大写字母开头的单词,如果由多个单词组成,则每个单词第一个字母大写

    • 源代码文件名必须与公共类的名字相同,并用.java作为拓展名

    • Java区分大小写,main如果写成Main则错误

    注释

    三种方式

    1. 最常用://
    2. 长篇注释:/**/括起来,不能嵌套
    3. 自动生成文档:/**开始,*/结束

    数据类型

    一共8种数据类型:4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char

    整型

    image-20200409125601049

    • Java中,整型的范围与运行Java代码的机器无关,从而解决了移植带来的问题
    • 后缀L或l:长整型
    • 前缀0x或0X:十六进制
    • 前缀0:八进制,容易混淆,尽量别用
    • 0b或0B前缀:二进制
    • Java7开始,可以在数字间加下划线,方便阅读

    注意:Java中没有无符号数

    浮点类型

    image-20200409130559327

    • 后缀F或f:float类型

    • 后缀D或d:double类型

    • 无后缀:double类型

    • 三个特殊的浮点数值:正无穷、负无穷、NaN(不是一个数字)

      检测:

      if(Double.isNaN(x))
      

    char类型

    • 描述了UTF-16编码中的一个代码单元
    • 强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元,最后将字符串作为抽象数据类型处理

    boolean类型

    Java中整数与布尔值之间不能相互转换,区别于C!!!

    例:

    if(x=0)
    

    在Java中会报错!!

    变量

    变量名必须是以字母开头由字母或数字构成的序列,不能出现空格

    变量初始化

    • 声明一个变量之后,必须用赋值语句对变量进行显式初始化,千万别使用未初始化的变量
    • 可以将声明放在代码的任何地方,但尽可能靠近变量第一次使用的地方

    常量

    用关键字final指示常量,且只能被赋值一次

    • static final表示类常量,在该类的所有方法中可用
    • public static final表示其他类的方法也可使用该常量

    运算符

    • 参与/操作的两个操作数都是整数时,表示整数除法,否则,表示浮点除法
    • 整数除以0会产生异常,而浮点数除以0则会得到无穷大或NAN

    数值类型之间的转换

    两个数值进行二元操作时,先要将两个操作数转换成同一种类型,然后计算

    • 若其中有一个为double,则转成double
    • 否则,若其中有一个float,则转成float
    • 否则,若其中有一个long,则转成long
    • 否则,都被转成int

    图中实心箭头表示无精度丢失的转换,虚箭头表示可能有精度丢失

    image-20200409140219652

    强制类型转换

    • double转int:截断小数部分

    • double转int(舍入):

      double x=9.97;
      int nx=(int)Math.round(x);//round返回long类型
      

    关系和boolean运算符

    • &&||按照短路方式来求值的:如果第一个操作数已经能确定表达式的值,第二个操作数就不必计算了
    • Java支持三目运算符

    运算符优先级

    image-20200409141751606

    字符串

    从概念上讲,Java字符串就是Unicode字符序列。Java中没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类String

    子串

    String类的substring方法:从一个较大的字符串中提取出一个子串

    String greeting = "Hello";
    String s = greeting.substring(0,3);
    
    • 第一个参数:开始的位置
    • 第二个参数:不想复制的第一个位置
    • 优点:便于计算子串长度

    拼接

    • 使用+拼接两个字符串

    • 当将一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串

      常用于输出System.out.println("The answer is "+answer);

    不可变字符串

    Java中的String类称为不可变字符串

    • 字符串内容不可修改
    • 字符串可以共享,如果复制一个字符串变量,则原始字符串和复制字符串共享相同的字符,字符串变量类似于c中的char*指针
    • 当字符串变量被赋予其他值时,Java的垃圾回收机制将把原始字符串回收

    检测字符串是否相等

    • s.equals(t):若相等,则返回true,否则返回false,s和t可以是字符串变量,也可以是字符串字面量
    • s.equalsIgnore(t):忽略大小写

    空串与NULL串

    • 空串""是长度为0的字符串,是一个Java对象
    • NULL串:String变量中存放一个特殊值null,表示目前没有任何对象与该变量关联

    码点与代码单元

    • 码点:一个字符所占的空间,如一个UTF-16字符即为一个码点

      int cpCount = str.codePointCount(0,str.length());返回码点数量(实际长度)

      得到第i个码点:

      int index = str.offsetByCodePoints(0,i);
      int cp = str.codePointAt(index);
      
    • 代码单元:char类型是一个采用UTF-16编码表示Unicode码点的代码单元

      int n = str.length();返回代码单元的数量

      char first = str.charAt(0);返回某个位置的代码单元

    String API

    常用API:

    image-20200409220043495

    构建字符串

    1. 先构造一个空的字符串构建器

      StringBuilder builder = new StringBuiler();
      
    2. 每当需要添加内容时,就调用append方法

      builder.append(ch);//添加一个char类型代码单元
      builder.append(str);//添加一个字符串
      
    3. 需要构建字符串时调用toString方法,得到一个String对象

      String completedString = builder.toString();
      

    输入输出

    读取输入

    1. 构建一个Scanner对象,并与”标准输入流“System.in关联

      Scanner in = new Scanner(System.in);
      
    2. 用Scanner对象实现输入操作

      String namee = in.nextLine();//读取输入的一行,包括空格
      String firstName = in.next();//读取一个单词(以空白符为分隔符)
      int age = in.nextInt();//读取一个整数
      
    3. 一定要在开头添加:

      import java.util.*;
      

    格式化输出

    System.out.printf();来实现格式化输出,同c语言中的printf用法

    image-20200410095004811

    image-20200410095041213

    image-20200410095545893

    控制流程

    块作用域

    • 块:一对大括号括起来的若干简单的Java语句
    • 不能再嵌套的两个块中声明同名的变量,区别于C

    确定循环

    注意:在循环中检测两个浮点数是否相等需要格外小心

    for (double x=0;x!=10;x+=0.1);
    

    该循环永远不会结束,因为0.1无法用二进制精确表示

    中断控制流程语句

    Java中支持带标签的break语句,标签必须放在希望跳出的最外层循环之前,并且紧跟一个冒号,注意只能跳出语句块,不能跳入

    image-20200410104411144

    大数值

    • BigInteger类:实现任意精度的整数运算

      BigInteger a = BigInteger.valueOf(100);//将普通数值转换成大数值
      BigInteger c = a.add(b);//c=a+b;
      BigInteger d = c.mutiply(b.add(BigInteger.valueOf(2)));//d=c*(b+2);
      
    • BigDecimal类:实现任意精度的浮点运算

    数组

    创建数组

    • 声明数组变量时,需要指出数组类型(数组元素类型紧跟[ ])和数组变量的名字,然后用new创建数组

      int[] a = new int[100];
      
    • 要想获取数组中元素个数,使用a.length

      for(int i=0;i<a.length;i++)
      
    • 创建一个数字数组时,所有元素初始化为0,boolean数组初始化为false,对象数组初始化为null

    • 一旦创建了数组就不能改变其大小了

    for each循环

    • 可以用来依次处理数组中的每个元素,而不必为指定下标值而分心

    • 格式

      for(elementType x : collection) statment
      

      定义了一个变量x暂存集合中每一个元素,并执行相应的语句

      其中colletion必须是一个数组或是一个实现了Iterable接口的类对象

    数组初始化以及匿名数组

    int[] a = {1,2,3,4,5};//创建数组对象并赋予初始值,不需要调用new
    a = new int[]{2,3,4,5,6,7,8};//创建一个匿名数组给原数组重新赋值
    

    命令行参数

    public Message{
    	public static void main(String[] args){
    		
    	}
    }
    

    如果用下面的形式运行该程序

    java Message -g cruel world
    

    args[0] : "-g"
    args[1] : "cruel"
    args[2] : "world"
    

    其中程序名并不存储在args数组中

    多维数组

    • 声明多维数组

      int[][] a;
      a = new int[10][10];
      
    • 二维数组遍历

      //双重for循环
      for(int i=0;i<a.length;i++)
      	for(int j=0;j<a[i].length;j++)
       
      //双重for each循环
      for(int[] row:a)
      	for(int value:row)
      

    不规则数组

    二维数组相当于是一维数组指针的数组,其中的一维数组指针相互独立,可以自由确定其大小

    如下图所示:

    image-20200410140549292

  • 相关阅读:
    吐槽下博客园
    关于爱情
    CCD 驱动 时序理解
    写在博客的第一天
    51单片机最小系统
    swing之登陆功能
    TDSQL | 在整个技术解决方案中HTAP对应的混合交易以及分析系统应该如何实现?
    TDSQL | 深度解读HTAP系统的问题与主义之争
    硬核干货!TDSQL全局一致性读技术详解|
    35w奖金池,腾讯云TDSQL精英挑战赛等你来战!
  • 原文地址:https://www.cnblogs.com/xkf97/p/12673352.html
Copyright © 2011-2022 走看看