Java学习心得之语法基础(一)

来源:互联网 发布:帝国cms 获取网站地址 编辑:程序博客网 时间:2024/06/04 08:12

一、标识符

含义:Java对各种变量、方法和类等要素命名时使用的字符串序列。

命名规则:

1.标识符由字母、下划线"-",美元符号"$"或数字组成

2.标识符应以字母、下划线、美元符号开头

3.Java标识符大小写敏感,长度无限制

约定俗成:Java标识符选取时应注意"见名知意"且不能与Java语言的关键字重名。



二、关键字列表:

含义:Java中一些赋以特定含义,用做专门用途的字符串。

注意:

1.所有Java关键字都是小写英文

2.goto和const虽然从未使用,但也被作为Java关键字保留



不常见关键字解析:

1.strictfp

含义:strict float point 精确浮点

作用:让浮点数运算更加精确,而且不会因为不同的硬件平台运算结果有所不同

示例1

当修饰类或接口时,该类或接口中的所有代码(包括嵌套类型的初始值和代码),都将严格的进行计算,

表达式严格遵守IEEE754规范,以单精度和双精度表示

public strictfp class MyClass {    public static void main(String[] args) {        float aFloat = 0.6710339f;        double aDouble = 0.04150553411984792d;        double sum = aFloat + aDouble;        float quotient = (float)(aFloat / aDouble);        System.out.println("float: " + aFloat);        System.out.println("double: " + aDouble);        System.out.println("sum: " + sum);        System.out.println("quotient: " + quotient);    }}


示例2

当修饰方法时,该方法中所有的float和double表达式都严格遵守FP-strict的限制,符合IEEE-754规范

public strictfp static void test(){        float aFloat = 0.6710339f;        double aDouble = 0.04150553411984792d;        double sum = aFloat + aDouble;        float quotient = (float)(aFloat / aDouble);        System.out.println("float: " + aFloat);        System.out.println("double: " + aDouble);        System.out.println("sum: " + sum);        System.out.println("quotient: " + quotient);    }



2.trabsient

作用:实现了Serilizable接口的类,其对象可以被序列化和反序列化。如果用trabsient修饰属性,那么该属性将不会被序列化或反序列化。

说明:

1)一旦变量被transient修饰,变量将不在是对象十九画的一部分,改变量内容在序列化后无法获得访问

2)transient关键字是能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的,变量如果是用户自定义类变量,则该类需要实现Serializable接口

3)被transient关键字修饰的变量不能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化


示例1

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;/** * @description 使用transient关键字不序列化某个变量 *        注意读取的时候,读取数据的顺序一定要和存放数据的顺序保持一致 * * @author Alexia * @date  2013-10-15 */public class TransientTest {    public static void main(String[] args) {        User user = new User();        user.setUsername("Alexia");        user.setPasswd("123456");        System.out.println("read before Serializable: ");        System.out.println("username: " + user.getUsername());        System.err.println("password: " + user.getPasswd());        try {            ObjectOutputStream os = new ObjectOutputStream(                    new FileOutputStream("C:/user.txt"));            os.writeObject(user); // 将User对象写进文件            os.flush();            os.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        try {            ObjectInputStream is = new ObjectInputStream(new FileInputStream(                    "C:/user.txt"));            user = (User) is.readObject(); // 从流中读取User的数据            is.close();            System.out.println("read after Serializable: ");            System.out.println("username: " + user.getUsername());            System.err.println("password: " + user.getPasswd());        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        } catch (ClassNotFoundException e) {            e.printStackTrace();        }    }}class User implements Serializable {    private static final long serialVersionUID = 8294180014912103005L;    private String username;    private transient String passwd;    public String getUsername() {        return username;    }    public void setUsername(String username) {        this.username = username;    }    public String getPasswd() {        return passwd;    }    public void setPasswd(String passwd) {        this.passwd = passwd;    }}


3.native

作用:使用native关键字说明这个方式是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用


4.volaile

作用:synchronized作用类似起到同步作用,详情略


三、JAVA基础数据类型

1.Java常量

含义:Java常量值用字符串表示,区分为不同的数据类型

 1)整型:123

2)浮点型:3.14

3)字符常量:'a'

4)逻辑常量:true、false

5)字符串常量:"helloworld"

注意:

1)区分字符常量和字符长常量

2)"常量"这个词还会用在另外的语境中表示值不可变的意思


2.Java变量

含义:Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用于。

声明格式:

public static void main(String[] args) {int i = 1;float f = 12.3f;double d = 0.123;String s = "hello";}

从本质上来讲,变量其实是内存里面的一小块区域,一个程序在运行的时候,实际上这个程序是位于内存里面,然后才开始运行。一个.exe文件存放在硬盘上是无法运行的,在硬盘上看到的.exe文件无非就是一个文件而已,当我们双击这个.exe文件时,运行起来的时候实际上是整个.exe文件被放在了在内存里面,然后操作系统找到main方法,也就是程序的入口,然后就开始执行了。执行的过程之中,会不断地在内存里面分配一些区域,变量在内存里面就是一小块区域,变量有两个概念,一个是变量的名字,另一个是变量的值,即这一小块区域是有名字的,里面装着一个值,因此以后要想访问这小块区域里面的内容就可以根据这小块区域的名字来访问了。因此,变量的本质就是一小块内存区域。就变量来说,该在内存里面分配多大的存储空间呢?不同的变量类型分配不同大小的存储空间,每一个变量都是属于特定的数据类型的,声明成不同的数据类型,它就在内存里面分配不同的存储空间。

  变量作用域:变量的作用域只在“{  }”有效,出了这个“{  }”就没有作用了


3.Java数据类型划分





四、Java数据类型详解

1.boolean——布尔型



2.char——字符型


全球的文字放到计算机里面表示全是0和1,Unicode是统一了全世界国家文字的一种编码方式,用这样的编码可以把全世界国家的文字连接在一起。Unicode编码又分为两种,一种是Utf-8,另一种是Utf-16。JAVA所采用的是Utf-16,每一个字符占2个字节,任何国家的文字放到Unicode里面都是占2个字节。


3.整数型


C语言编译好的程序为什么不能移植,如把.exe文件放到Linux下是执行不了的,

一个很大很大的原因在于C语言定义的变量在不同的操作系统上所占的大小是不一样的,

声明一个int类型的变量,在Windows下面占32位,但放到Linux下面就有可能只占16位,那么这时候很可能表示的大小就不一样了,

在Windows下声明一个很大的数,在Linux下面很可能就会溢出。因此这就是C语言为什么在编译完成之后不能移植的原因。


4.浮点型



5.基本数据类型转换


public static void main(String arg[]) {      int i1 = 123;       int i2 = 456;      double d1 = (i1+i2)*1.2;//系统将转换为double型运算      float f1 = (float)((i1+i2)*1.2);//需要加强制转换符      byte b1 = 67;       byte b2 = 89;      byte b3 = (byte)(b1+b2);//系统将转换为int型运算,需要强制转换符      System.out.println(b3);      double d2 = 1e200;      float f2 = (float)d2;//会产生溢出      System.out.println(f2);      float f3 = 1.23f;//必须加f      long l1 = 123;      long l2 = 30000000000L;//必须加l      float f = l1+l2+f3;//系统将转换为float型计算      long l = (long)f;//强制转换会舍去小数部分(不是四舍五入)    }

五、运算符

Java运算符如下:

算数运算符:+、-、*、/、%、++、--

关系运算符:>、<、>=、<=、==、!=

逻辑运算符:!、&、|、&&、||

位运算符:&、|、^、~、>>、<<、>>>

赋值运算符:=、+=、-+、*=、/=

字符串连接运算符:+


1.算数运算符(自加和自减)


2.逻辑运算符



3.赋值运算符



4.字符串连接符



5.表达式



6.三目运算符