重拾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出来的水平把,不过后来随着有了其他目标,就把这块放下了.之后常年没有用,早就 ...
随机推荐
- hibernate执行sql的三种方式
方式一:直接使用HibernateTemplate的find()方法,find方法支持执行hql语句 List<T> list = this.getHibernateTemplate(). ...
- WEB前端性能优化:HTML,CSS,JS和服务器端优化
对前端开发工程师来说,前端性能优化的重要性是不言而喻的,最为大家所知的是YSLOW的23条优化规则,在我的理解中,性能优化不纯粹是指用户访问网站的速度,也包括开发的效率,这里我总结下我理解中的WEB前 ...
- 51nod 1050 循环数组最大子段和
题目链接:51nod 1050 循环数组最大子段和 #include<stdio.h> #include<algorithm> using namespace std; ; l ...
- HDU 4122
Alice's mooncake shop Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- js 面试题
1.用原生js,创建一个无序列表添加到body中,ul下包含5个li,每个li包含一个text类型元素,text元素内容可自定义: <script type="text/javascr ...
- tds 安装找不到已安装的DB2
应该是没有安装ksh的问题,yum install ksh
- 为什么你总是学不好Linux技术?这是我的答案。
摘要: 我们为什么要学习Linux,最近几年Linux发展迅速,特别服务器领域,带来了很多新技术,云计算,虚拟化,大数据等技术,还有安全方面都有了很大的发展同时也给了Linux运维工作带来了,更多的要 ...
- 网页优化URI(http URI scheme与data URI scheme)
网页优化的一大首要任务是减少HTTP 请求 (http request) 的次数,例如通过合并多个JS文件,合并CSS样式文件.除此之外,还有一个data URL 的密技,让我们直接把图像的内容崁入网 ...
- TopCoder SRM 582 ColorfulBuilding
DP 思路是三维,但是时间肯定会超时,需要根据其特殊性质加两个标记数组,优化成二维. 刚开始想了N久N久,没感觉,还是动手画了一下才有用呀,意淫再久,不如动手呀. 代码: #include<i ...
- php头像上传并裁剪支持3个尺寸
源码下载