基础语法


标识符

定义:类名、变量名以及方法名都被称为标识符。

规则:所有的标识符都应该以字母(A-Z或者a-z),美元符($)、或者下划线(_)开始,

           首字符之后可以是字母(A-Z或者a-z),美元符($)、下划线(_)或数字的任何字符组合

注释

单行注释:// 注释内容

单行注释:/*... 注释内容....*/

文本注释:/**.. 注释内容....*/

文档注释位置
(1)类注释。类注释用于说明整个类的功能、特性等,它应该放在所有的“import”语句之后,在class定义之前。
    这个规则也适用于接口(interface)注释。    

(2)方法注释。方法注释用来说明方法的定义,比如,方法的参数、返回值及说明方法的作用等。方法注释应该放在它所描述的方法定义前面。    

(3)属性注释。默认情况下,javadoc只对公有(public)属性和受保护属性(protected)产生文档——通常是静态常量。    

(4)包注释。类、方法、属性的注释都直接放到Java的源文件中,而对于包的注释,无法放到Java文件中去,只能通过在包对应的目录中添加一个package.html的文件来达到这个目的。当生成HTML文件时,package.html文件的<BODY>和</BODY>部分的内容将会被提取出来当做包的说明。关于包注释,后面还会有更进一步的解释。    

(5)概要注释。除了包注释外,还有一种类型的文档无法从Java源文件中提取,就是对所有类文件提供概要说明的文件。同样的,也可以为这类注释单独新建一个HTML文件,这个文件的名字为“overview.html”,它的<BODY>和</BODY>标记之间的内容都会被提取。

  •     @author:作者。
  •     @version:版本。
  •     @docroot:表示产生文档的根路径。
  •     @deprecated:不推荐使用的方法。
  •     @param:方法的参数类型。
  •     @return:方法的返回类型。
  •     @see:用于指定参考的内容。
  •     @exception:抛出的异常。
  •     @throws:抛出的异常,和exception同义

数据类型

Java的八种基本类型:(按字节来分)

  • boolean   布尔型   1个字节 8bit(8位)
  • byte     字节类型   1个字节
  • char     字符类型   2个字节
  • short     短整型     2个字节
  • int          整型        4个字节
  • float      浮点型(单精度)4个字节
  • long      长整型      8个字节
  • double   双精度类型  8个字节

Java中默认的整数类型是int,如果要定义为long ,则要在数值后加上L或者l

默认的浮点型是双精度浮点,如果要定义float,则要在数值后面加上f或者F

float数据类型及double数据类型

1 范围

float和double的范围是由指数的位数来决定的。

float的指数位有8位,而double的指数位有11位,分布如下:

float:

1bit(符号位)

8bits(指数位)

23bits(尾数位)

double:

1bit(符号位)

11bits(指数位)

52bits(尾数位)

于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

2 精度

float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。

float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;

double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位。

 

变量

通过三个元素来描述变量:变量类型,变量名以及变量值。

类变量:

  • 在类中以static关键字声明。
  • 静态变量可以通过:ClassName.VariableName的方式访问。

成员变量:

  • 成员变量在对象创建的时候创建,在对象被销毁的时候销毁;
  • 引用类型的成员变量的默认值是null

局部变量

  • 在方法中定义
  • 不能使用访问修饰符修饰
  • 局部变量是在栈上分配的
  • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

常量

使用final修饰的变量,它的值被设定后,在程序运行过程中不允许被改变。

常量名一般使用大写字符。

运算符

算术运算符

操作符描述例子
+加法 - 相加运算符两侧的值A + B 等于 30
-减法 - 左操作数减去右操作数A – B 等于 -10
*乘法 - 相乘操作符两侧的值A * B等于200
/除法 - 左操作数除以右操作数B / A等于2
取余 - 左操作数除以右操作数的余数B%A等于0
++自增: 操作数的值增加1B++ 或 ++B 等于 21(区别详见下文)
--自减: 操作数的值减少1B-- 或 --B 等于 19(区别详见下文)

关系运算符

运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B)为假(非真)。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(A != B) 为真。
检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B)非真。
检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A <B)为真。
>=检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。(A> = B)为假。
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B)为真。

位运算符

操作符描述例子
如果相对应位都是1,则结果为1,否则为0(A&B),得到12,即0000 1100
|如果相对应位都是0,则结果为0,否则为1(A | B)得到61,即 0011 1101
^如果相对应位值相同,则结果为0,否则为1(A ^ B)得到49,即 0011 0001
按位取反运算符翻转操作数的每一位,即0变成1,1变成0。(〜A)得到-61,即1100 0011
<< 按位左移运算符。左操作数按位左移右操作数指定的位数。A << 2得到240,即 1111 0000
>> 按位右移运算符。左操作数按位右移右操作数指定的位数。A >> 2得到15即 1111
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。A>>>2得到15即0000 1111

逻辑运算符

操作符描述例子
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
| |称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A | | B)为真。
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真。

赋值运算符

操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C -
 A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C * = A等价于C = C * A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A等价于C = C / A
(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A
<< =左移位赋值运算符C << = 2等价于C = C << 2
>> =右移位赋值运算符C >> = 2等价于C = C >> 2
&=按位与赋值运算符C&= 2等价于C = C&2
^ =按位异或赋值操作符C ^ = 2等价于C = C ^ 2
| =按位或赋值操作符C | = 2等价于C = C | 2

其他运算符:条件运算符(?:),instanceof 运算符

 

运算符优先级

类别操作符关联性
后缀() [] . (点操作符)左到右
一元+ + -- !〜从右到左
乘性 * /%左到右
加性 + -左到右
移位 >> >>>  << 左到右
关系 >> = << = 左到右
相等 ==  !=左到右
按位与左到右
按位异或^左到右
按位或|左到右
逻辑与&&左到右
逻辑或| |左到右
条件?:从右到左
赋值= + = - = * = / =%= >> = << =&= ^ = | =从右到左
逗号左到右

 

数值类型转换

自动类型的提升

强制类型转换

 

循环结构

  • while 循环
  • do…while 循环
do {
       //代码语句
}while(布尔表达式);
  • for 循环
for(初始化; 布尔表达式; 更新) {
    //代码语句
}

for(声明语句 : 表达式)
{
   //代码句子
}

 

分支结构 

  • if 语句
  • switch 语句
switch(expression){
    case value :
       //语句
       break; //可选
    case value :
       //语句
       break; //可选
    //你可以有任意数量的case语句
    default : //可选
       //语句
}

 

访问控制修饰符

访问控制修饰符 :public,protected,default, private

 
 类内部 包内子类 外部包
 publicYYYY
protectYYY 
defaultYY  
privateY   


关键字

final

  • 1.修饰类:当用final修饰一个类时,这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法,成员变量可以根据需要设为final
  • 2.修饰方法:final方法不能被覆写。
  • 3.修饰变量:对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
  • 4.修饰方法的参数:防止修改这个参数的值,同时也是一种声明和约定,强调这个参数是不可变的。局部变量以及参数中的final,并不能提升我们的性能,它甚至不会被写进字节码中

this

  1. this关键字可以在方法内使用,用来表示“调用方法的那个对象”的引用。因为编译器会将当前对象的引用作为第一个参数传入调用的方法。这个引用可以用this关键字表示,
  2. this语句,可以在构造器中调用其它构造器

super

  1. 用来表示父类对象的引用
  2. super语句,在构造器中调用父类构造器

static:

1)修饰方法

  用static修饰的方法可以通过类名直接引用,无需创建任何对象。这是static方法的主要用途。在static方法内部不能调用非静态方法,反过来是可以的

2)修饰成员变量

使用static关键字修饰的成员变量,会在类加载的时候在內存中分配空间,被所有的对象所共享,在内存中只有一个副本。

类变量现在存储在java堆 JDk8

3)static代码块

在类被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。

4)修饰成员内部类

不用static修饰,成员内部类无法定义静态成员或静态方法

创建静态内部类时不依赖外部类实例

 

transient

被transient修饰的变量不会被序列化

序列化:把对象转换为字节序列的过程。
反序列化:把字节序列恢复为对象的过程。

什么情况下需要序列化 :

当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
当你想用套接字在网络上传送对象的时候;
当你想通过RMI传输对象的时候;

静态的属性能不能被序列化和反序列化

实现Serializable 接口的时候,一定要给 serialVersionUID 赋值

volatile

 

break:结束循环

continue:立刻跳到下一次循环

instanceof:用来判断对象是否是某各类的一个实例

assert:

finalize:finalize()会在对象内存回收前被调用一次

 

枚举(enum)

用法一:常量

public enum Color {  
  RED, GREEN, BLANK, YELLOW  
} 

用法二:switch


enum Signal {  
    GREEN, YELLOW, RED  
}  
public class TrafficLight {  
    Signal color = Signal.RED;  
    public void change() {  
        switch (color) {  
        case RED:  
            color = Signal.GREEN;  
            break;  
        case YELLOW:  
            color = Signal.RED;  
            break;  
        case GREEN:  
            color = Signal.YELLOW;  
            break;  
        }  
    }  
}  

用法三:向枚举中添加新方法


public enum Color {  
    RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);  
    // 成员变量  
    private String name;  
    private int index;  
    // 构造方法  
    private Color(String name, int index) {  
        this.name = name;  
        this.index = index;  
    }  
    // 普通方法  
    public static String getName(int index) {  
        for (Color c : Color.values()) {  
            if (c.getIndex() == index) {  
                return c.name;  
            }  
        }  
        return null;  
    }  
    // get set 方法  
    public String getName() {  
        return name;  
    }  
    public void setName(String name) {  
        this.name = name;  
    }  
    public int getIndex() {  
        return index;  
    }  
    public void setIndex(int index) {  
        this.index = index;  
    }  

用法四:使用接口组织枚举


public interface Food {  
    enum Coffee implements Food{  
        BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO  
    }  
    enum Dessert implements Food{  
        FRUIT, CAKE, GELATO  
    }  

用法五:关于枚举集合的使用

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值