盒子
盒子
Posts List
  1. 前言
  2. Java语言简介
  3. Java中的数据类型
  4. Java中的常量
  5. Java中的操作符
  6. Java中流程控制
  7. 总结

Android 学习之路--Java基础(一)

作者Talent•C
转载请注明出处

前言

前几天和朋友聊天,发现Android开发很是火热,觉得利用空闲时间尝试学习Android开发。Android使用的开发语言是Java,做为Java零基础的我,就先从Java学起,给自己制定了一个计划:(1)用1~2周时间去学习Java基础语法(时间全靠挤出来滴);(2)用1周左右时间了解Android系统及Android studio 开发环境;(3)用最多3周写一个Android小程序;理论知识是盖房子的砖头,实际经验和动手能力是泥瓦匠,只有砖头没有泥瓦匠谈何高楼大厦,只有实际参与到开发中才会有所提升。

Java语言简介

Java是一种电脑编程语言,有跨平台、面向对象、泛型编程的特性。Java编程语言的风格十分接近C++语言,继承了C++语言面向对象技术的核心,Java舍弃了C++语言中容易引起错误的指針,改以引用取代,同时移除原C++与原来运算符重载,也移除多重继承特性,改用接口取代,增加垃圾回收器功能。
Java的运行过程,它首先将源代码编译成字节码(bytecode),然后依赖各种不同平台上的JVM(Java虚拟机)来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。

Java中的数据类型

Java的数据类型分为两大类: 基本数据类型引用类型
基本数据类型: byte、short、int、long、float、double、char、boolean 共八种。
byte 字节型长度占8位;
short 短整型长度占16位;
int 整型长度占32位;
long 长整型长度占64位;
float 单精度浮点型长度占32位;
double 双精度浮点型长度占64位;
char 字符型标识一个单一的字母,在Java中不常使用,如char c = ‘a’;
boolean 逻辑型也叫布尔型只有两个值 true(真) 和 false(假),0和1不再表示逻辑值,仅表示数值;

注意: 整型默认以int型存储;声明float变量要注意 float a = 2.3;是错误的正确写法是 float a = 2.3f;或者 float a = (float)2.3; 原因是浮点型默认以double型储存;

引用类型:
所有的对象都是引用类型,除去基本数据类型都是引用类型,引用类型中比较特殊类型是:String 字符串类型和包装器类型;
String: 是一个比较特殊引用类型,它可以像基本数据类型那样使用, 例如初始化可以使 String s = “talent”; 也可以是 String s = new String(“talent”);
包装器类型: 所谓的包装器类型就是在Java中为上面提到八种基本数据类型包装成八个类被称为包装器类型(wrapper),分别是:Intger、Long、Short、Byte、Double、Float、Character、Boolean以及Void,除void之外均与基本数据类型一一对应,前6个类都派生于一个公共的超类Number。

注意: 包装器是不可变的。也就是说构造好了包装器,就不能更改包装在其中的值。此外,包装器类是final类,无法定义它们的子类。

装箱: 装箱(boxing),是从Java SE 5.0开始出现的新特性,装箱自动将基本数据类型转换为对应包装器对象, 如 Integer a=10;如果没有装箱的特性则需要通过初始化对象进行,如 Integer a= new Integer(10);
通过反编译class文件后,我们知道装箱实际上是通过valueOf()方法实现的,该方法返回一个Integer对象

拆箱: 拆箱(unboxed),与装箱是正好相反的操作。自动将包装器对象转换为对应的基本数据类型,如:

Integer i=new Integer(5);
int b=i;

通过反编译,我们知道拆箱是通过xxxValue()方法实现的,该方法返回一个xxx类型的值。
注意: 装箱和拆箱是编译器认可的,而不是虚拟机。
编译器在生成类的字节码的同时,插入必要的方法调用;虚拟机只是执行这些字节码。

“==”与equals()方法
由于装箱拆箱的存在,常常会给人一种错觉,让人认为基本数据类型和它们对应的包装器对象是一样的。
“==”用法分为以下几种情况

  • “==” 两边是基本数据类型, 则比较的是它们的值。
  • “==” 两边是对象,比较的是他们否指向同一个区域(即是否有相同的引用)。
  • “==” 一边是基本数据类型一边是对象,则会将对象进行拆箱,从而变成两个基本数据类型进行值的比较。

equals()用法: 比较的内容

所以避免出错和造成不必要的混乱,在比较两个包装器对象时,尽量不要使用==,而是使用equals()方法。

Java中的值传递:
基本数据类型: 值拷贝。
引用类型: 传递的是引用(“虚地址”);

Java中的常量

Java中常量有两种: 编译期常量 和 运行期常量
不管是哪种常量一旦初始化就不可以修改期值。

编译期常量:
如:
final int m = 10;
static final int M_N = 10;
这两个都是编译期常量, 如果这两个常量放在类中作为属性使用则常量m可以在每个对象中存在一个值为10的常量m但是内存空间不同,而常量M_N是同一快内存空间同一个值。但两者都不可需改值。

运行期常量:
如:
final int m;
static final int M_N;
在初始化是不赋值,在类对象创建的构造方法里进行赋值,一旦赋值,其值不可以再次修改。

Java中的操作符

Java的操作符,分为四类:
算数运算符、位运算符、关系运算符、逻辑运算符。

(1)算数运算符: +、-、* 、/、% ++ 、 –
适用于基本数据类型, 但是 “+” 可以用在String 拼接, 但是效率会稍低,不建议大量使用。

(2)位运算操作符: <<(左移)、>>(右移) 、>>>(无符号右移)、”&” 、”|” 、 “~” 、”^”
左移乘以2:

例如向左移动2位
-100(十进制)转换为二进制位 1111 1111 1111 1111 1111 1111 1001 1100
<<2 在低位使用0补齐 -100(十进制)向左移动2位
11111111111111111111111110011100<<2 = 11111111111111111111111001110000 //低位使用0补齐

右移除以2:
右移分为两种: 有符号右移 和 无符号右移
有符号右移: 将预算数向右移动,高位用0或1补齐判断补齐位用0还是1取决于移位之前最高位是0还是1,如果是0则全部用0补齐,如果是1则全部用1补齐。

例 将-100向右移动2位
11111111111111111111111110011100>>2 = 11111111111111111111111110011100 //高位位使用1补齐

无符号右移: 将运算数向右移动,高位全部使用0补齐,忽略正负;

例 将-100向右移动2位
11111111111111111111111110011100>>>2 = 00111111111111111111111110011100 //高位位使用0补齐

(3)比较(关系)操作符 “==” 、”<” 、 “>” 、 “>=” 、”=<” 、”!=” 共6种 返回值均为true 和 false;
大多用于基本数据类型的比较,是对比较数的二进制进行比较;但是需要注意数据类型的一致性,如0.3f==0.3 返回结果为false,因为两种数据类型所占长度不同导致其二进制数页不同,不过0.5f==0.5,结果为true,因为0.5f与0.5这两个数的二级制数相同,所以结果为true;

注意: “==” 与 “!=” 除了可以比较基本数据类型的二进制,也可以比较引用类型的引用是否相等。

(4)逻辑操作符 “&” 、 “|” 、”&&” 、”||” 、”!” 、”^” 六种;
逻辑与’&&’,逻辑或’||’,逻辑非’!’,逻辑异或’^’,逻辑与’&’,逻辑或’|’;
A和B是逻辑运算的两个逻辑变量;
两种逻辑与(&&和&)的运算规则基本相同,两种逻辑或(||和|)的运算规则也基本相同。
&和|运算是把逻辑表达式全部计算完,而&&和||运算具有短路计算功能。
对于&来说,如果左侧条件为false,也会计算右侧条件的值,而对于&&来说,如果左侧的条件为false,则不计算右侧的条件,这种现象被称作短路现象。
所谓短路计算,是指系统从左至右进行逻辑表达式的计算,一旦出现计算结果已经确定的情况,则计算过程即被终止。
对于&&运算来说,只要运算符左端的值为false,则因无论运算符右端的值为true或为false,其最终结果都为false。
所以,系统一旦判断出&&运算符左端的值为false,则系统将终止其后的计算过程;
对于 || 运算来说,只要运算符左端的值为true,则因无论运算符右端的值为true或为false,其最终结果都为true。
所以,系统一旦判断出|| 运算符左端的值为true,则系统将终止其后的计算过程。
注:异或相同为false,相反则为true。
利用短路现象:
在程序设计时使用&&和||运算符,不建议使用&和|运算符。

Java中流程控制

Java中流程控制 分为三种:
顺序、分支、循环

顺序: 从上而下,按照代码的顺序执行。

分支: 分支流程最为常见流程 分为 if/else语句 和 switch/case 语句;

循环: 循环流程也是比较常用的流程, 分为三种: for循环 、while循环、do while循环;

这里涉及到的语法与c语言的编程语言相同就不举例介绍了。

流程的中断/退出:

  • break 一般用于 循环语句 、switch语句中;用来中断循环或者结束switch case语句。
  • return 可以用在方法的任何位置中断/退出这方法,可以带返回值或不带返回值,取决于这个方法是否带有返回值。
  • continue 一般用在循环语句中, 结束此次循环进入下次循环。
  • System.exit(0) System是API中的一个类,exit 是一个静态方法,参数0表示强制JVM退出,即main方法结束,程序退出;

总结

Java中的基础语法暂时学习到这里吧,下一篇文章我来重点学习字符串、数组、字典等常用引用类型介绍及使用。

支持一下
扫一扫,支持Talent•C