java之基础常识(一)

一,基本知识.

1、jre和jdk的用途

jre:JVM+类库
JDK:jre+java的开发工具

2、jdk的bin目录:

java编译器javac.exe,
java运行工具java.exe,
打包工具jar.exe,
文档生成工具javadoc.exe

3、控制台运行java文件:

    1、javac Hello.java(编译后生成.class)
    2、java Hello            (运行)

4、java标识符

    规则:英文大小写字母,数字字符,$和_
    注意事项:不能以数字开头,不能用java中的关键字,区分大小写

5,包名要求全部小写,一般是公司的域名倒着写

类或接口按所有单词驼峰命名法

方法和变量第一个单词首字母小写,企业的按驼峰命名法

常量的所有字母大写,两个单词之间用下划线分开

二,数据类型

1,常量

    字符串常量:双引号括起来的内容
    整数常量:所有整数
    小数常量:所有小数
    字符常量:用单引号括起来(必须是单个数字或单个字符)
    System.out.println('10');会报错.
    布尔常量:true和false
    空常量     null

2, 存储单位运算

1byte=8bit
1k=1024b
1m=1024k
1g=1024m

平时买的500g硬盘往往显示是大约465g的原因是:
厂商是按1000进制算的,而电脑是按1024算的
就如:500g=500*1000*1000*1000/1024/1024/1024约等465g

3,java的各种进制的写法

    二进制:0b100,0B100
    八进制:0100
    十进制:100
    十六进制:0x100

原码和补码的转换:
原码–>补码
0b1 0110100
0b1 1001011
+ 0b0 0000001
———————-
0b1 1001100

    (负数)补码-->原码
    (正数的3种码都一样)
    0b1 1101110

-0b0 0000001

    0b1 1101101

    0b1 0010010

4,数据类型

  • 整数型
    • byte 占一个字节 -128到127
    • short 占两个字 -2^15~2^15-1
    • int 占四个字节 -2^31~2^31-1
    • long 占八个字节 -2^63~2^63-1
  • 浮点型
    • float 占四个字节 -3.403E38~3.403E38 单精度
    • double 占八个字节-1.798E308~1.798E308 双精度
  • 字符型
    • char 占两个字节 0~65535
    • 布尔型boolean
      • boolean理论上是占八分之一个字节,因为一个开关就可以决定是true和false了,但是java中boolean类型没有明确指定他的大小

5,java基本数据运算注意事项:

    //byte与byte(或short,char)进行运算时会提升为int,两个int类型
        //相加有可能会超出byte取值范围
        /*
        b1和b2是两个变量,变量存储的值是变化的,在编译时无法判断里面具体的值,
        相加可能会超出byte的取值范围.
        */
        byte b1=3;
        byte b2=4;
        byte b3=b1+b2;      //这样会报错的
    byte b4=3+4;//为什么不报错呢,因为java有常量优化机制.在编译时就将字面小于-128~127之间相加起来赋值.

long与float的取值范围谁大谁小
* 进行混合运算的时候,byte,short,char不会相互转换,都会自动类型提升为int类型,其他类型进行混合运算的是小的数据类型提升为大的
* byte,short,char – int – long – float – double

* long: 8个字节
* float:4个字节
* IEEE754
* 4个字节是32个二进制位
* 1位是符号位
* 8位是指数位
* 00000000   11111111
* 0到255
* 1到254
* -126到127
* 23位是尾数位
* 每个指数位减去127

* A:它们底层的存储结构不同。
* **B:float表示的数据范围比long的范围要大**
    * long:2^63-1
    * float:3.4*10^38 > 2*10^38 > 2*8^38 = 2*2^3^38 = 2*2^114 > 2^63-1
    char i='爱';//java的字符char是可以存储一个中文的
    //因为java语言采用的Unicode编码,Unicode编码的每个字符占用两个字节,而中文也是占两个字节

        System.out.println(10/3.0);除法时注意,整数与整数相除等到的是整数
  • B:案例演示
    • 请分别计算出x,y的值?

            int x = 4;
            int y = (x++)+(++x)+(x*10);
  • C:面试题
* byte b = 10;
    * b++;
    * b = b + 1;
问哪句会报错,为什么 
答案是b = b + 1;,由于b是先提升为int类型,然后才相加,就会得到一个int类型,而b++是因为需要有结果的,底层已经做了强制转换

面试题:以下哪条语句报错

    1,short s=1;s=s+1;
        2,short s=1;s+=1;
    第一句报错.原因和上面的一样.

三,运算符

&与&&的区别:(按位运算和逻辑运算的区别)
* 最终结果一样。
* &&具有短路效果。左边是false,右边不执行。
* &是无论左边是false还是true,右边都会执行


        int x=3;
        int y=4;
        System.out.println((++x == 3) & (y++ ==4));
        System.out.println("x = "+ x +";"+"y ="+ y);
  • 位运算符 ^
    异或运算:一个数据异或两次一样的数还是其本身.

  • 面试题:
    两个变量的交换(不使用第三方变量)

    • 第一种:(有缺点,可能相加超出该类型的范围)
      x=x+y;
      y=x-y;
      x=x-y;

    • 第二种方法:
      x = x ^ y;
      y = x ^ y;
      x = x ^ y;

  • 面试题2:

    • 向左移动(每移动一位乘于2)<<
    • 向右移动(除以2)>>
    • 无符号移动>>>
  • 三目运算符
    z=( x > y ) ? x : y;

  • 键盘录入:
    import java.util.Scanner;
    Scanner sc=new Scanner(System.in);
    System.out.println(“请输入”);
    int len=sc.nextInt();
    System.out.println(len);

  • if语句和三元运算符的区别
    当if 语句控制的操作是一个输出语句时就不能用.
    原因:因为三元运算符是一个运算符,运算符操作完毕应该有一个结果,而不是一个输出.

  • 选择结构if语句和switch语句的区别
    break可以省略吗?
    * 最后一个可以省略,其他最好不要省略
    * 会出现一个现象:case穿透。
    * 最终我们建议不要省略

  • 面试题:

    • byte可以作为switch的表达式(自动类型可以提升为int都可以的)
    • long不可以作为switch的表达式(自动类型提升是long,所以不能.
    • 而String 类型的在1.7版本后就可以了.

总结switch语句和if语句的各自使用场景
* switch建议判断固定值的时候用
* if建议判断区间或范围的时候用

  • 练习:获取水仙花数
    如153=1*1*1+5*5*5+3*3*3 的数
        for(int i=99;i<1000;i++){
            int ge = i % 10;
            int shi = i / 10 % 10;
            int bai = i / 10 / 10 % 100;

            if(ge*ge*ge+shi*shi*shi+bai*bai*bai==i){
                System.out.println(i);
            }
        }

四,循环的面试题:

    请在控制台输出一个倒三角形;
        例如:如下

        for (int i = 0; i<8; i++ )  
        {  
            for (int j = 0; j<i; j++)  
            {  
                System.out.print(" ");  
            }  
            for (int k = 0; k<2*(8-i)-1; k++)  
            {  
                System.out.print("*");  
            }  
            System.out.println();  

        }       

2,练习题:输出乘法表

        for(int i=1;i<=9;i++){
            for(int j=1;j<=i;j++){
                System.out.print(i + "*" + j+" = "+(i+j));
                System.out.print(" ");
            }
            System.out.println();
        }

五,三大跳转关键字的区别

  • break语句:
    只能用于跳出循环和switch语句

  • continue关键字:
    只能用于循环语句中.

  • return的作用
    返回
    其实它的作用不是结束循环的,而是结束方法的.也就是
    方法中return以后所有的语句是不会执行的.

  • 标号:标记某个循环对其控制

  • 标号组成规则:其实就是合法的标识符
    如果面试题代码中出现:
    http://ww.baidu.com;
    只能说http是一个标号.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值