2、java语言基础

1、关键字

被Java语言赋予特定含义的单词被称为关键字
关键字都是小写的
在Java开发工具中,针对关键字有特殊颜色的标记

2、标识符

Java标识符命名规则
  ·标识符是由,数字,字母,下划线和美元符号构成,其他符号不可以
  ·必须以字母、下划线和美元符号开头,不能以数字开头
关键字不能作为标识符
标识符区分大小写,理论上没有长度限制

3、字面值

什么是字面值?
  ·字面值就是可以直接看到是多少的数据
字面值的分类
  ·字符串,用双引号括起来的内容,例如:"monkey"
  ·整数,所有整数,例如:1024
  ·小数,所有小数,例如:3.14
  ·字符,用单引号括起来的内容,里面只能放单个数字,单个字母或单个符号,例如:‘a'
  ·布尔,只有true和false

public class Literal_value{
    public static void main(String[] args){
        System.out.println("HeiHei!");
        System.out.println(2048);
        System.out.println(0.11);
        System.out.println('A');
        System.out.println(false);
    }
}

4、变量

什么是变量?

  ·在程序执行的过程中,在某个范围内其值可以发生改变的量
Java中如何定义变量(以下两种均可)
  1.数据类型变量名=变量值;
  2.数据类型变量名;
变量名=变量值;
为什么定义变量?
  变量其实就是内存中的一块空间,这块空间有“类型”,“名字”,“值”。可以用来不断的存放同一类型的常量,并可以重复使用。

public class variable{
    public static void main(String[] args){
        int a=10;
        System.out.println(a);
        a=20;
        System.out.println(a);

        //int a =20; error 同一个域中 不能对变量再次重新声明 

        int b,c,d=15; //error 只给d赋值了 b和c没有赋值
        System.out.println(d);
       
    }
}

5、java数据类型

整数型
  ·byte占一个字节-128到127(字节型)
  ·short 占两个字节-215~215-1-32768~32767(短整型)
  ·int占四个字节-231~231-1-2147483648~2147483648(整型)
  ·long 占八个字节-2063-263-1(长整型)

public class data_type{
    public static void main(String[] args){
    int a = 10;
    long b = 1000;
    //程序将2147483648看做是int类型,因为2147483648已经超出了int类型的取值范围,所以会报错
    //正确的方法是在long类型赋值的时候,需要在后面加上‘L’
    //程序会默认的把整型的字面值当做int类型
    long ab = 2147483648L;

    int c = 999;
    //从容量大的向容量小的类型转换时,需要强制类型转换
    //这么做可能会损失精度,所以不建议使用
    int d = (int)c;

    
    //需要注意,给byte类型赋值时,需要注意取值范围
    //byte d=128;error
    byte e=127;
    }
}

浮点型
  ·float 占四个字节-3.403E38~3.403E38单精度
  ·double占八个字节-1.798E308~1.798E308双精度

public class floats{
    public static void main(String[] args){
        double d = 3.14;
        float f = 1.2F; //因为默认为double类型,因超过double限制,所以需要加F
        float f1 = (float)d; //强制转换为float型
        float f2 = (float)5.1; //强制转换为float型
    }
}

字符型
  ·char占两个字节0~65535

public class chars{
public static void main(String[] args){
char c1 = 'a';
char c2 = '小';
//char c3 = 'ab'; error 'ab'这个叫做字符串

char c4 = 97;
char c5 = 65;
char c6 = 48;

System.out.println(c4); // ASCII码中97代表a
System.out.println(c5); // ASCII码中97代表A
System.out.println(c6); // ASCII码中97代表0


char a1 = '\''; // 转义字符 \
char a2 = '\t'; // 制表符
char a3 = '\n'; // 换行付

char a4 = 'a';
char a5 = 'b';
char a6 = 'c';

System.out.println(a1);
System.out.println(a2);
System.out.println(a4);
System.out.println(a3);
System.out.println(a5);
System.out.println(a6);

}
}

布尔型
  ·boolean

public class bool{
    public static void main(String[] args){
        boolean flag = true;
        if (flag){
            System.out.println("True");
        }else{
            System.out.println("Flase");    
        }
    }
}

6、基础数据类型的一些问题和总结

关于基本数据类型转换规则:
1、8种基本数据类型除boolean类型之外都可以相互转换。
2、小容量向大容量转换叫做自动类型转换:

byte<short(char)<int<long<float<double

3、byte,short,char做混合运算的时候,各自都先转换成int在做运算
4、大容量向小容量转换是强制类型转换,需要加强制转换符。编译虽然通过,运行期可能损失精度。谨慎使用。
5、如果整数没有超出byte,ahort,char的取值范围,可以直接将这个整数赋值给byte,short,char
6、多种数据类型做混合运算,先转换成容量最大的那种再做运算

public class data_byte{
    public static void main(String[] args){
        byte a1 = 4;
        byte a2 = 6;
        //byte a3 = a1 + a2; error 不兼容类型 ,程序在运行时,会将b1和b2转换成int类型,然后再做加法运算
        byte a3 = (byte)(a1 + a2);  
        System.out.println(a3); // 10

        byte a4 = 10;
        short a5 = 20;
        int a6 = a4 + a5; 
        System.out.println(a6); //30

        char a7= 'a'; // ASCII中a为97
        int a8 = 100;
        int a9 = a7 + a8; //197
        System.out.println(a9);
    }
}

7、算术运算符

自增或自减运算符放在变量的前后有什么区别?
单独使用:没有区别

public class math{
    public static void main(String[] args){
        int a = 10;
        ++a; // a = a + 1
        System.out.println(a); // 11

        int b = 6;
        b++; // b = b + 1
        System.out.print(b); // 7
        System.out.print('\n');
        
        int c = 8;
        --c;
        System.out.println(c); // 7

        int d = 11;
        d--;
        System.out.println(d); // 10
        
    }
}

参与运算时
  如果放在变量的前面,则先进行自增或自减,然后再参与运算
  如果放在变量的后面,则先参与运算,然后再进行自增或自减

public class math{
    public static void main(String[] args){

    int a = 6;
    int a1 = ++a; a = a +1 = 7,a1 = a = 7 
    System.out.println("a1 = " + a1); //7
    System.out.println("a = " + a); //7

    int b = 9;
    int b1 = b++; b1 = b =9, b = b +1 =10
    System.out.println("b1 = " + b1); // 9
    System.out.println("b = " + b); //10

    int c = 10;
    int c1 = ++c; // c = 11,c1=c=11
    int c2 = c++; // c2 = c = 11,c = c +1 == 12
    System.out.println("c1 = " + c1); // 11
    System.out.println("c2 = " + c2); // 11
    System.out.println("c = " + c); // 12

    int d = 10;
    int d1 = d++; // d1 = d =10, d = d + 1 =11
    int d2 = ++d; // d = d + 1 = 12, d2 = d =12 
    System.out.println("d1 = " + d1); // 10
    System.out.println("d2 = " + d2); // 12
    System.out.println("d = " + d); // 12
    }
}

小练习

练习1:请问下面程序打印结果是什么?

 

public class math{
    public static void main(String[] args){

    int a = 10;
    int b = 10;
    int c = 10;
    
    a = b++;
    c = --a;
    b = ++a;
    a = c--;

    System.out.println("a = " + a); //9
    System.out.println("b = " + b); //10
    System.out.println("c = " + c); //8

    }
}

练习2:请问下面程序打印结果是什么?

public class math{
    public static void main(String[] args){

    int x = 4;
    int y = (x++)+(++x)+(x*10);

    System.out.println("x = " + x); // 6
    System.out.println("y = " + y); // 70
    
    }
}

 练习3:下面程序有没有问题?

 

public class math{
    public static void main(String[] args){

    byte b = 10;
    // b = b +1 ; error 原因:由int转为byte属于从大向小转换,应添加强制转换符
    b = (byte)(b + 1); 

    System.out.println("b = " + b);  // 11

    }
}

练习1:请问下面程序打印结果是什么?

 

public class math{
    public static void main(String[] args){

    int i = 10;
    i = i++;

    System.out.println("i = " + i); // 10

    }
}

8、赋值运算符

+=把左边和右边做加法,然后赋值给左边
-=把左边和右边做减法,然后赋值给左边
*=把左边和右边做乘法,然后赋值给左边
/=把左边和右边做除法,然后赋值给左边
%=把左边和右边做取余,然后赋值给左边

public class math{
    public static void main(String[] args){
        int a =10;
        a += 10;
        System.out.println(a); // 20

        a -= 5;
        System.out.println(a); // 15

        a *= 3;
        System.out.println(a); // 45

        a /= 15;
        System.out.println(a); // 3

        a %= 2;
        System.out.println(a); // 1

        byte b =10;
        //b = b + 10; error 报错
        b += 10; //说明扩展运算符在进行运算时,不会改变其类型,但会损失精度

    }
}

9、关系运算符
==判断是否相等(基本数据类型)
!= 不等于
 < 大于
>=大于等于
 < 小于
<=小于等于

public class math{
    public static void main(String[] args){

        int a = 10;
        int b = 15;
        
        System.out.println(a>b);  // false
        System.out.println(a==b); // false
        System.out.println(a<b);  // true
        System.out.println(a>=b); // flase
        System.out.println(a<=b); // true
        System.out.println(a!=b); // true

    }
}

10、布尔运算符

&   逻辑与两边都是true,结果是true
|    逻辑或一边是true,结果就是true
!    逻辑非取反!true->false
^   逻辑异或两边只要是不一致就是true
&&短路与用法和:一样。
||   短路或用法和|一样

public class math{
    public static void main(String[] args){
        System.out.println(5>3 & 3<5); //true
        System.out.println(7<9 | 7>9); //true
        System.out.println(!true);     //false
        System.out.println(4>2 ^ 2>4); //true

        int a = 10;
        int b = 10;
        System.out.println(a>b && a++>b);//如果前面是false的话,后面表达式不会执行,如果前面是true的话,后面表达式会执行
        System.out.println(a); //10

        int c =10;
        int d =10;
        System.out.println(c==d || c++>=d);//如果前面是true的话,后面表达式不会执行,如果前面是false的话,后面表达式会执行
        System.out.println(c); //10
    }
}

11、字符串链接运算符

1.如果两边都是数值型,则进行加法运算
2.如果两边任意一边是字符串型,则进行字符串连接运算

public class math{
    public static void main(String[] args){
        System.out.println("数值为:" + 3.14); // 数值为:3,。14
        int a = 10;
        int b = 20;
        System.out.println("a + b = " + (a+b)); // a + b =30

        System.out.println(a + "+" + b  + "=" + (a+b)); // 10 + 20 = 30
    }
}

12、三元运算符

boolean装达式?表达式1:表达式2;
如果boolean表达式的值是true,则返回表达式1,如果是falae,则返回表达式2

public class math{
    public static void main(String[] args){
        int a = 10;
        int b = 11;
        int c = (a>b) ? a : b;
        System.out.println(c);
    }
}

小练习:

用java代码查找出下面三个数中的最大值,并打印出来!

public class lianxi{
    public static void main(String[] args){
        int a = 10;
        int b = 20;
        int c = 30;

        int d = (a>b) ? a : b;
        int max = (d>c) ? d : c;
        System.out.println(max);

    }
}

13、位运算符

&    位与
|     位或
^    位异或
~    取反
>>  向右移
>>>无符号右移
<<  向左移

public class math{
    public static void main(String[] args){
        System.out.println(6 & 3); //2 先把数字转化为二进制在进行比较
        System.out.println(6 | 3); //7
        System.out.println(6 ^ 3); //5
        System.out.println(~6);  //7


        System.out.println(12>>1); //6  向右移n位,就除以2的n次方
        System.out.println(12>>2); //3
        System.out.println(12>>3); //1

        System.out.println(12<<1); //24 向左移n位,就乘以2的n次方
        System.out.println(12<<2); //48
        System.out.println(12<<3); //96

        // ^的特点:一个数据对另一个数据位异或2次,则这个数据本身不变
        System.out.println(2^3^2); //2
        
    }
}

小练习:

1、请实现两个整数变量的交换(不使用第三方变量)

方法一:

public class lianxi{
    public static void main(String[] args){
        int a =20;
        int b =30;
        a = a+b; // a = 50 ,b = 30
        b = a-b; // b = 50 - 30 ,a = 50;
        a = a-b; // a = 50,b = 20 ,a = 30;
        System.out.println("a=" + a); //a = 30
        System.out.println("b=" + b); //b = 20
    }
}

方法二:

public class lianxi{
    public static void main(String[] args){
        int a =20;
        int b =30;
        
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;

        System.out.println("a = " + a); // a = 30
        System.out.println("b = " + b); // b = 20

    }
}

2、最有效率的算出2*8的结果

public class lianxi{
    public static void main(String[] args){
        
        System.out.println(2<<3); // 16
        
    }
}

14、if、else if、else 判断语句

public class if_else{
    public static void main(String[] args){
    int a = 40;
    if(a>=90){
        System.out.println("你很优秀哦!");
    }else if(a>=80 & a<=89){
        System.out.println("你也很优秀");
    }else if(a>=70 & a<=89){
        System.out.println("你很一般");
    }else if(a>=60 & a<=69){
        System.out.println("还行,你及格了");
    }else{
        System.out.println("加油!你的潜力很大!");
    }
    }
}

15、Switch语句

1、程序遇到break之后就停止了,break可以不写,如果不写的话,会发生case穿透
2、defau1t也可以没有
3、switch后面可以放byte,short,char,int类型的,只要可以自动转换为int类的都可以。jdk7之后可以放String类型

public class switchs{
    public static void main(String[] args){
        int a = 1;
        switch(a){
        
            case 1:
                System.out.println("one");
                break;
            case 2:
                System.out.println("二");
                break;
            case 3:
                System.out.println("三");
                break;
            default:
                System.out.println("四五六七八");
                break;
        
        }
    }
}

16、for循环语句

1、执行初始化的表达式,并且在整个循环里面只执行
2、将初始化的表达式的值在条件表达式里面进行判断
  如果结果是true,则程序继续执行
  如果结果是falae,则循环执行结束:
3、java语句
4、执行循环之后的表达式
5、程序再回到第二步继续执行

public class For{
    public static void main(String[] args){
    
        for(int i = 0; i < 10;i++){
            System.out.println("HelloWorld!");
        }
    }
}

小练习:

1、在屏幕中打印九九乘法表

public class For{
    public static void main(String[] args){
        for (int i=1;i<10;i++ ){
            for(int j=1;j<=i;j++){
                System.out.print(i + "*" + j + "=" + (i*j) + ",");
            } 
            System.out.print('\n');
        }
    }
}

2、计算1-100所有的奇数求和

public class For{
    public static void main(String[] args){
        int j = 0;
        for(int i = 1; i < 100;i += 2){
            
            j= j + i;
            
        }
        System.out.println(j);
    }
}

17、while循环

 当写while语句时,千万别写出死循环!

public class While{
    public static void main(String[] args){
        int i =10;
        while(i>0){
            System.out.println("HelloWorld!");
            i--;
        }
    }
}

18、do while语句

public class do_while{
    public static void main(String[] args){
        int i =10;
        do{
            System.out.println(i);
            i--;
        }while(i>0);
    }
}

19、函数方法

1、方法的结构:

public class sumInt{
    public static void main(String[] args){
        sumInt(3,4);
        int Sum = sumsInt(4,5);
        System.out.println(Sum);

    }

    // 无返回值类型,用void
    public static void sumInt(int a,int b){
    
        int sum = a + b;
        System.out.println(sum);
    }

    // 有返回值类型
    public static int sumsInt(int a,int b){
    
        int sum = a + b;
        return sum;
    }
}

2、方法的调用

class diaoyong{
    public static void main(String[] args){
    A2(10,10);
    diaoyong.A2(20,20);
    B.B1(30,30);
    }

    public static void A2(int a,int b){
        int sum = a + b;
        System.out.println(sum);

    }
    
}

class B{

    public static void B1(int a,int b){
        int sum = a + b;
        System.out.println(sum);
    }
}

注意:不要出现方法的互相调用,这样会导致一个错误StackOverFlowError

class diaoyong{
    public static void main(String[] args){
    B.B1();
    }    
}

class B{

    public static void B1(){
        B2();
    }

    public static void B2(){
        B1();
    }
}

3、ruturn的使用

return后面不能有语句,否则会出现缺少返回语句的错误!

class Return{
    public static void main(String[] args){
        int sum = sumInt(3,4);        
        System.out.println(sum);
    }

    public static int sumInt(int a,int b){
        int sum = a + b;
        return sum;
        System.out.println("出错误了吧!");
    }
}

20、方法重载

方法重载的条件:

  1、需要在同一个类里面;

  2、方法名相同;

  3、参数列表不同(参数类型、个数、顺序)

class chongzai{
    public static void main(String[] args){
    
    }

    //参数个数不同,m1方法构成重载
    public static void m1(){}
    public static void m1(int i){}

    //参数类型不同,m2构成重载
    public static void m2(int i){}
    public static void m2(long i){}

    //参数的顺序不同,m3方法可以构成重载,但是在开发中,不这样使用
    public static void m3(int i,long j){}
    public static void m3(long j,int i){}


    //下面的几种方法均不可以,程序会报错

    /*

    // 方法重名
    public static void m4(){}
    public static void m4(){}

    //重载跟返回值类型没有关系
    public static void m5(){}
    public static int m5(){
        return 1;
    }

    //重载跟修饰符列表没有关系
    public static void m6(){}
    public void m6(){}

    */
    
}

21、递归

1、使用递归方式计算1至n的和

递归就是方法自己调用自己,要有一个结束条件,否则或出现StackOverflowError

class chongzai{
    public static void main(String[] args){
        System.out.println(sum(100));
    }

    public static int sum(int n){
        if(n==1){
            return 1;
        }else{
            return n + sum(n-1);
        }
    }
}

 

posted @ 2018-11-19 21:19  追风的小蚂蚁  阅读(272)  评论(0编辑  收藏  举报