zoukankan      html  css  js  c++  java
  • Java基础

    Java是一门面向对象编程语言,是sun公司开发的,目前被Oracle公司收购。
    Java编程语言具有以下特点:
    简单性、面向对象、分布式、健壮性、安全性、体系结构中立、可移植性、解释型、高性能、多线程、动态性。

    HelloWorld程序


    前面已经成功的安装了JDK,下面看一个简单的Java程序:

      1 public class HelloWorld {
      2     public static void main(String[] args){
      3         System.out.println("Hello,World!");
      4     }
      5  }

    Java区分大小写,如果出现了大小写的拼写错误(main写成了Main),程序将无法运行。
    关键字public称为访问修饰符,关键字class表明Java程序中的全部内容都包含在类中,关键字class后面紧跟类名(HelloWorld)。
    Java中定义类的名字必须以字母开头,后面可以跟字母和数字的任意组合,长度基本上没有限制,但是不能使用Java的保留字(关键字)作为类名。
    标准的命名规范是以大写字母开头的名词,如果名字由多个单词组成,每个单词的第一个字母都应该大写(此称为驼峰命名法,例如:HelloWorld)。
    源代码的文件名必须与公共类的名字相同,并使用.java作为扩展名,因此存储这段代码的文件必须命名为HelloWorld.java。
    每个Java程序必须要有一个main方法。一对大括号表示方法的开始与结束。整个方法中只包含了一条语句,功能是打印一条语句“Hello,World!”。

    注释


    在Java程序中,有三种标记注释的方式,注释中的内容不会执行。
    1.单行注释可以使用“//”,当需要注释多行时,也可以在注释内容的每行前使用“//”。
    2.多行注释也可以使用“/*”和“*/”将注释括起来。
    3.多行注释还可以使用“/**”开头“*/”结束。,这种注释可以用来自动的生成文档。

      1 //第一行注释内容
      2 //第二行注释内容
      3 
      4 /*
      5 注释内容第一行
      6 注释内容第二行
      7 */
      8 
      9 /**
     10 注释内容第一行
     11  注释内容第二行
     12 */
    


    数据类型


    Java是一种强类型语言,意味着必须为每一个变量声明一种类型,在Java中一共有8中基本类型:
    4种整型、2种浮点型、1种用于表示Unicode编码的字符单元的字符类型char和1种表示真值的boolean类型。
    整型用于表示没有小数部分的数值,它允许是负数,4种整型:int、short、long、byte。
    浮点类型用于表示有小数部分的数值。2种浮点类型:float、double。其中double表示这种类型的数值精度是float的两倍(双精度数值)。在很多情况下,float类型的精度很难满足需求,所以只有很少的情况适合使用float类型。
    float类型的数值有一个后缀F或f(0.1F或0.1f),没有F后缀的浮点数值默认为double类型,也可以在浮点数值后面添加后缀D或d。
    char类型用于表示单个字符,其字面量值需要使用单引号括起来('A')。
    boolean类型有两个值:false和true,用来判定逻辑条件。整型值和布尔值之间不能进行转换。
    变量
    在Java中,每个变量都有一个类型,在声明变量时,变量的类型位于变量名之前。

      1 int a;
      2 boolean done;

    Java中完整的语句以分号“;”结束,由于声明是一条完整的语句,所以声明都以分号结束。不能使用Java的保留字作为变量名。
    变量初始化
    声明一个变量之后,必须用赋值语句对变量进行显式的初始化,不能使用未初始化的变量。

      1 int a = 1;

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

      1 final double XER = 3.5;

    关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了,习惯上,常量名使用全大写。
    在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量,可以使用关键字static final设置一个类常量。

      1 public static final double XER = 3.5;

    运算符


    在Java中,使用运算符“+”、“-”、“*”、“/”表示加、减、乘、除运算。当参与“/”运算的两个操作数都是整数时,表示整数除法;否则表示浮点数除法。整数的求余操作(取模)用“%”表示。
    $color{red}{注意:整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。}$
    数值类型之间的转换
    类型转换
    经常需要将一种数值类型转换为另一种数值类型。上图所示6个实心箭头表示转换时没有数据丢失;3个虚线箭头,表示转换时有可能损失精度。
    强制类型转换
    当需要将double类型转换成int类型时,有可能会丢失一些信息,在这种情况下就需要使用强制转换来实现这个操作。
    强制转换的语法格式时在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。

      1 double x = 3.55;
      2 int nx = (int) x;

    此时变量nx的值为3。
    如果想对浮点数进行舍入运算,以便得到最接近的整数,则需要使用Math.round方法:

      1 double x = 3.55;
      2 int nx = (int) Math.round(x);

    现在变量nx的值为4。
    当调用round方法时,仍需要使用强制类型转换(int),是因为round方法返回的结果是long类型,由于存在信息丢失的可能性,所以只有使用显式的强制类型转换才能够将long类型转换成int类型。
    结合赋值和运算符
    可以在赋值中使用二元运算符,这是一种很方便的简写形式:

      1 x += 4; //等价于 x  =  x + 4;

    自增与自减运算符

      1 int a = 10;
      2 a++;

    a++将a的值更改为11。由于这些运算符会改变变量的值,所以它们的操作数不能是数值,10++就不是一个合法的语句。
    上面是运算符放在操作数后面的“后缀”形式,但是花有一种是“前缀”形式:++a。
    后缀和前缀都会使变量值加1,但用在表达式中时,二者就有区别了。前缀形式会先完成加1;而后缀形式会使用变量原来的值,再加1。
    关系运算符和boolean运算符
    Java包含的关系运算符:==(检测相等性)、!=(检测不相等)、<(小于)、>(大于)、<=(小于等于)、>=(大于等于)。
    此外:!表示逻辑“非”运算符;&&表示逻辑“与”运算符;||表示逻辑“或”运算符。
    &&和||运算符时按照“短路”方式来求值的:如果第一个操作数已经能够确定表达式的值,第二个操作数就不必计算了。

      1 x != 0 && 1 / x > x + y;

    如果x等于0,那么第二部分就不会计算,也就不会计算1/x,这样除以0的错误就不会出现。

      1 x != 0 || x > y;

    如果x不等于0,则条件一为true,那么第二部分就不会判断了。
    Java支持三元操作符?:。

      1 x > y ? x : y;

    如果x大于y,返回x,否则返回y,即判断条件之后,返回两个数值中较大的一个数值。
    位运算符
    处理整型类型时,可以直接对组成整型数值的各个位完成操作。位运算符包括:
    &(“and”)、|(“or”)、^(“xor”)、~(“not”)、>>(左移)、<<(右移)、>>>(使用符号位填充高位,不存在<<<运算符)。
    括号于运算符级别
    下面按照从前到后,运算级别由高到低,同级参看结合性。

    运算符 结合性
    [].()(方法调用) 从左向右
    !、~、++、--、+、-、()(概括号为强制类型转换)、new 从右向左
    *、/、% 从左向右
    +、- 从左向右
    <<、>>、>>> 从左向右
    <、<=、>、>=、instanceof 从左向右
    ==、!= 从左向右
    & 从左向右
    ^ 从左向右
    | 从左向右
    && 从左向右
    || 从左向右
    ?: 从右向左
    =、+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=、>>>= 从右向左


    枚举类型

    有时候,变量的值只在一个有限的集合内,为了避免保存值错误,可以自定义枚举类型。枚举类型包括有限个命名的值。

      1 enum Size{SMALL,MEDIUM,LARGE}
      2 Size s = Size.SMALL;//声明枚举类型的变量

    Size类型的变量只能存储这个类型声明中给定的某个枚举值,或者null值,null表示这个变量没有设置任何值。
    字符串
    从概念上讲,Java字符串就是Unicode字符序列。
    Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,即String。每个用双引号括起来的字符串都是String类的一个实例。

      1 String a = "";//空String
      2 String b = "Hello";

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

      1 String b = "Hello";
      2 String s = b.substring(0,3);

    则创建了一个由字符“Hel”组成的子串。substring方法的第二个参数是不想复制的第一个位置。即示例代码复制不包括3。
    拼接
    Java中允许使用+号来拼接两个字符串。

      1 String a = "Hello";
      2 String b = "World";
      3 String c = a + b;

    示例代码将“HelloWorld”赋给变量c(拼接的两个字符串之间没有空格)。如果b是其他Java对象,例如b是int类型的数值2,则b将被转换成字符串,c为“Hello2”,任何的Java对象都可以被转换成字符串。
    不可变字符串
    String类没有提供用于*修改*字符串的方法,所以String类对象称为*不可变字符串*。
    检测字符串是否相等
    使用equals方法检测两个字符串是否相等:

      1 String a = "Hello";
      2 String b = "Hello";
      3 System.out.println(a.equals(b));
      4 System.out.println("Helloc".equals(b));

    如果字符串a于b相等,返回true,否则返回false。字符串字面量比较也是合法的,例如:"Helloc".equals(b)。
    空串与Null串
    空串""是长度为0的字符串,是一个Java对象,有自己的串长度(0)和内容(空)。判断一个字符串是否为空使用如下代码语句:

      1 if(str.length() == 0){}
      2 if(str.equals("")){}

    String变量还可以存放一个特殊值null,表示目前没有任何对象与该变量关联。判断一个字符串是否是null使用如下代码语句:

      1 if(str == null){}

    要判断一个字符串既不是null也不为空串,使用如下代码语句:

      1 if(str != null && str.length() != 0){}

    注意:必须先判断str不为null。

    控制流程


    块作用域
    块(即复合语句)是指由一对大括号括起来的若干条简单的Java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。
    条件语句
    条件语句的格式为:

      1 if(条件语句) {
      2     执行语句1;
      3     执行语句2;
      4 ...
      5 } else {
      6     执行语句3;
      7     执行语句4;
      8 ...
      9 }

    else部分是可选的,else子句与最邻近的if过构成一组。
    循环
    当条件为true时,while循环执行一条语句(也可以是一个语句块);如果开始循环条件的值就为false,则while循环体一次也不执行。格式如下:

      1 while(条件语句) {
      2     执行语句1;
      3     执行语句2;
      4 }

    do...while
    do…while循环语句和while循环语句功能类似,格式如下:

      1 do {
      2      执行语句1;
      3      执行语句2;
      4 } while(条件语句);

    关键字do后面{}中的执行语句是循环体。
    do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
    确定循环
    for循环语句时支持迭代的一种通用结构,利用每次迭代之后更新的计数器或类似的变量来控制迭代次数。
    for语句的第1部分通常用于对计数器初始化;第2部分给出每次新一轮循环执行前要检测的循环条件;第3部分指示如何更新计数器。

      1 for(int i = 0;i<10;i++){
      2     System.out.println("i的值为:" + i);
      3 }

    当for语句的第1部分中声明了一个变量之后,这个变量的作用域就为for循环的整个循环体。整个定义在for语句内部的变量就不能在循环体之外使用。所以可以在各自独立的不同的for循环中定义同名的变量。
    多重选择语句
    switch语句将从与选项值相匹配的case标签处开始执行直到遇到break语句,或者执行到switch语句的结束处
    为止。如果没有相匹配的case标签,而有default子句,就执行这个子句。
    case标签可以是:
    1.类型为char、byte、short或int的常量表达式。
    2.枚举常量。
    3.字符串字面量。

      1 enum Size{SMALL,MEDIUM,LARGE}
      2  public static void main(String[] args){
      3      Size s = Size.SMALL;
      4      switch (s){
      5          case SMALL:
      6              System.out.println(s);
      7              break;
      8          case LARGE:
      9              System.out.println(s);
     10              break;
     11          case MEDIUM:
     12              System.out.println(s);
     13              break;
     14          default:
     15              System.out.println("无符合条件值");
     16 
     17          }
     18     }

    中断控制流程语句
    break语句,用于退出循环语句,上面switch语句中也有使用。
    Java还提供了一种带标签的break语句,用于跳出多重循环的嵌套语句。

      1 write:
      2 while(条件语句1){
      3     for(int i = 0;i<10;i++){
      4         if(条件语句3){
      5             执行语句;
      6             break write;
      7         }
      8     }
      9 }

    write:就是一个标签,标签必须放在希望跳出的最外层循环之前,并且必须紧跟一个冒号。
    continue语句将控制转移到最内层循环的首部。

      1 public static void main(String[] args){
      2     Scanner in = new Scanner(System.in);
      3     int sum = 1;
      4     int goal = 10;
      5     while(sum < goal){
      6         System.out.println("Please enter a number: ");
      7         int n = in.nextInt();
      8         if(n < 0){
      9             System.out.println("执行continue语句");
     10             continue;
     11         }
     12         System.out.println(sum += goal);
     13     }
     14 }

    当n < 0时,continue语句越过了当前循环体的剩余部分,立刻跳到while循环首部。
    如果continue语句用在for循环中,则直接跳到for循环的“更新”部分(例如:条件语句中的i++)。

    大数值


    如果基本的整数和浮点数精度不能够满足需求,可以使用java.math包中的两个类:BigInterger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInterger实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。

  • 相关阅读:
    无锁数据结构(Lock-Free Data Structures)
    Grouping Sets:CUBE和ROLLUP从句
    SQL Server里Grouping Sets的威力
    第18/24周 乐观并发控制(Optimistic Concurrency)
    SQL Server里PIVOT运算符的”红颜祸水“
    数据库收缩:NOTRUNCATE与TRUNCATEONLY
    在SQL Server里为什么我们需要更新锁
    SQL Server里的自旋锁介绍
    SQL Server里的闩锁介绍
    配置内存中OLTP文件组提高性能
  • 原文地址:https://www.cnblogs.com/Dcl-Snow/p/10606056.html
Copyright © 2011-2022 走看看