重拾java系列一java基础(1)
前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这种状态实在不好,作为一名开发人员,不应该只是会用,能满足需求就满足,而不去深究为什么这样做就行,它的实质是什么,底层到底是怎么样的结构,这样才能达到知其然知其所以然,所以,我觉得在工作闲暇时间,重新对我所认识的java进行一遍梳理,总结,实践,温故而知新嘛,希望我可以坚持下来,争取突破自己!!!
2015年9月10日
刘月
1.java数据类型
在java中,有两大类数据类型:基本类型,引用类型,就是说除了8种基本类型,都是引用类型。而基本类型细分如下:
byte (8位有符号整数:表示范围:-128~127 -128~-1:10000000~11111111;0~127:00000000~01111111 )
short (16位有符号整数)
int (32位有符号整数)默认类型
long (64位有符号整数)后缀L或l
float (32位有符号小数)后缀F或f
double (64位有符号小数)默认类型 后缀D或d
char(字符型) Java 字符采用unicode编码,每个字符是一个16位无符号(不是补码,没有负数)整数,范围0~65535
常用的字符编码对应:
字符 编码
'0'~'9' 48~57
'A'~'Z' 65~90
'a'~'z' 97~122
boolean (1byte 8位,但实际上只占用了1bit,0或1即可)
补充:对于 byte short int long 4种类型,在定义和赋值时,小类型(表示范围小的)自动转化成大类型,反过来要强转,否则编译器会报错
char也可强转成int(char本身就是整数,可以直接参与运算)
随机生成A~Z随机字符demo
public static void main(String[] args) {
Random random = new Random();
int n = random.nextInt(26);//[0,26)
char c = (char)('A' + n);//计算生成 A~Z 的随机字符
System.out.println(c);
}
2.java语言特点
Java是强类型语言:变量是强类型的
1)变量必须用明确类型声明。
2)变量必须初始化以后才能使用。
3)变量有作用域,离开作用域就回收
4)变量不能重复定义
3.进制基础
数学:计数的规律
10进制:是逢10进1 的计数规则
权:10000 1000 100 10 1 每个数位上代表1的个数
基数:10 进位规律
数字:0 1 2 3 4 5 6 7 8 9
权是基数的n次幂
2进制: 是逢2进1 的计数规则
权:128 64 32 16 8 4 2 1 每个数位上代表1的个数
基数:2 进位规律
数字:0 1
权是基数的n次幂
10 2
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
11000000(2) = 128 + 64 = 192(10)
11000101(2) = 128 + 64 + 4+1 = 197(10)
234(10) = ?(2) = 11101010(2)
128 64 32 16 8 4 2 1
234(10) = 1 1 1 0 1 0 1 0 (2)
106 42 10 2 0
201(10) = ?(2)
218(10) = ?(2)
188(10) = ?(2)
16进制: 是逢16进1 的计数规则
权:256 16 1 每个数位上代表1的个数
基数:16 进位规律
数字:0 1 2 3 4 5 6 7 8 9 a b c d e f
权是基数的n次幂
141(16) = 1*256 + 4*16 + 1 = 321(10)
10 16 2
0 00 0000 0000
1 01 0000 0001
2 02 0000 0010
3 03 0000 0011
4 04 0000 0100
5 05 0000 0101
6 06 0000 0110
7 07 0000 0111
8 08 0000 1000
9 09 0000 1001
10 0a 0000 1010
11 0b 0000 1011
12 0c 0000 1100
13 0d 0000 1101
14 0e 0000 1110
15 0f 0000 1111
16 10 0001 0000
17 11 0001 0001
18 12 0001 0010
...
65 41 0100 0001
66 42 0100 0010
...
192 c0 1100 0000
193 c1 1100 0001
...
255 ff 1111 1111
4.补码的概念
补码:为了成本考虑,解决负数问题,利用大数作为负数使用。(在计算机系统中,数值一律用补码来表示和存储)
一种算法规定:以4位补码为例。
4位补码规定:
1)高位为1的数作为负数使用
2)计算时候如果超过4位,自动溢出舍弃
3) 补码是有范围的数:-8 ~ 7 不能表示超范围数字
4)在不超过范围情况下,补码满足数学运算,避免进行溢出计算
5)补码有对称现象, 不是数学现象!
“~” 取反运算,就是翻转0 1
~0=-1, ~1=-2, ~2=-3 ... ~n = -(n+1)
=> ~n = -(n+1)
=> ~n = -n -1
=> 1+~n = -n (大学讲的补码公式!)
根据 1+~n = -n 可以快速,计算负数补码(即一个负数的补码是其取绝对值后(正数)的补码(其本身)求反码后加1)正数的补码是其本身
6 的补码 0110 => 取反 1001 => 加1 1010
10 2
-8 1000
-7 1001
-6 1010
-5 1011
-4 1100
-3 1101
-2 1110 + 1 = 1111 数学上 ?+ 1 = -1
-1 1111 + 1 = 0000 数学上 ?+ 1 = 0
0 0000
1 0001
2 0010 -3 + -3 = ?
3 0011
4 0100 -3 1101
5 0101 -3 1101
6 0110 + 11 1
7 0111 -------------
-6 1010
补码的高位数推广, 推广范围
10 4补 8位补码(byte) 32位(int)
min --- --------- 10000000 00000000 00000000 00000000
min -1 10000000 00000000 00000000 00000001
.... ....
-129 -------- 11111111 11111111 11111111 01111111
-128 10000000 11111111 11111111 11111111 10000000
-127 10000001 11111111 11111111 11111111 10000001
-126 10000010
.... ....
-10 ---- 11110110
-9 ---- 11110111
-8 1000 11111000
-7 1001 11111001
-6 1010 11111010
-5 1011 11111011
-4 1100 11111100
-3 1101 11111101
-2 1110 11111110
-1 1111 11111111 11111111 11111111 11111111 11111111
0 0000 00000000 00000000 00000000 00000000 00000000
1 0001 00000001 00000000 00000000 00000000 00000001
2 0010 00000010
3 0011 00000011
4 0100 00000100
5 0101 00000101
6 0110 00000110
7 0111 00000111
8 ---- 00001000
9 ---- 00001001
10 ---- 00001010
...---- ...
126 ---- 01111110
127 ---- 01111111 00000000 00000000 00000000 01111111
128 ---- --------- 00000000 00000000 00000000 10000000
...
01111111 11111111 11111111 11111110
max -------- 01111111 11111111 11111111 11111111
5.关于Java的补码
1)Java 中数是补码,补码有正数也有负数
(负数高位为1,正数高位是0,高位也称为符号位)
2) Java采用补码计算,注意计算范围,避免超范围计算,避免溢出
3)记住关键数字: -1 0 max min 的补码
int 重要推论: max+1=min
-1 : 11111111 11111111 11111111 11111111 (常用数字)
0 :00000000 00000000 00000000 00000000
min: 10000000 00000000 00000000 00000000
max: 01111111 11111111 11111111 11111111
4)记住推论 :-n = ~n+1 => -n-1 = ~n
System.out.println(~-6); // ~-6 = -(-6)-1 = 5
5) 16进制,是2进制的简写形式。
是2进制每4位对应一位的简写。
本质上16进制就是2进制
-1 : 11111111 11111111 11111111 11111111 (常用数字)
f f f f f f f f
0 :00000000 00000000 00000000 00000000
0 0 0 0 0 0 0 0
min: 10000000 00000000 00000000 00000000
8 0 0 0 0 0 0 0
max: 01111111 11111111 11111111 11111111
7 f f f f f f f
6.java运算符
> < >= <= == !=
&& || ! & |
位运算符:
(1)数学上的移动
>>:右移,移的是二进制形式,(非负数时)前面的空位补0;负数时,前面的空位补1;右移一次相当于除以2
<<:左移,无论正数、负数、0,后面的通通补0;左移一次相当于乘以2
(2)无符号右移:
>>>:逻辑右移,前边的空位一律补0
条件运算符:表达式?a:b (前面的表达式为真时,整个结果为a,否则为b)
这里要强调的是:
(1)+是java中唯一的一个重载的运算符,既可以作为数学上的加法,又是作为字符串的连接使用
(2)&& || 的短路问题:例如if(a && b) 若a为假,则不再判断b的真假即可判定 a && b为假 ;同理 if (a || b) 若a为真,则整个表达式为真,不再判定b的真假
穿插小demo:
判断闰年:
import java.util.Scanner;
/**
* 闰年规定
* 注:闰年的判断公式为:
* 1.年份能被4整除,且不能被100整除的是闰年。
* 2.年份能被400整除的是闰年。
* 总结:四年一润,百年不润,四百年再闰
*/
public class LeapYear {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int year;
System.out.print("输入年份:");
year = in.nextInt();//2000
if( (year%4==0 && !(year%100==0)) || (year%400==0)){
System.out.println(year+"是闰年");
}
}
}
重拾java系列一java基础(1)的更多相关文章
- 【java系列】java开发环境搭建
描述 本篇文章主要讲解基于windows 10系统搭建java开发环境,主要内容包括如下: (1)安装资料准备 (2)安装过程讲解 (3)测试是否安装成功 (4)Hello Word测试 1 安装 ...
- 重拾java系列一java基础(2)
1.分支流程控制 if(布尔表达式/分支条件){ //语句块} if(布尔表达式/分支条件){ //语句块1}else{ //语句块2} if(条件1){ //语句块1}else if(条件2 ...
- 重拾java系列一java基础(3)
这一章主要复习下以前所接触的算法, (1)选择排序法:在要排序的一组数中,选出最小的一个数与第一个位置的数交换:然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较 ...
- 重拾java系列一java基础(4)
本章主要回顾一些类的相关知识: (1)static: static 静态的: 属于类的资源, 使用类名访问. 静态属性: 只有一份的变量 静态方法: 是属于类方法, 可以使用类名直接访问. 静态方 ...
- java系列(1/4)基础阶段-MySQL(2/13)
本单元目标 一.为什么要学习数据库 二.数据库的相关概念 DBMS.DB.SQL 三.数据库存储数据的特点 四.初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停 ...
- Java系列: JAVA字符串格式化-String.format()的使用(zz)
常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重 ...
- 重拾Java Web应用的基础体系结构
目录 一.背景 二.Web应用 2.1 HTML 2.2 HTTP 2.3 URL 2.4 Servlet 2.4.1 编写第一个Servlet程序 2.5 JSP 2.6 容器 2.7 URL映射到 ...
- 夯实Java基础系列5:Java文件和Java包结构
目录 Java中的包概念 包的作用 package 的目录结构 设置 CLASSPATH 系统变量 常用jar包 java软件包的类型 dt.jar rt.jar *.java文件的奥秘 *.Java ...
- 【Java】 重拾Java入门
[概论与基本语法] 取这个标题,还是感觉有些大言不惭.之前大三的时候自学过一些基本的java知识,大概到了能独立写一个GUI出来的水平把,不过后来随着有了其他目标,就把这块放下了.之后常年没有用,早就 ...
随机推荐
- 设置segue跳转页面
第二种是利用ViewController与ViewController之间,拖拽添加segue 方法中提到的设置segue的identifier界面 在.h文件中声明 - (IBAction)goto ...
- Facade 运行机制
举一个常见的例子在routes.php路由文件中的Route就是使用了laravel的Facade; config/app.php 文件中的aliases数组: 再例如其中的mail: 里面只是简单的 ...
- iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好
转载: iOS响应式编程:ReactiveCocoa vs RxSwift 选谁好 内容来自stack overflow的一个回答:ReactiveCocoa vs RxSwift – pros an ...
- Gradle 教程:第一部分,安装【翻译】
原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-1-installation-setup/ 在这篇教程里,我们将主要讲解如何在我们 ...
- Loadrunner基础:Loadrunner Vuser基本概念和应用
学习示例 Loadrunner自带有WebTour的网站可以帮助初学者学习性能测试安装完Loadrunner以后进入到Program Files下的WebTour文件加,启动WebTour服务在浏览器 ...
- (23)odoo中的domain表达式
---------更新日期:09:10 2016-03-03 星期四---------* Domain 表达式 # 用于过滤记录数,相当于sql的where ('f ...
- 初学java之事件响应(结合接口来设置在同一个界面上!)
package wahaha; public class test_1 { public static void main( String args[] ) { WindowActionEvent w ...
- 9. shell环境
• printenv –打印部分或所有的环境变量 • set –设置 shell 选项 • export —导出环境变量,让随后执行的程序知道. • alias –创建命令别名 1.shell环境:s ...
- Javascript之对象的继承
继承是面向对象语言一个非常重要的部分.许多OOP语言都支持接口继承和实现继承两种方式.接口继承:继承方法签名:实现继承:继承实际的方法.在ECMAScript中函数是没有签名的,所以也就无法实现接口继 ...
- pycharm 导包
如果需要requests包,python没有自带.可以执行命令:pip install requests,自动安装导入.