您的位置:首页 > 编程语言 > Java开发

Java编程实战宝典学习笔记——第二章Java语言基础

2016-08-02 10:39 363 查看

1.Java语言的关键特性

  1.1平台无关性(可移植性)

       指Java语言写的应用程序不用修改,就可在不同的软、硬件平台上运行。平台无关性具有源代码级和目标代码级。C与C++具有一定程度的源代码级的平台无关,只需重新编译即可运行,但是,Java的跨平台性是目标代码级的,通过JVM实现了“一次编译,处处运行”,在Windows系统下编译的目标代码,在Linux/
Unix平台也可以运行!

  1.2面向对象

       它是完全面向对象的程序设计语言,除了数值、布尔、字符3种基本数据类型之外,其他的全是对象。Java语言的设计集中体现在对象及其接口,它提供了简单的类机制与动态的接口模型。类提供了 该类对象的原型,对象封装了它的状态变量及相应的方法,实现了模块化和信息隐藏。举个栗子,用Java写了一个猫类,这个类中呢,有 毛的颜色、体重、性别等属性,还有 run(),eat(),speak()等方法,那么就可以说这个猫类提供了一个原型,然后
你再创建了一个猫的对象之后,对这个Cat对象的属性进行实例化,比如说黄毛、10kg、母 等,这样的方式,就是面向对象的思维,实现了对象封装与信息隐藏。

  1.3分布性

       分布式包括数据分布和操作分布。数据分布指的是数据可以分散在网络的不同主机上,操作分布是指把一个计算机分散在不同主机上处理。Java支持这两种分布性。对于数据分布,Java提供了一种叫做URL的对象,利用URL,可以打开并访问具有相同URL地址上的对象;对于操作分布,Java的applet小程序可以从服务器下载到客户端,部分计算在本地计算机上运行

  1.4健壮性

        Java是强类型语言,要求用显示的方法声明,不支持指针,杜绝了内存的非法访问,Java解释器在运行时实施检查,可以发现数组和字符串访问越界的问题(C与C++没有此检查),Java提供自动垃圾收集来进行内存管理,避免程序员在管理内存时产生错误

  1.5安全性

        当Java字节码进入解释器的时候,首先必须经过字节码检验器的检查,然后Java解释器将决定程序中的类的内存布局,随后类装载器负责把来自网络的类装载到单独的内存区域,避免应用程序之间相互干扰破坏。最后客户端用户还可以限制从网络上装载的类只能访问某些文件系统。

  1.6多线程

        多线程机制可以是应用程序能够并发执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,便于实现网络上的实时交互行为。
Java在两方面支持多线程:一方面,Java环境本身就是多线程的,若干个系统线程运行负责必要的无用单元的回收。系统维护等系统级操作;另一方面,Java语言内置了多线程控制。Java提供了一个Thread类,由它负责启动运行和终止线程。需注意的是,Java的多线程受运行时平台的限制,如果操作系统本身不支持多线程那么Java的多线程性可能表现不出来

2.Java程序的构成

  2.1 Java的代码结构

       代码变更说明 ------Package声明-------Import声明--------Class Header-------Class------常量-----成员变量-----初始block-------构造器------属性--------方法------内部类

  2.2 Java代码的注释风格

      行注释符//                   块注释符/* */              文档注释符/**    */         通用注释符 @

3.数据类型

  3.1  Java的基本数据类型

      (1)Java的数据类型可以分为两大类:
                  基本类型:整型、浮点型、布尔型、字符型;
                 复合类型:数组类型、类、接口。
      (2) Java的基本数据类型可以分为三大类,分别为字符类型char、布尔类型boolean、以及数值类型 byte,short,int, long,float,double,
      (3) 数值类型又可以分为整数类型byte,int ,short, long 和浮点类型 float,double.
      (4) Java中的数值类型不存在无符号的,它们的取值范围是固定的,不会随机器硬件环境或者操作系统的改变而改变!
      注意:Java还存在一种基本数据类型void,它也有对应的包装类java.lang.Void,不过我们无法直接对它进行操作。

  3.2  Java的整型和浮点型所占空间及数的范围

   类型 字节数         范围
 byte     1  -128~127
 short    2 -2^15~2^15-1
 int    4-2^31~2^31-1
 long    8-2^63~2^63-1
 float    4±3.4*10^38
 double    8±1.8*10^308
     (1) 以byte为代表说一下,加入在程序中赋值a=127; a++;最后输出a的结果为-128,理由是因为,127在内存中为 0111 1111 ,加上1之后,变为1000 0000,这个补码对应的数值就是-128;
     (2) 整型常量后面表示该数为长整型常量,如482L和0X482L,强迫计算机用8个字节来存放,由于小写l与1较容易混淆,建议要用时使用L!
           十进制整数,如122,-11,10;
           八进制整数,规定以0开头的都是八进制数。如0123表示八进制数123,等于十进制的83,-011等于十进制的-9;
           十六进制整数,规定以0X、0x开头的都是十六进制数

  3.3 字符型与布尔型

    (1)Java中字符型是用char来表示的,它是用两个字节(16个bit)来存放一个字符,存放的是unicode而不是ASCII码,unicode码为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言,跨平台进行文本转换的需求,无论是中文汉字,还是英文字幕都可以在其中找到唯一的编码,并且与ASCII码是兼容的。
所有的ASCII码,都会在高字节符上添上0,成为Unicode编码,例如,字母a的ASCII码是0x61,在Unicode中,变为0x0061。
    (2)布尔型用boolean来表示,只有两个取值,true或者false

  3.4  变量的命名约定

  (1)如果只有一个单词,则单词小写;
  (2)如果有两个以上的单词,则第一个单词全部小写,其余各单词首字母小写,建议最好不用超过四个单词;
  (3)类和接口名:每个词的首字母必须大写,含有大小写,如MyClass、HelloWorldApp等;
  (4)方法名:采用(1),(2)所述的驼峰命名法,setName(),getName();
  (5)常量名:基本数据类型的常量名全部使用大写字母,单词与单词之间用下划线连接,如SIZE_NAME,MALE,MAX_LENGTH等,对象常量可大小写混写;
  (6)变量名:可大小写混写,首字母小写,少用美元符号

  3.5  浮点型数据

   (1)浮点型常量有两种表现形式,普通的十进制形式,如2.121;指数形式,1.2E5表示 1.2*10^5,2.9E-7表示2.9*10^-7.(注意字母E或者小写e,之前必须有数字,之后必须是整数,如E3,2E1.7都是不合法的!)

   (2)Java规定,浮点常量默认是双精度数,即double类型,如果需要指定为单精度数,需要在末尾加上F或者f。比如12.5f,或者12E5F;    
   (3)浮点型变量分为单精度数和双精度数,分别用float与double来定义,float只有7个有效位,超出部分会自动四舍五入处理,如定义浮点变量 f=1234567.456f,其输出结果为1234567.5,四舍五入了;double型只有15~16个有效位,超出部分也是四舍五入,如double d=1.23456789123456789,输出为1.23.4.567891234568     
   (4)由(3)可知,浮点数会做四舍五入,故浮点数往往不能精确的表示一个十进制小数,即使这个小数是一个有限小数。比如1.3,它存储在内存中也是一个无限小数,即可能是1.299999,也有可能是1.3000001,所以要尽量避免直接比较两个浮点数是否精确相等!

  3.6  字符型数据

   (1)字符常量是用单引号括起来的一个字符,单个的汉字和标点符合等,都是字符,如  ‘中’、‘国’、‘a’、‘D’、'!'……
   (2)以“\”开头的字符序列,被称为转义序列,如 \n表示换行、\uhhhh,1~4位16进制数所表示的Unicode码,如\u0041
   (3)一个字符常量占据两个字节,只能存放一个字符,将一个字符存放到字符变量中,并不是将该字符存放到内存中去,而是将该字符对应的Unicode码存放到内存单元中去,比如字符A的unicode码是0X0041,以二进制的形式存放在内存中,如0000 0000 0100 0001,以此特性,可以将char 类型进行加法运算,比如char ch='A'; ch=(char)(ch+32);最终输出结果为 a,这个方法可以将大写字母转成小写字母。

  3.7  数据类型转换

      (1)数据类型转换分为扩展转换和缩减转换,扩展转换是指低精度向高精度转换,该转换可以由系统自动进行(byte<short<int<long<float<double、char的位置和short一致,但是byte与char作比较时都会转成int,再比较
      (2)缩减转换为强制类型转换,一般都会损失精度,导致数据的信息丢失,这一点要注意。

  3.8  运算符

     (1)自加运算符“++”,下面分析 ++i 与 i++ 的区别:
                 Java规定++i 的操作是 将变量的值加1,然后以该值作为表达式的值参与后续运算;而 i++ 的操作是,先将变量当前值作为表达式的值参与后续运算,然后再将变量值加1。
     (2)++ 与 -- 的结合规则是从右到左,其优先级与取负(-)同级,如 - i++,相当于 -(i++);
     (3)相等运算符表示为 “==”,不等运算符表示为“!=”;
     (4)条件运算符与表达式:<表达式1> ? <表达式2> : <表达式3>  示例:int max=(x>y)?x:y;  int n=(x%2 ==1) ? 1 : 0;
     (5)位运算符:
                a. 按位与 &,只有对应的两个二进制位均为1时,才为1 ,a=0x4567,255=0x00FF , a&255=0x0067;
                b. 按位或  | ,只要对应的两个二进制位均为0时,才为0 ;
                c. 按位异或 ^,对应的两个二进制位相同为0,不同为1 ;
                d. 取反运算 ~,将后面的二进制位全部取反,0变成1,1变成0.
                e.左移运算符<<,左边的操作数的各二进制位全部向左移动指定的位数,移出左边界的数被丢弃,空出来的二进制位用0填补,比如 byte a=15,二进制表示为 00001111,那么 a<<3得到的结果为 01111000为120,a<<3=a*2^3;
                f.右移运算符>>,操作数移出右边界的位被丢弃,从左边开始补位,如果原先最高位为1,则填补1,如果最高位为0,则填补0,对于正整数而言,每右移1位,相当于被2整除1次,带符号移位,保证了数据的正负不发生变化;
               g.不带符号的右移位运算>>>,右移指定位数,空出来的用0填充;

  3.9  赋值运算

     (1)赋值运算的左操作数必须为一个确定的可存储的位置,常量和表达式不能作为左值
     (2)赋值运算符具有右结合性,a=b=c=d=1,可理解为 a=(b=(c=1));
     (3)如果赋值运算符两边的数据类型不相同,则要遵循向左看法则,右值要转换成左值的数据类型;
     (4)复合赋值运算和所有赋值运算符的优先级完全相同,并且具有右结合性,如 y *= a+b;等价于 y = y * (a+b);

  3.10  流程控制语句

     (1)else语句不能单独作为语句使用,它必须是if语句的一部分,与 if 配对使用 ,if~else if ~else是两个if 语句;
     (2)多路分支switch~case语句,swictch(exp){case exp1: statement1;break;case exp2: statement2;break; default:statement3;break;};
     (3)当型循环while语句,while(exp) {stat;},直到型循环do~while语句 do  stat while(exp);
     (4)增强的for循环,也称为Java中的foreach语句,其标准语法格式是:for(ElementType element : arrayname )  {  stat;  };说明,ElementType是 集合元素类型 ,element为定义的该类型的一个对象,arrayName为该集合的对象,并且已经初始化了;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: