3. JavaSE 基础语法

注释

注释不会被执行,是我们写给代码阅读者的。

java中的注释有三种:

  • 单行注释: //,只能注释当前行。
    //输出Hello

  • 多行注释: /**/ ,可用于注释一段文字。

/*
 这是我们程序的入口
 main方法也是程序的主线程
*/

文档注释: /** */ 用于生成API文档,配合JavaDoc。

/*
*@Description User类 
* @Author panbin
**/

标识符

下面是java定义的关键字

关于Java 标识 符,有以下几点需要注意:

  • 所有的标识符都应以字母(A-Z 或者 a-z),美元符($)、下划线(_)开始
  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合
  • 不能使用关键字作为变量名或方法名。
  • 标识符是大小写敏感的
  • 合法的标识符举例: apple、$salary、_value、_1_value
  • 非法的标识符举例:123ab、-salary、#abc

数据类型

强弱类型语言

1.强类型语言
也称为强类型定义语言。要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。

Java、.NET、C++等都是强制类型定义的。一旦一个变量被指定了某个数据类型,如果不经过转换,那么它就永远是这个数据类型了。

优缺点:安全性高,运行效率相对较慢;

2.弱类型语言
也称为弱类型定义语言。像vb,php,javascript等。

数据类型

Java的数据类型分为两大类:

  • 基本数据类型(primitive type),有8大数据类型,其它都是引用类型
  • 引用数据类型(reference type)

8大基本数据类型:

  • 整数:
    1)byte 1字节
    2) short 2字节
    3) int(默认) 4字节
    4) long 8字节

  • 浮点数:

    1. float 4字节
    2. double(默认) 8字节
  • 字符:char 2字节

  • 布尔型:boolean 1位

各类型的最大值与最小值

public static void main(String[] args){
       //byte
       System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
       System.out.println("包装类:java.lang.Byte");
       System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
       System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
       System.out.println();

       //short
       System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
       System.out.println("包装类:java.lang.Short");
       System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
       System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
       System.out.println();

       //int
       System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
       System.out.println("包装类: java.lang.Integer");
       System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
       System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);

       //long
       System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
       System.out.println("包装类:java.lang.Long");
       System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
       System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);

       //float
       System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
       System.out.println("包装类:java.lang.Float");
       System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
       System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);

       //double
       System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
       System.out.println("包装类: java.lang.Double");
       System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
       System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);

       //char
       System.out.println("基本类型:char 二进制数:" + Character.SIZE);
       System.out.println("包装类:java.lang.Character");
       //以数值形式而不是字符形式将Chracter.MIN_VALUE输出到控制台
       System.out.println("最小值:Character.MIN_VALUE=" + (int)Character.MIN_VALUE);
       //以数值形式而不是字符形式将Chracter.MAX_VALUE输出到控制台
       System.out.println("最大值:Character.MAX_VALUE=" + (int)Character.MAX_VALUE);

   }

类型使用实例

public static void main(String[] agrs){
        //整型
        int i1 = 100;
        //长整型
        long i2 = 998877665544332211L;
        //短整型
        short i3 = 235;
        //浮点型
        double d1 = 3.5; //双精度
        double d2=3;

        float f1 = (float)3.5; //单精度
        float f2 = 3.5f; //单精度

        //布尔型 boolean true真/flase假
        boolean isPass=true;
        boolean isOk = false;
        boolean isBig = 5>8;
        if(isPass){
            System.out.println("通过了");
        }else{
            System.out.println("未通过");
        }

        //单字符
        char f = '女';
        char m = '男';
}

什么是字节

  • 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数
  • 字节(byte,B):是计算机上数据处理的基本单位 ,习惯上用大写B表示
  • 1B(byte) = 8bit,1字节等于位。
  • 字符:指计算机中使用的字母、数字、字和符号
    • 1bit表示1位
    • 1byte表示一个字节 1B=8b
    • 1024B = 1KB, 1024KB = 1M, 1024M = 1G

整型拓展

二进制:0b 开始
八进制 :0 开始
十进制 :10 ,99
十六进制:0x 开始

浮点型拓展

浮点类型float、double的数据不适合在不容许舍入误差的金融计算领域。
如果需要进行不产生会舍入误差的精确计算,需要使用Bigdecimal类。

//浮点型拓展
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);  //false

float d1 = 2131231231f;
float d2 = d1 + 1;
if(d1==d2){
    System.out.println("d1==d2");//d1==d2
}else{
    System.out.println("d1!=d2"); 
}

最好完全避免使用浮点数比较!
大数值: Java.math下面的两个类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。BigInteger实现了任意精度的整数运算。BigDecimal实现了任意精度的浮点运算。

字符型拓展

单引号用来表示字符常量。例如'A'是一个字符,它与"A"是不同的,"A"表示一个字符串。
char类型用来表示Unicode编码表中的字符。
Unicode编码被设计用来上处理各种语言的所有文字,它占2个字节(2字节=16位 2的16次方=65536),可允许有65536个字符;

 //字符拓展
  char c1 = 'a';
  char c2 = '中';
  char c3 = '\u0061';
  System.out.println(c1);
  System.out.println((int)c1);
  System.out.println(c2);
  System.out.println((int)c2);
  System.out.println(c3);

Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为
u表示Unicode)

char c3 = '\u0061';
System.out.println(c3);  //a

常用的转义字符

/* 
 
\b  退格(Backspace)  \u0008
\n  换行               \u000a
\r  回车               \u000d
\t  制表符(tab)       \u0009
\'  双引号              \u0022
\"  单引号              \u0027
\\  反斜杠              \u005c
*/

布尔型拓展

boolean类型(一位,不是一个字节),就是0 | 1
boolean类型有两个值 ,true和false,不可以0或非 0 的整数替代 true 和 false, 这点和C语言不同。
boolean 类型用来判断逻辑条件,一般用于程序流程控制。
boolean falg = false;
if(falg){
//true分支
}else{
//false分支
}

类型转换

由于java是强类型语言,所以进行有些运算的时候,要用到类型转换。

整型、实型(常量)、字符型数据可以混合运算。

运算中,不同的数据先转化为同一类型,然后进行运算。

转换从低级到高级(根据容量来看)。
低 ------------------------------------> 高
byte,short,char->int ->long ->float -> double

数据类型转换必须满足以下规则:

  • 不能对boolean类型进行类型转换。
  • 不能把对象类型转换成不相关类的对象。
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
  • 转换过程中可能导致溢出或损失精度,例如:
int i = 128;
byte b = (byte)i;  //byte类型是8位,最大值为127,所以当int强制转换为byte类型时,值128会导致溢出
  • 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
(int)23.7 == 23;
 (int) -45.89f = -45;

自动类型转换

自动类型转换:容量小的类型可以自动转换为容量大的数据类型。

char c1 = 'a'; //定义一个char类型
int i1 = c1; //char自动类型转换为int
System.out.println("char自动类型转换为int后的值等于" + i1); //97
char c2 = 'A';//定义一个char类型
int i2 = c2 + 1; //char 类型和 int 类型计算
System.out.println("char类型和int计算后的值等于" + i2); //66

强制类型转换

强制类型转换,以被称为造型,用于显示的转换一个数值的类型。

在有可能丢失信息的情况下进行的转换是通过造型来完成的,但可能造成精度降低或者溢出。

强制类型转换的语法格式:(type)var, type表示要将值var转换成的目标数据类型。条件是转换的数据类型必须 是兼容的。

 double x = 3.14;
 int nx = (int)x; //值为3

char c = 'a';
int d = c+1;
System.out.println(d); //98
System.out.println((char)d); //b

当将一种类型强制转换成另一种类型时,而又超出了目标类型的表示范围时,变会被截断成为一个完全不同的的值 ,溢出。

int x = 300;
byte bx = (byte)x; //值为44

常见错误和问题

  • 操作比较大的数时,留意是否溢出,尤其是整数操作时
int money = 1000000000; //10亿
int years = 20;
int total = money * years; //返回的是负数
long total1 = money * years; //返回的仍然是负数。默认是int,因此结果会转int值,再转long。但是已经发生了数据丢失。
long total2 = money*((long)years); //先将一个因子变成long,整个表达式发生提升。全部用long来计算。
System.out.println(total);
System.out.println(total1);
System.out.println(total2);
  • L和I的问题
    1)不要命名名字为I的变量
    2)long类型使用大写L不要用小写。
int l = 2;
long a = 23451l;
System.out.println(l + 1); //3
System.out.println(a); //23451

JDK7扩展

JDK7新特性:二进制整数

由于我们在开发中也经常使用二进制整数,因此JDK7为我们直接提供了二进制整数的类型。

变量,常量

  • 变量是什么:就是可以变化的量
  • Java是一种强类型语言,每个变量都必须声明其类型
  • Java变量是程序中最基本的存储单元,要素包括变量名、变量类型和作用域。
//数据类型 变量名 = 值;
type varName [=value][{,varName[=value]}];
//可以使用逗号隔开同时定义多个类型的变量,但不建议在一行定义多个变量

变量作用域

  • 类变量(static)
  • 实例变量
  • 局部变量
public class Variable{
  static int num = 0; //类变量
  String str = "hello world"; //实例变量
  public void method(){
    int i = 0; //局部变量
  }
}

常量

  • 常量:初始化后不能再改变的值,不会变动的值。
  • 可以理解为一种特殊的变量,其值被设定后,在程序运行过程不请允许我被更改。
//常量一般用大写字符
final 常量名=值;
final double PI=3.14;
//修饰符 不存在先后顺序,static可以写final后面
static final double PI=3.14;  //类变量,该类下的全局范围

变量的命名规范

  • 所有变量、方法、类名:见名知意
  • 类成员变量:首字母小写 + 驼峰原则:lastName
  • 局部变量:首字母小写 + 驼峰原则
  • 常量:首字母大写和下划线:MAX_VALUE
  • 类名:首字母大写+驼峰原则:Person,Student
  • 方法名:首字母小写+驼峰原则:run(),fastRun()

运算符

自增自减运算符

// ++自增 --自减  单目运算符
int a = 3;
int b = a++; //b=a, a=a+1 先赋值 即b=3 a=4
int c = ++a;  //a=a+1,c=a 先自增 即a=5 c=5

System.out.println(a); //5
System.out.println(b); //3
System.out.println(c); //5 
//幂运算  2^3  2*2*2=8
double pow = Math.pow(2,3); //(底数, 指数)double型
System.out.println(pow); //8
//扩展:笔试题 i=5 s=(i++)+(++i)+(i--)+(--i) s=?
int i=5;
int s=(i++)+(++i)+(i--)+(--i);
System.out.println(s); //24

逻辑运算符

  • && 逻辑与运算:两个变量都为真,结果为true
  • || 逻辑或运算:两个变量有一个为真,结果为true
  • ! 取反,真变为假,假变为真
//与(and) 或(or) 非(取反) 
boolean a = true;
boolean b = false;

System.out.println(a&&b); //false
System.out.println(a||b); //true
System.out.println(!(a&&b)); //true

int c=5;
boolean d = (c<5)&&(c++<5);//第一个值为false,后面就不进行判定了
System.out.println(d); //false
System.out.println(c); //5 c++未执行

位运算

/*
  A = 0011 1100
  B = 0000 1101
  A&B 0000 1100 按位与
  A|B 0011 1101 按位或
  A^B 0011 0001 异或
  ~B  1111 0010 非

  面试题:2*8 怎么算最快? 2<<3
  <<左移  *2 效率极高!!
  >>右移  /2
*/
System.out.println(2<<3); //16

三元运算符

// x ? y : z
//如果x为真,则结果为y,否则为z
//if(x) y; else z;
int score = 80;
String type = score<60?"及格":"不及格";
System.out.println(type); //及格

包机制

  • 为了更好的组织类,Java提供了包机制,用于区分类名的命名空间

  • 包的语法格式:

package pkg1[.pkg2[.pkg3...]];

  • 一般利用公司域名倒置作为包名; com.panbin.www
  • 为了能够使用一个包的成员,需要在Java程序中导入该包

import package1[.package2...].(className|*); //通配符* 导入包下所有的类

JavaDoc生成文档

  • javadoc命令是用来生成自己API文档的

  • 参数信息:

    @author 作者名
    @version 版本号
    @since 指明最早用的jdk版本
    @param 参数名
    @return 返回值
    @throws 异常抛出情况

  • API文档:

/**
 * @author Kuangshen
 * @version 1.0
 * @since 1.8
 */
public class Demo05 {
    String name;

    /**
     * @author kuangshen
     * @param name
     * @return
     * @throws Exception
     */
    public String test(String name) throws Exception{
        return name;
    }
}

1.打开某个类所在的文件夹下的cmd命令行
2.输入:javadoc -encoding UTF-8 -charset UTF-8 Doc(类名).java
3.会自动生成该类有关的API文档,查看文件夹发现多了一文件
4.打开 index.htm (首页) 查看文档注释

posted @ 2022-03-01 17:35  panbin_2006  阅读(29)  评论(0编辑  收藏  举报