Java 基础 | 命名和运算

 
  接着之前的知识,今天主要回顾一下命名的一些规则和关于运算方面的基础知识吧。
  
  1. 驼峰命名法
类名/接口名:如果由多个单词组成,那么每一个单词的首字母大写。(比如说,HelloWorkd)
变量名/方法名:如果由多个单词组成,那么第一个单词的首字母小写,其余单词的首字母大写 playGame main
包名:如果由多个单词组成,那么每一个单词之间用 . 隔开,所有的字母都是小写 cn.tedu.de
常量名:如果由多个单词组成,那么每一个单词之间用 _ 隔开,所有字母都是大写 PLAY_GAME
 
  2. 注释
(用于解释说明的文字)
// 注释文字  单行注释
/* 注释文字*/  多行注释
/** 注释文字/  文档注释 --- 里面的注释内容可以利用 javadoc 命令提取出来形成文档(就是对程序的说明书)*会生成错误是因为配置环境变量时加入了 CLASSPATH,因为版本是 1.8 以上的了,所以可以删掉。
 
           
 
  3. 字面量
(在计算机中不可改变的量)
整数常量:所有的整数(比如说 7、15、186、42)
小数常量:所有的小数(比如说 3.12、8.005、6.0)
字符常量:将一个字母、数字或者是符号用 ‘ ’标识起来(比如说 ‘a’、‘+’、 ‘5’、‘小’、‘ ’)
字符串常量:将一个或者多个字符用 " " 标识起来(比如说 "abc"、"+")
布尔常量:true/false --- 用于表示逻辑值
空常量:null
 
 
(计算机通过有电、没电这样的小开关来存放数据,只有0和1两种状态,是二进制存放)
           
  4. 进制
(是一种计数方式(分和秒是 60 进制,天是 24 进制,周是 7 进制,但是常用的是 10 进制,计算机是二进制))
二进制:0-1,满 2 进 1  1+1=10  11+1=100  111+1=1000。在程序中以 0b/0B 开头标记一个二进制数字(从 JDK1.7 开始) 0b1001  0b00101
八进制:0-7,满 8 进 1  7+1=10  27+1=30 77+1=100  要求以 0 开头标记一个八进制数字
十进制:0-9,满 10 进 1  Java 中数字默认就是十进制
十六进制:0-9,A-F(不区分大小写),满 16 进 1  9+1=a  a+1=b  f+1=10  39+1=3a  3f+1=40  99+1=9a  9f+1=a0  af+1=b0  af+1=b0  ff+1=100,要求以 0x/0X 作为开头标记
  4.1进制的转换
 
十进制和二进制之间的转换
十进制转换为二进制:将这个十进制数字除以 2 ,从下依次向上倒取余数。
二进制转换为十进制:从这个二进制数字的最低位次开始,依次乘以 2 的0、1、2、…… 次,最后求和。
 十进制和其他进制之间的转换
十进制转化为其他进制:十进制数字向哪个进制转化那么就除以对应的进制,然后取余数,将余数倒排。
其他进制转化为十进制:从这个进制的数字的最低位次,然后按位次乘以当前的进制的位次次幂,最后求和  0274=4*8^0+7*8^2=4+56+128=188
一个面试题:16 * 5 = 150    (6 + n) * 5 = 5n + n^2,先设的是 n 进制,个位数是 6 ,那么进制肯定会大于或等于 6,于是前面可以表示为进制数相乘,后面可以用 10 进制转换为 n 进制)
 
八进制和二进制之间的转换
二进制转八进制:八进制数字排列 --- 三变一(就是从后往前数,三个三个一组,不足位数就在前面添 0)(比如说  001 101 010 = 0152    001 010 111 011=01273
八进制转化为二进制:05473 = 101100111011  03517 = 11101100001111
 
十六进制和二进制之间的转化:101100111011 = 0xb3b  011101001111 = 0x74f
0xd2c=110100101100  (0到15的二进制数字背住)
 
扩展:十进制小数转换为二进制
5.24 = 101.001111
0.24 * 2=0.48*2=0.96*2=1.92->0.92*2=1.84->0.84*2=1.68->0.68*2=1.36  0.72  1.44  0.88  0.76  
绝大部分的小数转化为二进制都是无限的 --- 所以计算机小数的时候会产生舍入误差(存小数的时候会出现问题,比如 0.13=0.12999999999)


 
 
   5.变量
(在程序中用于存储数据的容器,)
 
定义格式:数据类型  变量名 = 数据;int i = 5;
 
变量不能重名
变量必须先定义后使用
变量必须先给值后使用
变量必须在哪儿定义就在哪儿使用
 
扩展:计算机存储单位
每一个二进制数字称之为 1 位 --- bit -b
字节 - Byte - B  1B = 8b
千字节 - kilobyte - KB 1KB = 2^10B = 1024B
兆字节 - MB -> GB-> TB ->PB(帕比特)……
8Mb = 1MB
100Mb = 12.5MB(MB 是你的网速,这就是为什么你的网速一直达不到 100MB 的原因)
3GB = 3000MB --- 在通信领域是按照千进制计算

  

  6. 数据类型
 
  
  6.1基本数据类型
  6.11数值型
    整数型
        byte -字节型 - 1个字节 - -27~27 -> -128~127
         byte b=25; byte b2=127; byte b3 = -128;
        short - 短整型 - 2个字节 - -215~215-1 ->-32768~32767
         short s = 800; short s2 = 1500;
        int - 整型 - 4 个字节 - -231~231-1 ->  -2.1*109~2.1*109 - Java 中,整数默认为 int 类型
         int i = 6;  int k=5_482_637(当表示一个比较大的整数的时候,可以使用 _ 进行分类,这种写法是从 JDK1.7 出现的)
         5 482 637 
        long - 长整型 - 8个字节 - 263~263-1 -> -1018~1018,需要以 L/l 作为结尾标记
         long l=54L;
    浮点型
        float - 单精度 - 4 个字节 -> -1038~1038  ---  需要以 f/F 作为结尾
         float f=5.87f;  float f=3.87F;
        double - 双精度 - 8 个字节 ->-10308~10308  Java 中小数默认为 double 类型 - 小数结尾可以添加 D/d 作为标记。
        double d = 4.5; double d2=2.58; double d3=9.54D;
    char - 字符型 - 2 个字节 -> 0~65535,使用的是utf-16
     char c = 'a';  char c2 = '\ua4f3'(表示用 uft-16 的编码形式来定义的)  char c3 ='中'; 
  7. 转义字符
\t-制表符 table  \r-回车 return  \n-换行 next (打字机上回车把针头挪回开始位置,换行才是挪回到下一行)
  \\-反斜杠 \  \'-单引号 '  \"-双引号;
 
扩展:将字符转换为数字的过程称之为编码 --- 编码表
ISO - 8859 -1 - 西欧码表 - 1个字节表示 1 个字符  a
(美  回  区) 
gb2312 - 国标码 - gbk - 2 个字节表示 1 个字符 - 收录了常见的简体汉字以及一部分常见的繁体汉字
Unicode 编码体系 - 收录了世界上常见语言的基本字符(像西夏文、原始部落的语言就不用收录了,) --- 规定了一系列的编码规则 - utf-8 -> 3个字节表示一个字符  utf-16 ->2个字节表示一个字符(java 用的)
注意:规定无论哪张码表兼容西欧码表
k 1 1 1 1 1 (英文不区分码表)
区 X 2 3  2(汉字要区分码表)
 
    boolean - 布尔型 -true/false,用于表示逻辑值(内存随着操作系统、JDK 版本在变化,)
     boolean b = true;  boolean b2 = false;
 
  6.2 引用数据类型 --- 数组 [] 类 class 
 
  7.数据类型的转换
  7.1自动类型转换/隐式转换
 
byte b = 125;
int i = b;
规律一:小的类型自动转化为大的类型
short s=7;
long l=s;
 
long l=500; //500是一个整数,整数默认为 int,int 的范围比 long 小,所以可以自动转换
 
float f = 56.71F;
double d = f;
 
int i=300;
double d=i;
规律二:整数类型可以自动转化为浮点类型,可能会产生一个舍入误差(1.23456794E9  xey 表示 x*10^y,而 ox3e5 才表示一个 16 进制)
int i = 500;
float f=i; // i 是 int 类型,int 的取值范围比 float 小,所以 int 可以自动转化为 float
 
long l=259L;
float f=l;
 
float f=-25;// -25 是整数,
 
char c='a';
int i=c;
规律三:
 
  7.2强制类型转换/显示转换
 
int i=135;
byte b=(byte)i;
规律一:当把大的类型转化为小的类型的时候,因为补码的换算问题,所以可能会产生一个意想不到的结果
double d = 6.4;
int i = (int)d;
规律二:小数在转化为整数时要舍弃小数位。
 
扩展:数据的原反补三码
数据类型的最高位是符号位 --- 如果最高位是 0,则表示一个正数,如果最高位是1,则表示一个负数。
计算机中存储的是数据的补码
直接计算出来的二进制数字是数据的原码
 
int i=7;
00000000 00000000 00000000 00000111  原码
00000000 00000000 00000000 00000111  反码
00000000 00000000 00000000 00000111  补码
如果是负数,那么反码是在原码的基础上,最高位不变,其余位 0<->1; 补码是在反码的基础上 +1
int j=-9;
10000000 00000000 00000000 00001001  原码
11111111 11111111 11111111 11110110  反码
11111111 11111111 11111111 11110111  补码
 
byte b = -18;
原码:10010010
反码:11101101
补码:11101110(计算机中存放的就是这个,补码)
 
int i = 135;
byte b = (byte)i;
00000000 00000000 00000000 10000111
10000111 补码(计算机中存放的是这个,补码)
10000110 反码
11111001 原码(1+8+16+32+64=121 -> -121,显示出来的是这个)
注意:规定用 -0 表示当前类型的最小值    1000 0000 --- -128(原反补都是相同的)0000 0000 --- 0
byte b = 126;
+1 = 127 + 1 = -128 
 
  8. 运算符
  8.1算数运算符
  (+ - * / % ++ --)
注意:
1.byte/short/char 在运算时自动提升为 byte b1 = 5;  byte b2 = 7;  byte b = b1+b2;(是会报错,因为后面是 int 型的,)
2.整型在运算的时候保持类型不变(比如说一个整型除以一个整型还是整型)
3.小类型和大类型运算,结果一定是大类型(比如说一个 int 型除以一个 double 型就是一个 double 型的)
4.任意整数/0 - ArithmeticException - 算术异常 
   任意整数/0.0 任意非零小数/0 - Infinity - 无穷大
   0/0.0  0.0/0.0  0.0/0 NaN - Not a Number - 非数字
 
% - 取模运算 - 取余运算
9 % 4 = 1 、3 % 8 = 3
-9 % 4 = -1 、 9 % -4 = 1 、 -9 % -4 = -1
% 的结果的正负看的是 % 左边数据的正负 -> 如果左边的数字是一个正数,那么结果就是正数;反之,那么结果就是负数
5%1.4=0.8 、 6.3 % 1.7  = 1.2
 
++/-- 自增/自减运算
++/--  如果在变量之前,那么先自增/自减,然后参与后续运算
++/-- 如果在变量之后,那么先参与运算,然后再自增/自减
int i= 6;  
int j=i++ + ++i; //输出结果 i = 8 ,j = 14
 
byte/short/char  都可以参与自增运算
char c = 'b'
int c = c + 2; ->100
'a' ~'z' -> 97~122      'A'~'Z' -> 65~90      '0' ~'9'-> 48~57
 
  8.2赋值运算符
  8.3关系运算符
  8.4逻辑运算符
  8.5位运算符
  8.6三元运算符
 
关于 >> 和 >>> 的区别:
https://blog.csdn.net/blog_szhao/article/details/23997881
原文地址:https://www.cnblogs.com/tangdiao/p/9403689.html