Java基础-复习

Java基础

1. 概述

  1. java语言是面向对象的(oop)
  2. java语言是健壮的,java是请类型机制、一场处理,垃圾的自动收集机制。
  3. java是跨平台的,即一个编译好的class文件可以在多个系统下运行,这种特性成为跨平台
  4. java语言是解释性语言。

1.1 什么是JDK 、 JRE

  • JDK 的全程 (java开发工具包)

3. 变量

char的基本使用

​ char可以直接存放一个数字

4. 原码、反码、补码(重点

  1. 二进制的最高位是符号位: 0表示正数,1表示负数
  2. 正数的原码、反码、补码都一样(三码合一)
  3. 负数的反码 = 它的原码符号位不变,其它位数取反
  4. 负数的补码 = 他的反码 + 1 , 负数的反码 = 负数的补码 - 1
  5. 0的反码,补码都是0
  6. java没有无符号数,换言之,java中的数都是有符号的
  7. 在计算机运算的时候,都是以补码的方式来运算的
  8. 当我们看运算结果的时候,要看他们的原码。

5. 位运算符

java中有7个位运算符 (&、|、^、~、>> 、<< 、>>>)

他们分别是:

  • & : 按位与 : 两位全为 1 ,结果为 1 ,否则为0
  • | : 按位或 :两位有一个为1,结果为1 ,否则为0
  • ^ :按位异或 :两位一个为0,一个为1,结果为1,否则为0
  • ~ :按位取反 :0 -> 1 , 1 -> 0

为了简化过程,其中使用char 1个字节 来计算,

实例一:2&3

1. 先得到 2 的 原码   : 0000 0010
2. 因为计算机中运算的时候,都是以补码的方式来运算的,
		所以需要得到 2 的补码 , 又因为正数三码合一,所以
		2 的补码也是 2 的原码

3. 得到 3 的 原码 : 0000 0011
4. 理由同 2 ,补码:  0000 0011

5. 计算,因为两者中间的符号是 按位与,即 (两位全为 1 ,结果为 1 ,否则为0)
		所以,补码计算的结果为  0000 0010

6. 将计算的补码转换成对应的原码 
		因为二进制数的最高位(符号位是 0 ) 所以,根据正数三码合一,可以得到原码也是 0000 0010
		再将原码转换成十进制 , 得到 2 
7. 得到结果: 2&3 = 2

**实例二:~-2 = ? **

1. 得到 -2 的二进制数(原码) : 1000 0010
2. 得到 -2 的补码(原因 同4.7),因为符号位是1 ,表示负数,
		所以要想获得负数的补码,要先获得负数的反码,根据 4.3 的规则,
		获得反码为:  1111 1101
		再根据 【4.4】中补码的计算方法,得到补码 : 1111 1110
		
3. 算式前面的符号是按位取反,根据对应的规则,得到计算之后的补码为: 0000 0001 
4. 要想求出真正的值,将补码转换成原码,因为符号位是0(正数),所以 原码 = 0000 0001
5. 得到结果:~-2 = 1

实例三:~2 = ?

1. 得到 2 的 原码 : 0000 0010
2. 得到 2 的 补码 : 0000 0010

3. 算式前面的符号 是 按位取反,根据对应的规则,得到补码 : 1111 1101
4. 因为上一步计算出来的 是负数,要想将负数的补码转换成原码,需要先将负数的补码 转换成 反码,
			根据 (负数的反码 = 负数的补码 - 1) 规则 , 反码 : 1111 1100

5. 根据 (负数的反码 = 它的原码符号位不变,其它位数取反) , 可以得到反码的原码 : 1000 0011 =>  -3
6. 结果为: ~2 = -3

实例四:2|3 = ?

1. 得到 2 的 原码 : 0000 0010
2. 得到 2 的 补码 : 0000 0010 

3. 得到 3 的 原码 : 0000 0011
4. 得到 3 的 补码 : 0000 0011

5. 计算 ,位运算符为 按位或 ,根据计算规则, 得到 0000 0011
6. 原码: 0000 0011 =>  3

7. 解雇:2|3 = 3

实例五:2^3 = ?

1. 得到 2 的 原码 : 0000 0010
2. 得到 2 的 补码 : 0000 0010 

3. 得到 3 的 原码 : 0000 0011
4. 得到 3 的 补码 : 0000 0011

5. 计算,位运算符为 按位异或(^), 根据计算规则,得到 0000 0001
6. 原码: 0000 0001 => 1 

7. 结果:2^3 = 1

位运算符 : >> (算数右移) ,<< (算数左移) , >>> (逻辑右移)

  • 算数右移 >> : 低位溢出,符号位不变,并用符号位补溢出的高位 。相当于 除以 2 的 n 次方 ( 1 >> 2 ==> 1 / 2 / 2 = 0)
  • 算数左移 << : 符号位不变,低位补0 。 相当于 乘以 2 的n 次方 ( 1 << 2 ==> 1 * 2 * 2 = 4)
  • 逻辑右移 >>> : 也叫做无符号右移, 运算规则是:低位溢出,高位补0

6. 打印金字塔

编程思想:化繁为简,先死后活

import java.util.Scanner;
public class TestFor{
   
	public static void main(String[] args){
   
		/**
		 * 打印出 金字塔
		 *      *        1 层: 1 = 2 * 1 - 1   空格:5 - 1 = 4
		 *     ***       2 层: 3 = 2 * 2 - 1        5 - 2 = 3
		 *    *****      3 层: 5 = 2 * 3 - 1        5 - 3 = 2
		 *   *******     4 层: 7 = 2 * 4 - 1        5 - 4 = 1
		 *  *********    5 层: 9 = 2 * 5 - 1        5 - 5 = 0
		 * 
		 * 编程思想:化繁为简,先死后活
		 * 
		 * 先打印出 
		 *   *******
		 *   *******
		 *   *******
		 *   *******
		 *   *******
		 * 再打印
		 *  * 
		 *  ** 
		 *  ***
		 *  ****
		 *  *****
		 *  ******
		 */	

		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入需要金字塔的层数");
		int total = myScanner.nextInt();

		System.out.println("请输入金字塔的材料(字符)");
		char c = myScanner.next().charAt(0);

		System.out.println("正在建造中,请稍后...");
		
		for (int i = 1; i <= total ; i++ ) {
   

			//打印空格
			for (int k = 1; k <= total - i ; k++) {
   
				System.out.print(" ");
			}

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

image-20210830191226072

6.1 打印空心金字塔

import java.util.Scanner;
public class TestFor{
   
	public static void main(String[] args){
   
		/**
		 * 打印出 金字塔
		 *      *        1 层: 1 = 2 * 1 - 1   空格:5 - 1 = 4
		 *     ***       2 层: 3 = 2 * 2 - 1        5 - 2 = 3
		 *    *****      3 层: 5 = 2 * 3 - 1        5 - 3 = 2
		 *   *******     4 层: 7 = 2 * 4 - 1        5 - 4 = 1
		 *  *********    5 层: 9 = 2 * 5 - 1        5 - 5 = 0
		 * 
		 * 编程思想:化繁为简,先死后活
		 * 
		 * 先打印出 
		 *   *******
		 *   *******
		 *   *******
		 *   *******
		 *   *******
		 * 再打印
		 *  * 
		 *  ** 
		 *  ***
		 *  ****
		 *  *****
		 *  ******
		 */	

		Scanner myScanner = new Scanner(System.in);
		System.out.println("请输入需要金字塔的层数");
		int total = myScanner.nextInt();

		System.out.println("请输入金字塔的材料(字符)");
		char c = myScanner.next().charAt(0);

		System.out.println("正在建造中,请稍后...");
		
		for (int i = 1; i <= total ; i++ ) {
   

			//打印空格
			for (int k = 1; k <= total - i ; k++) {
   
				System.out.print(" ");
			}

			for (int j = 1;j <= 2 * i - 1 ;j++ ) {
   
				if (j == 1 || j == 2 * i - 1 || i == total) {
   
					System.out.print(c);					
				}else{
   
					System.out.print(" ");
				}
				
			}
			System.out.println();
		}
	}
}

image-20210830191201158

6.2 打印菱形

public class TestFor2{
   
	/*
		打印菱形
		     *
		    ***
		   *****
		    ***
		     *
	*/
	public static void main(String[] args) {
   
		int total = 10;

		for (int i = 1; i <= total ; i++ ) {
   
			for (int k = 1; k <= total - i ; k++ ) {
   
				System.out.print(" ");
			}

			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以帮你复习Java基础面试题。以下是一些常见的Java基础面试题及其答案: 1. Java中的基本数据类型有哪些? 答:Java中的基本数据类型包括byte、short、int、long、float、double、boolean和char。 2. Java中的包装类是什么? 答:包装类是一种将基本数据类型封装成对象的方式。Java提供了对应于每个基本数据类型的包装类,如Integer、Double、Boolean等。 3. Java中的String类是可变的吗? 答:String类是不可变的,即一旦创建就不能被修改。如果需要对字符串进行修改操作,可以使用StringBuilder或StringBuffer类。 4. Java中的final关键字有什么作用? 答:final关键字可以用来修饰类、方法和变量。当修饰类时,表示该类不能被继承;当修饰方法时,表示该方法不能被重写;当修饰变量时,表示该变量的值不能被修改。 5. Java中的抽象类和接口有什么区别? 答:抽象类是一种不能被实例化的类,它可以包含抽象方法和非抽象方法。接口是一种完全抽象的类,它只能包含抽象方法和常量。一个类可以实现多个接口,但只能继承一个抽象类。 6. Java中的异常处理机制是什么? 答:Java中的异常处理机制通过try-catch-finally语句块来实现。当可能发生异常的代码放在try块中,如果发生异常,则会被catch块捕获并进行处理,最后无论是否发生异常,都会执行finally块中的代码。 7. Java中的多线程是如何实现的? 答:Java中实现多线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。通过重写Thread类的run()方法或实现Runnable接口的run()方法来定义线程的执行逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值