master
高宏宇 3 years ago
parent e0c1ea4129
commit f2a40a910e

@ -24,7 +24,21 @@ Java的布尔类型和C保持一致基本的运算符也和C保持一致。
### 1.3. 位运算
位运算二进制运算和C中的位运算是一致的是指把数字按照二进制的每一位进行运算。
例如0B 和 0A 代表两个byte,转换成位是:
| 字节1(0x08) | 字节2(0x07) | 说明 |
| ----------- | ----------- | ------------ |
| 0000-1000 | 0000-0111 | 对应的二进制 |
| 位操作 | 结果 | 说明 |
| ------------ | --------- | ------------------------------ |
| 0x0A & 0x0B | 0000-1000 | 按照每一位对应进行与运算的结果 |
| 0x0A \| 0x0B | 0000-1111 | 按照每一位对应进行或运算的结果 |
**位操作作为了解。**
### 1.4. 选择语句
@ -32,7 +46,7 @@ Java的布尔类型和C保持一致基本的运算符也和C保持一致。
### 1.5. 运算优先级
尽量使用括号
**尽量使用括号**
### 1.6. 补充例子
@ -67,6 +81,14 @@ public class LoopRead {
}
```
试一试运行该代码你可以一直用空格分割来输入多个整数这时程序并没有任何的回应当你输入一个非整形的字符例如a这时程序退出并打印刚刚输入整数的累加和。
想一想为什么?重点就在于 `scanner.hasNextInt()` 会一直判断下一个输入是否是整数如果是整数就返回真如果不是整数就返回假然后执行break函数。
**可以在if语句前面设置断点然后使用调试工具进行单步跟踪。你会发现你输入的时候并不会中断当敲入回车的时候调试器才会中断这证明了Scanner是按照一个回车来一次性的读取输入字符串的如果没有回车就会一直等待这是一个阻塞操作。**
这个例子很有意思通过调试过程可以让你更清楚知道Java的每个函数是如何运行的以及它们都有什么特性。
## 2. 重点
本章的内容中的大部分技术要点都与C保持一致因此之需要掌握几个例子就可以了

@ -66,7 +66,7 @@ Math.abs(-2.1) returns 2.1
```
### 1.3. The random Method
`Math.random();` 函数生成一个01之间的double类型的数包含0,但是不包含1。
## 2. 字符类型

@ -0,0 +1,76 @@
Java的函数和 C 类似但因为Java是面向对象的语言所以又有很多扩展的地方我们这里主要对其特殊的地方进行讲解。
## 静态函数与非静态函数
到目前为止,我们学习的大多是静态函数。什么是静态函数?简单说来,静态函数是不依附对象就可以直接运行的函数。这个怎么解释?要了解静态与非静态函数的区别,首先需要知道什么是对象。前面说过,类是抽象描述的,如同类型定义;对象是类的一个真实变量(分配了具体的内存)。这种关系如果我们第一章的结构体指针类型和一个分配了存储空间的结构体指针变量。
### 如何计算字符串的长度
接下来看看C的函数的语义。函数是具备高度抽象的计算功能需要传入参数后返回或者不返回结果对数据进行修改。例如C语言如果需要确定字符串的长度这个函数的原型签名是这样的
```C {.line-numbers}
int strlen(const char *str)
```
注意C是非面向对象的因此它需要知道需要计算哪个字符串的长度。
接下来我们看看Java字符串长度的函数
```java {.line-numbers}
String s = "Hello world!";
int size = s.length();
```
看到区别了吗Java计算字符串长度的意思是计算自己本身字符串的长度C是的含义是计算谁的字符串长度。这个就是最根本的区别。
对象是相关数据与在相关数据上操作函数的集合。
显然s这个对象String类型的实例本身含有数据字符串内容以及相关的操作函数例如 length 这个函数。因此length()并不需要传入字符串的参数因为length()在 s 这个对象上执行s本身包含数据。
一般说来,需要在对象上执行的函数叫做非静态函数;而不需要对象,直接可以运行的函数叫做静态函数。其实,静态变量也是一样的,后面会做解释。
在前面几章中我们大多使用静态函数例如对基本类型小写开头的类型非类类型非包装类型操作的函数大多是静态函数。想一想为什么因为基本类型尽量做到与C兼容不是对象需要静态函数来对基本类型进行操作。后面会学到基本类型的包装类型warp类型本生就是对象因此可以直接在对象上进行操作。
想一想,前面学过那些静态函数?
前面章节也有例外,这些大写的类型都是类,一般都会实例化一个对象进行使用,例如:
1. String 类型
2. Scanner 类型
### Java与C语言像吗
我们看看一个例子:
```java {.line-numbers}
public class Main {
static int size;
public static void main(String[] args) {
String s = "Hello world!";
size = s.length();
System.out.printf("String:'%s', size is %d.", s, size);
}
}
```
上面这个例子,如果我们把类定义去掉后变成什么样子?
```java
static int size;
public static void main(String[] args) {
String s = "Hello world!";
size = s.length();
System.out.printf("String:'%s', size is %d.", s, size);
}
```
看看上面的例子结构是不是非常像C语言
思考一个问题Java有全局变量吗如果没有如何实现全局变量
如何调用一个静态的常量或者是变量?包是如何组织的?
其实Java没有C那样的全局变量。因为Java所有的代码必须在一个类定义中一个类在一个包中。这样调用一个变量必须是静态的可以使用 xxx.yyy.Zzz.var 的方式进行调用。其中xxx.yyy 是包定义Zzz是类名var是该类中的一个静态变量。同理静态函数的调用也可以使用这种方式。这种方式在Java中叫做命名空间name space有什么好处优势是所有的函数、变量、常量等都在一个空间中不像C语言是全局的这样即使是同名的变量、常量、函数只要不再同一个空间中也不可能在同一个空间中那么就是合法的。通过空间的方式相当于多了一个限定不必给变量、常量、函数取很长的名字来进行区分。反观C语言你们会看看很长的命名因为都在全局中需要保证命名的唯一性。
Loading…
Cancel
Save