Java学习笔记之数据类型和流程控制
来源:互联网 发布:电子商务降低成本数据 编辑:程序博客网 时间:2024/06/07 23:06
2.数据类型和流程控制
java 源文件
======================================
1. 公共类名与文件名一致
《HelloWorld.java》
-------------------------------
public class HelloWorld {
}
2. package 包
本质是目录,
分门别类存放不同的类
3. import 导包
指明一个类的路径,
在代码中可以简写类名
数据类型
======================================
* 基本类型
* 引用类型
基本类型
======================================
byte 1字节,-128到127,-2^7到2^7-1
short 2字节,-2^15到2^15-1
int 4字节,-2^31到2^31-1
long 8字节,-2^63到2^63-1
float 4字节,单精度
double 8字节,双精度
美国工业电气协会浮点数表示规范
char 2字节,0到65535
表示字符,或字符的整数编码
char c = 'a';
char c = 97;
char c = '中';
char c = 20013;
boolean 1字节
true false
真 假
基本类型的字面值
=====================================
1.整数字面值,是 int 类型
int a = 45345;
long b = 9999999999;//错,右侧字面值是 int,但超出范围
2.byte,short,char,三种范围比 int 小的整数
允许用范围内的值直接赋值
byte a = 127;//右侧是 byte 类型
byte a = 128;//错,右侧是 int 类型
3.浮点数字面值是 double 类型
double a = 3.14;
float a = 3.14;//错,右侧是double
4.字面值后缀
L - long
long b = 9999999999L;
F - float
float a = 3.14F;
D - double
double a = 3d;
5. 字面值前缀
0x - 16进制前缀
0xff 255
0 - 8进制前缀
0377 255
\u - char类型16进制前缀
'\u0061' a
'\u4e2d' 中
基本类型运算规则
==========================================
1.计算结果的数据类型,
与运算项中范围最大的类型一致
3 / 2 得 1
3d / 2 得 1.5
2.byte,short,char 三种比 int 范围小的整数,
运算时,会先自动转为 int
byte a = 2;
byte b = 3;
byte c = a + b;//错,int+int,结果是int
3.整数运算溢出
int a = Integer.MAX_VALUE;
a = a + 1;//得负数最小值
01111111111111111111111111111111 + 1
-----------------------------------------
10000000000000000000000000000000
300000000L * 60 * 60 * 24 * 365
4.浮点数运算不精确
2-1.9 得:0.100000000000009
4.35*100 得:434.99999999999994
5.浮点数的特殊值
Infinity 无穷大
------------------------------
3.14 / 0
Double.MAX_VALUE * 2
NaN Not a Number
------------------------------
负数开平方:Math.sqrt(-2)
类型转换
==========================================
* 范围小的类型 --> 范围大的类型
自动转换
byte a = 127;
int b = a;
01111111
00000000 00000000 00000000 01111111
byte a = -1;
int b = a;
11111111
11111111 11111111 11111111 11111111
* 范围大的类型 --> 范围小的类型
强制转型
int a = 257;
byte b = (byte) a;
00000000 00000000 00000001 00000001
00000001
运算符
=========================================
+-*/
+ 数学运算、字符串连接运算
% 取余
0 % 3 0
1 % 3 1
2 % 3 2
3 % 3 0
4 % 3 1
5 % 3 2
6 % 3 0
7 % 3 1
8 % 3 2
9 % 3 0
x 能否被 4 整除: x % 4 == 0
> >= < <= == !=
&& 逻辑与,两侧同时是真,结果是真;
任意一侧是假,结果是假。
短路与,左侧是假,右侧被忽略。
|| 逻辑或,两侧同时是假,结果是假;
任意一侧是真,结果是真。
短路或,左侧是真,右侧被忽略。
! 非,真变假,假变真。
做相反的条件判断,
判断“非b”是真,
即,判断 b 是假。
if(!b) {
}
& 位与,两位同时是1结果是1
| 位或,两位同时是0结果是0
^ 异或,相同是0不同是1
对同一个值异或两次得到原值
~ 求反,0变1,1变0
>> 带符号右移位
符号位是0左侧补0
符号位是1左侧补1
>>> 不带符号右移位
不管符号位是1还是0,
左侧都补0
<< 左移位,右侧补0
*) 右移一位,相当于除2
*) 左移一位,相当于乘2
++
--
自增、自减
int a = 10;
//a变成11,打印a的原值10
System.out.println(a++);
int a = 10;
//a变成11,打印a的新值11
System.out.println(++a);
int a = 10;
//a变成11,给b赋a的原值10
int b = a++;
int a = 10;
//a先变成11,再将原值10重新赋给a
a = a++;
? : 三项运算
1 ? 2 : 3
1是true,执行2;
1是false,执行3。
= 赋值运算
+=
int a = 10;
a += 3;// a = a + 3;
/=
>>=
^=
&=
与赋值运算符联用,会自动转型
byte a = 2;
a = (byte) (a + 3);
a += 3;
a += 3.14;
流程控制语句
============================================
if-else if-else
if(条件) {
} else if(条件) {
} else if(条件) {
} else {
}
switch-case-default
*)只能判断byte,short,char,int, enum
*)当满足一个case,从这个case
向后无条件执行每个case,直到结束
或者遇到 break 中断(跳出switch)
switch(变量或表达式) {
case 5:
case 10:
...
break;//中断
case 1:
case 100:
default:
}
for
for(定义变量; 条件; 变量修改) {
}
//1到10打印
for(int i=1; i<=10; i++) {
System.out.println(i);
}
while
先判断再执行
while(条件) {
}
do-while
先执行再判断,
至少执行一次
do {
} while(条件);
循环嵌套
------------------------------------
for(int i=1; i<=3; i++) {
for(int j=1; j<=2; j++) {
i, j
}
}
i j
------
1, 1
1, 2
2, 1
2, 2
3, 1
3, 2
break
-------------------------
中断(跳出循环)
continue
-------------------------
继续下一轮循环
数组
======================================
* 用来存放一组数据的数据结构
* 创建数组
------------------------------
1. int[] a = new int[5];
新建5个长度的数组,
5个位置都有默认值
默认值:
数字: 0 0.0
boolean: false
引用: null
2. int[] a = {2,6,2,3,76,3};
3. a = new int[]{56,34,7,324};
* 数组访问
----------------------------------
a[0] = 34434;
print(a[3])
int i = a[2]
a[2]++
* 数组长度属性
----------------------------------
a.length
*) 数组一旦创建,长度不可变
*) 数组最大下标是 a.length-1
*) 数组长度可以是0
* 数组遍历
----------------------------------
从头到尾依次访问每个位置
for(int i=0; i<=a.length; i++) {
a[i]
}
* java.util.Arrays 数组工具类
--------------------------------------
Arrays.toString(数组)
数组中的值连接成字符串,
格式:"[值1, 值2, 值3]"
Arrays.copyOf(数组, 长度)
将原数组,复制成指定长度的新数组,
长度更长,后面多出几个位置;
长度更短,截断
Arrays.sort(数组)
优化的快速排序算法
Arrays.binarySearch(有序数组,目标值)
在有序数组中查找目标值的位置,
如果找不到,返回一个负数无意义值
Arrays.fill(数组, 值)
在数组中填满指定的值
* 数组复制
-------------------------------------
*) Arrays.copyOf(数组, 长度)
直接新建数组
*) System.arraycopy(
原数组,
原数组起始位置,
目标数组,
目标数组起始位置,
复制的数据数量)
不会新建数组,
如果需要新数组,要自己事先创建
* 二维数组
*) 存放数组的数组
*) 创建二维数组
---------------------------------
1. int[][] a = new int[3][2];
*)创建外围数组长度是3
*)在三个位置各创建一个数组长度是2
*)共创建了4个数组
2. int[][] a = new int[3][];
*)创建外围数组长度是3
*)三个位置都是 null 值(空)
*)可以之后再创建数组,放入二维数组
a[0] = new int[5];
a[1] = new int[3];
a[2] = new int[4];
3. int[][] a = {
{2,5,3},
{1,7,4,9,5},
{3,2,7,8}
};
*) 二维数组遍历
-------------------------------------
for(int i=0;i<a.length;i++) {
for(int j=0;j<a[i].length;j++) {
a[i][j]
}
}
提问
------------------------------------
请简述你对数组的理解
【数组的基本概念】
1. 数组是一组相同类型的数据的集合
2. 每个数组都有长度,这个长度是在初始化数组的时候就已经确定的
3. 数组的长度是不可以被改变
4. 数组的每个元素都有“下标”(index),可以用于引用数组的元素,下标是从0开始顺序编号的
【数组的初始化】
1. 静态的初始化:在创建数组时就确定数组的各个元素的值:
int[] arr = { 9, 5, 2, 7 };
2. 动态的初始化:创建数组时,需要确定数组的长度,但是可以不确定数组的各元素的值
int[] arr = new int[8];
int[] arr; arr = new int[8];
int[] arr; arr = new int[] { 9, 5, 2, 7 };
变量
============================================
* 局部变量
定义在方法中,或局部代码块中
*) 必须手动初始化
初始化:第一次赋值,在内存中分配内存空间
int a;
a = 12;
print(a);
*) 局部变量的作用域,
在它定义的代码块中有效
*) 作用域内,不能重复定义
void a() {
int i=10;
if(...) {
i++;
int j = 100;
}
int j = 1000;
}
* 成员变量
定义在类中,方法之外
方法
============================================
* 命名的代码块
* 返回类型
*) void 表示“空”,没有返回值
*) 有返回值要定义返回值类型
* 参数
*) 空参,不接收参数
void f() {
}
f()
*) 有参数,要定义每个参数的类型,
调用时,要按顺序传递参数数据
void f(int a, double b, String c) {
}
f(56, 3.14, "abc")
* return
*) 有返回值的方法,向调用位置返回数据
return xxxx;
*) void 方法中,返回到调用位置继续执行,
当前方法,到 return 位置结束
return;
* 递归
*) 在方法中调用自身
*) 一步一步地简化问题,
简化成最简问题,
再倒推求出结果
*) 一般不同时做多次递归调用,
否则运算量会急剧增加
提问:请简述内存的作用
-------------------------------------
【什么是内存】
内存即内部存储器,与外部存储器是不同的硬件,内部存储器通常有:RAM、ROM、Cache。
RAM:Random Access Memory:PC机的内存条
ROM:Read Only Memory:固件
Cache:高速缓存,内置在CPU里
在描述手机的存储设备时,“运行内存”即RAM,相当于PC机的“内存条”,而“存储内存”相当于PC机的“硬盘”。
【内存的特性】
可读可写,断电以后数据消失。
【内存的作用】
内存(RAM)用于存储正在执行的程序与数据。
内存是CPU可以直接交换数据的唯一硬件。
内存是CPU与其它所有外部设备交换数据的桥梁。
问题:请详细描述JAVA程序运行过程中堆与栈的特性。
栈:基本数据类型的数据,对象的引用,参数的副本
堆:对象的数据
所有的赋值操作,都在栈内存中进行,赋值操作与堆内存无关。
所有的对比(==)操作,都是在栈内存中进行的。
0 0
- Java学习笔记之数据类型和流程控制
- JAVA学习笔记之运算符和流程控制结构
- Java学习笔记01---可视化输入输出,数据类型转化,流程控制
- [学习笔记]Java输入输出和流程控制
- java 笔记之流程控制
- java 从零开始,学习笔记之基础入门<运算符表达式和流程控制>(六)
- 疯狂Java之学习笔记(8)-------------运算符和循环结构(流程控制)
- Java之学习笔记(8)-------------运算符和循环结构(流程控制)
- Java学习笔记:流程控制之分支语句
- Java学习笔记之流程控制,数组(四)
- Java学习笔记之程序的流程控制
- java学习笔记(六)流程控制之选择语句
- java学习笔记(七)流程控制之循环语句
- JAVA学习笔记之(三)流程控制
- Java 学习第四章之流程控制和数组
- Python笔记之数据类型和控制流
- Python 学习笔记之流程控制
- JAVA学习笔记之数据类型
- nginx 配置 laravel
- React-Native 之ListView
- 数据结构-并查集
- 解析Xcode项目文件中的project.pbxproj:Object-C实现
- CSS的选择器分类
- Java学习笔记之数据类型和流程控制
- 《Python Web开发实战》踩地雷记17/3/22
- hanoi塔 python
- 还原二叉树
- 利用sdclt磁盘备份工具绕过UAC用户账户管理
- 什么是泛型
- Spring使用外部属性文件
- linux常用命令全解
- nodejs原生库assert