Javase基础语法篇

运算符 &和&&、 |和||的区别吗?

& 按位与操作
	只有对应的两个二进制数为1时,结果位才为1
	1&1=1
	1&0=0
	0&1=0
	0&0=0
| 按位或操作
	有一个为1的时候,结果位就为1
	1|1=1
	1|0=1
	0|1=1
	0|0=0
& 和 && 都可以实现 和 这个功能
区别:& 两边都运算,⽽而 && 先算 && 左侧,若左侧为false 那么右侧就不不运算,判断语句句中推荐使⽤用 &&,效率更更⾼高


| 和 || 和上⾯面类似
区别:||只要满⾜足第一个条件,后⾯面的条件就不不再判断,⽽而|要对所有的条件进⾏行行判断


把&&和||称之为短路路运算符

用最有效率的方法计算2乘以8

原理:将一个数左移n位,相当于乘以2的n次方,位运算是CPU直接支持的,所以效率高
答案:2<<3

常见的JDK源码里面HashMap的默认容量16
int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

直接是二进制操作了了,表示1左移4位,变成10000,转为10进制也就是16, 直接以二进制形式去运⾏行行,
效率更更⾼高

写个方法,传递两个非0的int数值进去,实现变量量交换的方式,有几种方式?

  • 方式一

        public static void swag(int a, int b) {
            System.out.println("a="+a+",b="+b);
            a = a + b;
            b = a - b;
            a = a - b;
            System.out.println("a="+a+",b="+b);
        }
    
  • 方式二 异或运算(一个数与另一个数异或两次是其自身,一个数和自身异或结果是0)

    public static void swap2(int a, int b) {
        System.out.println("a=" + a + ",b=" + b);
        a = a ^ b;   //a1 = a^b
        b = b ^ a;  // b = b^a^b   此处a与b异或两次,最终结果是a
        a = a ^ b;  // a = a1^b = a^b^a  此处b与a异或两次,最终结果是b
        System.out.println("a=" + a + ",b=" + b);
    }

javase基础语法篇之类型

简介:java数据类型花费

java的数据类型分类

  • 基础数据类型:
四类 八种 字节数 默认值 封装类
整型(精确) byte 1 (byte)0 Byte
整型(精确) short 2 (short)0 Short
整型(精确) int(默认) 4 0 Integer
整型(精确) long 8 0L Long
浮点型(不精确) float 4 0.0f Float
浮点型(不精确) double(默认) 8 0.0d Double
字符型 char 2 \u0000(null) Character
布尔型 boolean 1 false Boolean
  • 引用数据类型:其他都是应用类型
  • String和Enum分别是什么类型:引用类型

运算

定义变量 int i = 5;
return i++;  和return ++i;  返回结果是什么

答:分别是6  、  5

==和equals的区别

  • 基本数据类型比较 要用==判断是否相等
  • 引用数据类型: ==比较的是内存地址是否一样,不同对象的内存地址不一样,equals比较的是具体的内容,也可以让开发者去定义什么条件去判断两个对象是否一样

try-catch-finall执行顺序

下面代码 的try-catch-finally语句句,try里面有个return, finally里面也有个return,结果会返回什么?为什么

public static int test1() {
        int a = 1;
        try {
            System.out.println(a / 0);
            a = 2;
        } catch (ArithmeticException e) {
            a = 3;
            return a;
        } finally {
            a = 4;
        }
        return a;
    }


    public static int test2() {
        int a = 1;
        try {
            System.out.println(a / 0);
            a = 2;
        } catch (ArithmeticException e) {
            a = 3;
            return a;
        } finally {
            a = 4;
            return a;
        }
    }

解答:
		在执行try、catch中的return之前一定会执行finally中的代码(如果finally存在),如果finally中有return语句,就会直接执行finally中的return方法,所以finally中的return语句一定会被执行的
		执行流程:finally执行前的代码里面有包含return,则会先确定return返回值,然后再执行c'sfinally的代码,最后再执行return

try-with-resource

有了解新版的JDK处理IO流吗?编写下基础代码, 从⼀个txt⽂文本里面,拷贝里面的内容到另外一个txt文本里面

JDK7之后的写法,JDK9又进行了改良,但是变化不大,记住下面的写法即可
需要关闭的资源只要实现了java.lang.AutoCloseable,就可以⾃自动被关闭
try()里面可以定义多个资源,它们的关闭顺序是最后在try()定义的资源先关闭
try (
FileInputStream fis = new FileInputStream("/Users/xdclass/Desktop/test.txt");
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = new
FileOutputStream("/Users/xdclass/Desktop/copy.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos);
) {
int size;
byte[] buf = new byte[1024];
while ((size = bis.read(buf)) != -1) {
bos.write(buf, 0, size);
}
} catch (Exception e) {
e.printStackTrace();
}

文件API和递归考察

代码编写需求: 找出某目录下的所有子目录以及子文件并打印到控制台上

    public static void main(String[] args) {

        //找出某目录下的所有子目录以及子文件并打印到控制台上
        List<String> paths = new ArrayList<>();
        getAllFilePaths(new File("G:\\网盘下载"), paths);
        for (String path: paths){
            System.out.println(path);
        }
    }

    private static void getAllFilePaths(File filePath, List<String> paths) {
        //把该目标所有的目录/文件列出来
        File[] files = filePath.listFiles();
        if (files == null) {
            return;
        }
        for (File f : files) {
            //如果是一个目录
            if (f.isDirectory()) {
                paths.add(f.getPath());
                getAllFilePaths(f, paths);
            } else {
                paths.add(f.getPath());
            }
        }
    }
上一篇:Java基础知识(六) 异常处理


下一篇:异常处理机制