Java笔记(二)

数据(Data)

是系统的核心,我们编程的目的就是为了操作数据(增,删,改,查)

在代码中如何定义和存储数据呢?需要通过变量或者常量以及数据类型

注意:Java是一种强类型的语言,也就是说任何数据都需要有类型.
JavaScript,弱类型的编程语言,定义变量时无需声明数据类型

Java语言分为基本类型和对象类型两大类数据类型(无数种)
1)基本类型(8种):
名称 容量 范围 默认值
byte 字节型 占1字节=8bit -128~127 0
short 短整型 占2字节=16bit -32768~32767 0
int 整型 占4字节=32bit -2147483648~2147483647 0
long 长整型 占8字节=64bit -2^63 ~ 2^63 - 1 0
float 单精度浮点数 占4字节=32bit -3.4E+38 ~ 3.4E+38 0.0
double 双精度浮点数 占8字节=64bit -1.797E+308 ~ 1.797E+308 0.0
char 字符型 占2字节=16bit ‘a‘ , ‘B‘, ‘您‘ \u0000
boolean 布尔类型 占1字节=8bit true/false false

注:1.JAVA中所有的数字都是带符号的
2.字符型和字符串是不同的,字符型用单引号,字符串用双引号
char c = ‘您‘;
String s = "好好学习,天天向上!"
3.java中,你写一个整数,默认是int类型的,写一个小数,默认是double类型的.
float f = 3.4;//编译错误,3.4默认是double类型的,不能赋值给float类型的变量

4.cmd命令行中查看中文字的unicode编码的方法
a.打开命令行
b.输入native2ascii回车
c.输入想查询的中文字回车即可得到对应的unicode

ctrl + c 关闭当前转换进程

2)对象类型
a. 内置对象类型(API)
Scanner,Math,Random,String...

b. 自定义对象类型
我们编程时写过的所有类都是自定义对象类型
-------------------------------------------------------------------
特殊符号:
\t 制表符 表示隔开一个tab的距离
\n 换行 到下一行的起始位置
\r 回车 到当前行的起始位置
\b 退格 相当于键盘上的BackSpace
\\ 反斜杠
\" 双引号
\‘ 单引号
-------------------------------------------------------------------

变量

语法
数据类型 变量名 [= 给变量的初始值];

注:
变量名和类名一样,都是由数字,字母,_,$组成并且不能是数字开头
变量名可以是中文汉字,但是不推荐,因为可能出现乱码问题
变量名尽量首字母小写,以后每个单词首字母大写(常量除外)
如: int num = 1;
int inputInt = sc.nextInt();

|.可以在声明的时候直接初始化(第一次给变量赋值)
如:int i = 100;
double d = 3.14;
String str = "你好!";

||.先声明变量,在使用前,初始化
如:int i;
.....
i = 100;

字面量:就是指代数据本身,它也属于变量
"你好!",‘A‘,3.14,100

注意:所有程序都是由变量所组成的!

给变量赋值的方式:
a.字面量赋值
int i = 3;

b.方法赋值
public int add(int i,int j){
return i + j;
}

int i = add(3,4);

c.表达式赋值
表达式:由变量和运算符组成的合法的语句
int i = sc.nextInt();

int a = 1, b = 2;
int i = a + b;

----------------------------------------------------------
常量

在变量的基础上加一个关键字 -- final

常量一定要初始化,它的值是不能改变的

如:
final int ROW_EACH_PAGE = 10;//定义了一个常量

常量的命名规则:使用大写字母,并且中间用下划线隔开

注意:常量比字面量携带更多的信息,提高了代码的可读性
----------------------------------------------------------

数据类型转换:
1.自动类型转换(隐式类型转换)
由精度小的数据类型可以自动转换成精度大的数据类型

如:byte -> short -> int -> long
char -> int
boolean -> int //error

2.强制类型转换
由精度大的数据类型往精度小的数据类型转换时,可能损失精度,
编译器会报错,必须采用强制转换
如:
1)在所需转换的数值前面加(类型)
注:这里的类型,可以是基本类型,也可以是对象类型
int i = 220900;
char c = (char)i;

float f = (float)3.14;

2)只有long,double,float可以这样转换
在所需转换的数值后面加L/l,D/d,F/f
float f = 3.14F;

注意:
在JAVA中,两种数据类型进行运算时,结果都是偏向数据类型
更大的那一方

----------------------------------------------------------

1byte = 8bit
1K = 1024byte
1MB = 1024K
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
1ZB = 1024EB
1YB = 1024ZB
1BB = 1024YB
1NB = 1024BB
1DB = 1024NB

注:手机流量是以1000为计算界限的
----------------------------------------------------------

进制
二进制:只有0和1所组成,每遇到2进1

二进制 十进制
0101 1*2^2 + 0*2^1 + 1*2^0 = 5
1010 1*2^3 + 1*2^1 = 10;
1111 15

二进制转十进制
先从右往左标记,从0开始,然后累加相应位置数字乘以进制数的标记次方

十进制转二进制
连续除以2,然后倒取余数

小练习:
39 --> 0010 0111

110010 --> 50
-------------------------------------------------------------

0011 1000 ---> 56
0001 1100 ---> 28
0000 1110 ---> 14
0000 0111 ---> 7

位移运算 -- 所有运算中效率最高的
二进制中,向右移动一位,相当于除以2,向左移动一位,相当于乘以2

八进制:由0~7组成,每逢8进1
032 0*8^2 + 3*8^1 + 2*8^0 = 26

十六进制:由0~9和A~F组成,以0x开头
int i = 0x0029;
2*16^1 + 9*16^0 = 41

小练习:
求出0x0419的二进制?
0x0419
求十进制:4*16^2 + 1*16^1 + 9*16^0 = 1049
求二进制:0100 0001 1001

系统内置的转换方法(十进制转换成相应字符串):
toBinaryString(int i) 转换二进制字符串表示

toHexString(int i) 转换十六进制字符串表示

toOctalString(int i) 转换八进制字符串表示
------------------------------------------------------------------

运算符

|.算术运算符
+ 1.数学运算 2.字符串的连接
- 减法(负号)
* 乘法
/ 除法 100/3 = 33 100/3.0 = 33.33333333
% 取余 100%3 = 1

= 表示赋值 int i = 3; 把3赋值给int类型的变量i
== 表示等于 返回类型:boolean

+= -= *= /= %=
如:
b = b + 1; --> b += 1;//后面这种写法可以避免类型转换问题

++ 自增
-- 自减
前++ 表示++写在变量的前面,表达式和变量的值本身都加1(先自增,后赋值)
后++ 表示++写在变量的后面,表达式的值不变,变量加1(先赋值,后自增)

位移运算:性能是最高的
<< 带符号左移位
>> 带符号右移位
>>> 不带符号右移位

注意:没有不带符号左移位(<<<)

<<= >>= >>>=

面试题:
请你用最快并且性能最高的方式得到4的3次方? 4<<3

算术运算符是一种二元运算符,需要两个参数来参与
对算术运算符来说,操作数只能是数字类型(整型,浮点型)
特殊例外:字符串可以用+运算(拼接)

低精度和高精度做运算时,结果是高精度
相同精度数据进行运算,结果是它本身的数据类型

||.比较运算符(返回布尔类型)
< 小于
> 大于
<= 小于等于
>= 大于等于
!= 不等于

|||.逻辑运算符

&& 短路逻辑与 同真为真,同假为假,只要有一个为假,结果为假

|| 逻辑或 同真为真,同假为假,只要有一个为真,结果为真

! 逻辑非 表示取反

如:
boolean b1 = true;
boolean b2 = false;
boolean b = b1 && b2;//false
b = b1 || b2;//true
b = !b1;//false

注意:
& 1.非短路的逻辑与(一般不用)
2.按位与

| 1.非短路的逻辑或(一般不用)
2.按位或

短路型和非短路型逻辑运算符的区别:

短路型运算符,如果运算符左边的结果可以决定整个式子的结果,
那么右边部分就不会执行了
所以,我们在编写代码的时候,需要考虑一下,把哪个条件放在运
算符前面
用逻辑与时,把两个条件中可能为false几率更大的一个放前面
用逻辑或时,把两个条件中可能为true几率更大的一个放前面
这样可以提升整个软件的性能.

||||.按位运算符
& 按位与(非短路逻辑与) 同0为0,同1为1,不同为0
| 按位或(非短路逻辑或) 同0为0,同1为1,不同为1
^ 按位异或 相同为0,不同为1
公式:
一个数连续异或同一个数两次,结果是它本身
5 ^ 7 ^ 7 = 5

如:
5的二进制:0101
7的二进制:0111

0101
& 0111
------
0101 -- 5 & 7 = 5

0101
| 0111
------
0111 -- 5 | 7 = 7

0101
^ 0111
------
0010 -- 5 ^ 7 = 2
^ 0111
------
0101

~ 按位取反
0变1,1变0

负数,在计算机中是以补码的形式存储的

补码 = 原码取反 + 1
~x = -(x + 1)

负数的二进制如何得到?
2的二进制 00000000 00000000 00000000 00000010
按位取反 11111111 11111111 11111111 11111101
再+1 11111111 11111111 11111111 11111110
-2的二进制 11111111 11111111 11111111 11111110

-9的二进制:
00000000 00000000 00000000 00001001
11111111 11111111 11111111 11110110
11111111 11111111 11111111 11110111

~9 = -10
11111111 11111111 11111111 11110110

00000000 00000000 00000000 00001010
11111111 11111111 11111111 11110110

--------------------------------------------------------------

三目运算符 ? :
作用:条件判断

condition ? expression_1 : expression_2;
条件?表达式1:表达式2;

当条件成立时,执行表达式1,当条件不成立是,执行表达式2

相当于
if(条件){
//表达式1;
}else{
//表达式2;
}

时间: 2024-10-09 19:41:10

Java笔记(二)的相关文章

JAVA笔记二

JAVA笔记二 常量:表示不可改变的值 变量:将不确定的数据进行存储也就是需要在内存中开辟一个空间 如何开辟内存空间? 就是通过明确的的数据类型 变量名称 数据来完成 Integer.toBinaryString(number); JAVA提供转换二进制的方法; number表示转换成二进制的数字 两个变量不通过第三个变量进行两个值得交换 1.int a=3,b=8; a=a+b; a=a-b; b=a-b; 此方法有局限性比如说a+b的大于2^32-1就会出现错误 我们可以通过异或运算来进行交

Java笔记二十.深入解析I/O编程之文件访问类

深入解析I/O编程之文件访问类 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 开始学习字节流类之前,我们来先看下与文件有关的类-File类.File类是IO包中唯一代表磁盘文件本身的对象,File类定义了一些与平台无关的方法来操作文件,通过调用File类提供的各种方法,我们能够创建.删除文件.重命名文件以及判断文件的读写权限及其是否存在,设置和查询文件的最近修改时间等.在Java中,目录也被当作File使用,只是多了一些目录特有的功能---

Java笔记二十一.深入解析I/O编程之节点流

深入解析I/O编程之节点流 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 在上一节我们说到IO流主要分为两个大类:节点流类和过滤流类(也称包装类).程序用于直接操作目标设备所对应的类叫节点流类;为更加灵活方便地读写各种类型的数据,程序也可用通过一个间接流类去调用节点流类而这个简介流类即为过滤流类(也称为包装类). 总之,无论是节点流类还是过滤流类,它们都属于字节流或字符流其中的一种.下面我们介绍一下常见的节点流类有哪些. 字****节***

Java笔记二十二.深入解析I/O编程之包装类

深入解析I/O编程之包装类 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 从上节学到的节点流类我们知道,如Java中提供的FileOutputStream和FileInputStream类实现往文件中写入字节或从文件中读取字节数据.在实际应用中,我们需要往文件中写入或读取各种类型的数据,一般的做法是先将其他类型的数据转换成字节数组后写入文件或是将从文件中读取到的字节数组转换成其他类型.然而,上述方法会给我们的程序增加了代码量和带来一些困难和

Java笔记二十三.网络编程基础与UDP编程

网络编程基础与UDP编程 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 一.网络编程基础 1.TCP/IP协议:TCP/IP协议是一个非常实用的网络应用程序通信协议,包括TCP(传输控制协议)和IP地址(计算机唯一标识号). 2.IP地址:IP在互联网中能唯一标识一台计算机,是每一台计算机的唯一标识(身份证),通过这个标识号来指定接收数据的计算机和识别发送数据的计算机,该标识号即为IP地址. (1)Ipv4:指在计算机中IP地址用4个字节(

Java笔记二十四.TCP网络编程

 TCP网络编程 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 从上面一节内容可以知道,利用UDP通信的两个程序是平等的,无主次之分,两个程序代码可以完全一样.但利用TCP协议进行通信的两个应用程序,是有主从之分的,一个称为服务器程序,另外一个称为客户机程序.Java中提供了ServerSocket类用于创建服务器端的socket,Socket类用于创建客户端socket. 一.APIs简介 java.net.ServerSocket (1

Thinking in java 笔记二

第五章 初始化与清理 5.1 用构造器确保初始化 5.2 方法重载 区分重载方法:每个重载方法都必须有一个独一无二的参数列表:基本类型参数能从一个较小的类型自动提升至一个较大的类型:不能以返回值区分 5.3 默认构造器 无参构造器,没有编译器会自动生成 5.4 this关键字 this关键字只能在方法内部使用,调用方法的那个对象的引用:在构造器中调用构造器:static方法没有this参数 5.5 清理:终结处理和垃圾回收 对象可能不被垃圾回收:垃圾回收并不等于析构:垃圾回收只与内存有关 fin

Java学习笔记二:初始化(一)

1.对象初始化 在使用 new 初始化对象时,系统通常使用默认的构造函数,这个构造函数没有返回值,格式为: public class InitializeTest { private int a; // 默认构造函数 public InitializeTest() { } // 自定义构造函数 public InitializeTest(int a) { this.a = a; } } 虽然在使用 new 创建实例时,返回了这个对象的引用,但是这个与没有返回值的void方法不同 //void方法

Java学习笔记二:数据类型

Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围从-2 147 483 6至2 147 483 647 超过20亿,如果用来存储大于20亿的值,最好使用long型. 1.2  int 与Integer: Java中的数据类型分为基本数据类型和复杂数据类型.Int为前者,integer为后者. Integer是int的封装类,提供了很多转换方法,当