java 基础提炼

Posted 啄木鸟伍迪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 基础提炼相关的知识,希望对你有一定的参考价值。

一、标识符:凡是自己命名的都是标识符

1.标识符的定义规则:

  •  由26个字母大小写,0-9,_或$组成;
  • 数字不能开头;
  • 不可以用用关键字、保留字,但可以包含关键字和保留字;
  • java严格区分大小写;
  • 标识符不能包含空格.

2.java中名称的命名规范:

  • 包名:多单词组成时,所有字母都小写xxxyyy;
  • 类名、接口:多单词组成时,所有单词首字母大写:XxxYyy;
  • 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz;
  • 常量名:所有字母大写,多单词时,每个单词用下划线连接;XXX_YYY_ZZ;

 二、计算机中的进制:

 1 public static void testBinerary() {
 2         int num1 = 0b110;
 3         int num2 = 110;
 4         int num3 = 0127;
 5         int num4 = 0x110A;
 6         System.out.println("num1="+num1);//打印出来的都是10进制
 7         System.out.println("num2="+num2);
 8         System.out.println("num3="+num3);
 9         System.out.println("num4="+num4);
10         //自动转换
11         int i= 60;
12         String s1 = Integer.toHexString(i);    
13         String s2 = Integer.toBinaryString(i);
14         System.out.println(s1+","+s2);
15                 
16     }
View Code

三、变量:内存中的一个存储区块,用于内存中保存数据,包含变量类型 变量名 和存储值。

基本说明

  1.  java中每个变量需要先明,后使用(变量在方法内声明,必须赋值(初始化)才能使用;在类中声明,会带默认值);
  2.  使用变量访问区块数据;
  3.  变量只有在共有作用域中才有效;
  4.  同一个作用域内不能定义重名的变量;

java中的数据类型:

  1. 基本数据类型:byte short int long float double char boolean
  2. 引用数据类型:类 接口 数组

变量的使用:

 1 /**
 2      *整型变量的使用;
 3      *byte = 8bit 可以表示2^8个数 -128 ~127;1字节</br> 
 4      *short 可以表示2^16个数;2字节</br>  
 5      *int 可以表示2^32个数;4个字节</br> 
 6      *long 可以表示2^64个数 8个字节,必须以大写的L/l的结尾;
 7      */
 8     public void testInteger() {
 9         //byte 的范围 -128 ~127
10         byte b1 = 1;
11         byte b2 = 127;
12         //long变量 必须以大写的L/l的结尾
13         long l = 34444444444L;
14     }
15     
16     /**
17      *浮点型(带小数点的): 
18      * float:4字节 7位有效数字
19      * double:8字节
20      */
21     public void testFloat() {
22         double d1 = 123.1;
23         System.out.println(d1+1);
24         //float 定义 后面加f/F结尾
25         float f1 = 123.1f;
26         System.out.println(f1);
27     }
28     /**
29      *字符型:
30      *
31      *<p>1个字符 = 2字节</br>
32      * 声明char 变量,通常使用单引号</br>
33      * 允许使用转义符‘\\’ 来将其后的字符转变为特殊字符型常量;如\\n\'表示回车</br>
34      * 直接使用Unicode值来表示字符常量 \\\\uXXXX 其中 XXXX代表一个十六进制整数</br>
35      * </br>
36      */
37     public static void testChar() {
38         //\'\'里面只有写一个字符
39         char a = \'a\';
40         System.out.println(a);
41         //转义字符
42         char c1 = \'\\n\';//回车
43         char c2 = \'\\t\';//制表符
44         char c3 = 97;//十进制的a
45         char c4 = \'\\u0061\';//16进制a
46         char c5 = \'\\u34c7\';//
47         System.out.println("a"+c1);
48         System.out.println("hello"+c2+"world");
49         System.out.println(c3);//对应ASC码
50         System.out.println(c4);
51         System.out.println(c5);
52     }
53     
54     /**
55      *boolean:只能取两个值之一:true false
56      *<p>常在判断 or 循环结构中使用
57      */
58     public void testBoolean(){
59         boolean bb1 = true;
60         System.out.println(bb1);
61         
62     }
View Code

基本本数据类型之间的运算规则 (这里讨论的基本数据运算,不包含Boolean)

 1.自动提升:小的范围 和 大范围的做运算时 用大范围的数据类型来接收:

  byte、short、char --> int --> long-->float --> double <br>
  byte short char 之间做运算或者跟跟自身做运算 ,都需要用int接收
 2.强制类型转换:自动类型提升的逆运算;可能会导致精度损失
   需要使用强转符:()
3.整型常量 默认是int 浮点型常量默认是 double;

 1 /**
 2  * 自动类型提升
 3  */
 4     public static void testOperation() {
 5         byte b1 = 2;
 6         int i1 = 3;
 7         int res = b1 + i1;
 8         char c1 = 97;
 9         short s = 1;
10         // char res2 = c1 +s; //char + short 运算
11         // res2 = b1 +c1;//char + byte 运算
12         // char res2 = b1 +s;//short + byte 运算
13         System.out.println(res);
14     }
15     /**
16      *强制类型转换 
17      */
18     public static void testConversion() {
19         double d1 = 12.3;
20         int i = (int)d1;
21         System.out.println(i);
22     }
23     
24     /**
25      *整型常量 默认是int 浮点型常量默认是 double; 
26      * 
27      */
28     public static void testSpecial() {
29         byte b1 = 12;
30         //byte res = b1+1;//报错:1是int ,所以这里需要用int接收
31         float f = 1.1f;
32         //float res2 = f+1.2;//报错:1.2默认是double,double的范围比float大不能自动类型提升;         
33     }
View Code

  String类型变量的使用

  1. String属于引用数据类型;(其他的引用数据类型有 类 和接口 数组)
  2. 声明String类型变量时,使用“”;
  3. String 可以和8中数据类型做运算,运算只能是连接运算,运算的结果是String类型;
 1 public static void testOperation() {
 2         boolean b = true;
 3         String s = "s";
 4         System.out.println(s+b);//这里的“+”是连接运算;
 5         char c=\'a\';
 6         int num = 100;
 7         String str = "hello";
 8         System.out.println(c+num+str);//c+num 是加法运算,后面是连接运算
 9         System.out.println(c+str+num);//c+str 是连接运算,后面是连接运算
10         System.out.println(c+(num+str));//(num+str)连接,都是连接
11         System.out.println((c+num)+str);//c+num 是加法运算,后面是连接运算
12         System.out.println(str+c+num);//都是连接
13         System.out.println("*"+"\\t"+"*");
14         System.out.println("*"+("\\t"+"*"));
15         System.out.println(\'*\'+\'\\t\'+"*");
16         System.out.println(\'*\'+(\'\\t\'+"*"));
17         //String strw = 123;//声明String类型变量时,使用“”
18         String str1 =  123+"";
19         //int num1 = (int)str1;//不能强转int Integer.parseint(str1)
20     }
View Code

 

四、运算:

算术运算符( + - * / % ++ -- ....)

 1 public static void testAri() {
 2         //除法
 3         int num1 = 12;
 4         int num2 = 5;
 5         System.out.println(num1/5);
 6         double d1 = 12;
 7         double d2 = 5;
 8         double res = d1/d2;
 9         double res1 = num1/num2+0.0;
10         double res2 = (0.0+num1)/num2;
11         System.out.println("res:"+res);
12         System.out.println("res1:"+res1);
13         System.out.println("res2:"+res2);
14         
15         //++运算,前++,先自增,再运算;后++,先运算后自增1;
16         int a1 = 10;
17         int b1 = ++a1;
18         System.out.println("a1:"+a1+",b1:"+b1);
19         
20         int a2 = 10;
21         int b2 = a2++;
22         System.out.println("a2:"+a2+",b2:"+b2);
23         
24         short s1 = 10;
25         s1++; //s1 = (short)(s1+1);++不会改变自身数据类型
26         
27         byte bb1 = 127;
28         bb1++;
29         System.out.println("bb1:"+bb1);
30         
31         
32         //取余,结果的符号与被摩数的符号一样
33         int m1 = 12;//被模数
34         int n1 = 5;//模数
35         System.out.println("m1 % n1 = "+ m1%n1);
36         
37         int m2 = -12;//被模数
38         int n2 = 5;//模数
39         System.out.println("m2 % n2 = "+ m2%n2);
40         
41         int m3 = -12;//被模数
42         int n3 = -5;//模数
43         System.out.println("m3 % n3 = "+ m3%n3);
44         
45         int m4 = 12;//被模数
46         int n4 = -5;//模数
47         System.out.println("m4 % n4 = "+ m4%n4);
48     }
View Code

tips:前++ 和 后++ 的具体区别,可以查看:https://www.cnblogs.com/lixiuming521125/p/10865392.html

 赋值运算:= +=,-+,/+,%=

 1 public static void testSetValue() {
 2         //赋值符号
 3         int i1 = 10;
 4         int j1 = 10;
 5         
 6         //连接赋值;
 7         int i2,j2;
 8         i2= j2 =10;
 9         
10         int i3,j3 =20;
11                 
12         int num1 =10;
13         num1 +=2;//num1 = num1+2
14         System.out.println(num1);
15         
16         short s1 = 10;
17         s1+=2;//+= 不能改变变量的数据类型
18         System.out.println(s1);
19         
20         int i = 1;
21         i *= 0.1;
22         System.out.println("i:"+i);//i=0
23         
24         int m = 2;
25         int n = 3;
26         n *= m++;
27         System.out.println("m:"+m);
28         System.out.println("n:"+n);
29         
30         int nn = 10;
31         nn += nn++ +(++nn);// nn =  nn+(nn++ +(++nn))
32         System.out.println(nn);
33         
34         
35     }
View Code

比较运算: == != < > <= >=

  1. 比较运算的结果是boolean类型;只能是true or false; 
  2. < > <= >=:只能使用在数值类型的数据之间;
  3. ==:不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间;

逻辑运算:只能适用于boolean的变量 (相关扩展:https://www.cnblogs.com/lixiuming521125/p/12053966.html

 1 public static void testLogic() {
 2         //区分& 和 &&
 3         //相同点:& 和 && 的运算结果相同;当符号左边是true时,二者都会执行右边运算;
 4         //不同点:当符号左边是false是,& 还是执行右边运算, && 不执行;
 5         boolean b1 = false;
 6         int num1 = 10;
 7         if(b1 &(num1 ++>0)) {
 8             System.out.println("if");
 9             
10         }else {
11             System.out.println("else");
12         }
13         System.out.println(num1);
14         int num2 = 10;
15         if(b1 &&(num2 ++>0)) {
16             System.out.println("if");
17             
18         }else {
19             System.out.println("else");
20         }
21         System.out.println(num2);
22         
23         // 区分: | 和 ||
24         //相同点:| 和 || 的运算结果相同;当符号左边是false时,二者都会执行右边运算;
25         //不同点:当符号左边是true是,| 还是执行右边运算, || 不执行;
26         boolean b2 = true;
27         int num3 = 10;
28         if(b2 |(num3 ++>0)) {
29             System.out.println("if");
30             
31         }else {
32             System.out.println("else");
33         }
34         System.out.println(num3);
35         int num4 = 10;
36         if(b2 ||(num4 ++>0)) {
37             System.out.println("if");
38             
39         }else {
40             System.out.println("else");
41         }
42         System.out.println(num4);
43     }
44     
View Code

位运算:操作的是整型的数据

  1.  x<<n  x*2^n   
  2.  x>>n  x*2^-n       
  3.  >>> 无符号右移:   
  4.  &:与               
  5.  |:或              
  6.  ^:异或           

 面试题:最高效的计算 2*8 2<<3

 1 public static void testBitAri() {
 2         int i = 21;
 3         System.out.println("i<<2:"+(i<<2));//21*2^2
 4         System.out.println("i>>:"+(i>>2));
 5         
 6         int m = 12;
 7         int n = 5;
 8         System.out.println("m&n:"+(m&n));
 9         System.out.println("m|n:"+(m|n));
10         System.out.println("m|n:"+(m^n));
11         
12         //交换两个变量的方式
13         //方式一:
14         int num1 = 10;
15         int num2 = 20;
16         int temp = num1;
17         num1 = num2 ;
18         num2 = temp;
19         System.out.println("num1:"+num1+",num2:"+num2);
20         //方式二:
21         num1 = num1+num2;
22         num2 = num1-num2;
23         num1 = num1-num2;
24         System.out.println("num1:"+num1+",num2:"+num2);
25         //方式三: m =(m^n)^n
26         
27         num1 = num1^num2;
28         num2 = num1^num2;
29         num1 = num1^num2;
30         System.out.println("num1:"+num1+",num2:"+num2);
31     }
View Code

三元运算符:(表达式)? 表达式一:表达式二

  1. 条件表达式的结果是boolean类型;
  2. 根据条件表达式的结果,决定执行表达式一or 二; true:表达式一,否则:表达式二
  3. 表达式一 和表达式二 要求是一直的;
  4. 凡是使用3元运算符的,都可以改写成 if else;反之 不成立
  5. 如果既可以使用三元运算符,又可以用if else ,就使用 三元运算符,因为运行效率高
 1 public static void testThreeAri() {
 2         //获取两个数的较大值
 3         int m= 12;
 4         int n = 5;
 5         int max = m>n?m:n;
 6         String res = m>n?"m 大":(m==n?"相等":"n大");
 7         System.out.println(max);
 8         System.out.println(res);
 9         
10         if(m>n) {
11             System.out.println("m大");
12         }else {
13             
14             
15         }
16     }
View Code

 

五、流程控制:

分支结构:1.if else 

 if(条件表达式){

}


 if(条件表达式){
}else{

 }

if(条件表达式){
}else if{
}....
 else{

}

分支结构:2.switch case

switch("表达式"){
      case 常量一:
      执行语句
     ///break;
     case 常量二:
     执行语句;
 ///break;    
      ...
      default:
      执行语句;
  }

 switch(表达式) 这个表达式只能是如下6种数据类型: byte short int char int 枚举 String
 case后只能加常量;
 break 关键字是可选的;
 default:相当于if-else 中的else default是可选的;而且位置是可变的(比如:default可以放在第一个case之前);
 说明:如果switch中的多个case的执行语句相同,则可以考虑合并;

 

 1 public static void testSwitchCase() {
 2     int num = 4;
 3     switch (num) {
 4     case 1:
 5         System.out.println("one");
 6         break;
 7     case 2:
 8         System.out.println("two");
 9         break;
10     case 3:
11         System.out.println("three");
12         break;
13         default:
14             System.out.println("其他");
15     }
16     
17     //case 0 到case5 合并了;()
18以上是关于java 基础提炼的主要内容,如果未能解决你的问题,请参考以下文章

Java语言基础之方法的设计

PHP项目开发经验整理

JSP基础

我的重构第一步

研发代码规范

分享一些 Java 无关基础方面的书籍