Java基础知识复习(一)

目录

Java简介

Java是由Sun公司在1995年推出的Java面向对象程序设计语言和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。
Java分为三个体系:

  1. JavaSE
  2. JavaEE
  3. JavaME

命名规则

java中的类名,变量名,方法名都被称为标识符。

  1. 标识符命名规则:
    ①由字母,数字,下划线,$组成,不能以数字开头。
    ②也可以使用中文来进行命名,但是原则上建议使用英文来 命名。
    ③大小写敏感,java中的关键字不能用作标识符。
    ④在满足以上命名规范的前提下,如果能做到见名知意就更好了。

  2. 类名:类名一般为名词,类名的首字母大写,如果由多个单词组成,则每个单词的首字母大写。如:Product,GuessNumber.

  3. 方法名:方法名一般为动词,类名的首字母小写,如果由多个单词组成,则第一个单词的首字母小学,其后每个单词的首字母均大写。如:addDemo.

  4. 变量名:参考标识符命名规则。

八种基本的数据类型

数值型:byte/int/short/long
浮点型:float/double
字符类型(也是一种数值类型):char
布尔类型:boolean
各类型在内存中存储的大写(所占字节数):

类型 所占字节数
byte 1
int 4
short 2
long 8
float 4
double 8
char 2
boolean 没有规定

字面量

在这里引入一个字面量的知识点:
比如:double a = 10;a是double类型的,但是10这个字面量的类型其实是int类型的,这里这么定义也是可以的,因为double类型所能表示的范围要比int类型大,所以int类型的数值转换为double类型一定不会损失精度,这里会发生自动转换类型操作。
字面量(以下数字均为举例子):
10----int
10L----long
10.0----double
10.0F----float
‘A’----char
true/false----boolean
类型提升
long+double —> double
byte/short/char = int 类型的字面量时,有特殊处理,只要在可接收的范围内就可以。
byte/short/int/long类型溢出后,会有一个回转操作。
如下:

 byte a =(byte) 129;
 System.out.println(a);(输出结果为-127)

类型转换

发生在变量赋值的时候

a=?;

a的类型和?的类型不同时发生

a表示的范围比较大自然转换

a表示的范围比较小,转化的过程中可能发生精度丢失,需要强制类型转换

变量的形态

  1. 局部变量
  2. 类变量(静态变量/静态属性)
  3. 成员变量(非静态变量/属性)

逻辑运算符

&&(与),||(或),!(非)
注意:逻辑运算符的操作数和返回值都是boolean。
与或非的规则相信大家都很清楚了,这里不作过多的阐述。
&&和||遵循短路求值的规则:
短路求值的规则在&&中是:如果第一个条件表达式的返回值就是false,那么就不用看第二个条件表达式了,该表达式的返回值就是false。
在||中是:如果第一个条件表达式的返回值就是true,那么就不用看第二个条件表达式了,该表达式的返回值就是true。
&,|:如果操作数为为整数(int ,short,long,byte)的时候表示按位运算,当操作数为boolean的时候表示逻辑运算,但是不支持短路规则。

(p&&q)||r=(p||r)&&(q||r)

(p||q)&&r=(p&&r)||(q&&r)

!(p||q)=!p&&!q

位运算

  • 方法

    对整数进行操作

  • 用途

    优化程序

    &运算通常用于二进制的取位操作,例如一个数 & 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。

    相同位的两个数字都为1,则为1;若有一个不为1,则为0。

    | 运算通常用于二进制特定位上的无条件赋值,例如一个数| 1的结果就是把二进制最末位强行变成1。如果需要把二进制最末位变成0,对这个数 |1之后再减一就可以了,其实际意义就是把这个数强行变成最接近的偶数。

    相同位只要一个为1即为1。

    异或的符号是^。按位异或运算, 对等长二进制模式按位或二进制数的每一位执行逻辑按位异或操作. 操作的结果是如果某位不同则该位为1, 否则该位为0.

    异或运算的逆运算是它本身,也就是说两次异或同一个数最后结果不变,即(a ^b) ^ b = a。 ^ 运算可以用于简单的加密,比如我想对我MM说1314520,但怕别人知道,于是双方约定拿我的生日19880516作为密钥。1314520 ^ 19880516 = 20665500,我就把20665500告诉MM。MM再次计算20665500 ^ 19880516的值,得到1314520。

    相同位不同则为1,相同则为0。

    ~ 运算的定义是把内存中的0和1全部取反。使用~ 运算时要格外小心,你需要注意整数类型有没有符号。如果~的对象是无符号整数(不能表示负数),那么得到的值就是它与该类型上界的差.

移位运算

<< ,>> , >>>(无符号右移)
带符号左移<<:最左侧位不要了,最右侧补0;
带符号右移>>:最右侧位不要了,最左侧补符号位(整数补0,负数补1)
无符号右移>>>:最右侧位不要了,最左侧补0.

注意:
java中的%操作也能针对double进行计算

习题知识点

  1. final的作用
    修饰变量,变量的引用地址不可变,但是地址中的内容可以变。
    修饰方法,方法不可被重写,但是可以重载。
    修饰类,类不可继承。
  2. 常见的异常分为两种:一种是编译时异常,一般是由于语法错误导致的;还有一种是运行时异常。
    编译时异常必须显示处理,运行时异常交给虚拟机。
    运行时异常可以不处理。当出现这样的异常时,总是由虚拟机接管。比如我们从来没有人去处理过Null Pointer Exception异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往不对它处理罢了。也就是说,如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
  3. Math.round(11.5) 等于多少 (). Math.round(-11.5) 等于多少 ( ).
    正确答案: C 你的答案: D (错误)
    A11 ,-11
    B11 ,-12
    C12 ,-11
    D12 ,-12
    Math类中提供了三个与取整有关的方法:ceil,floor,round,这些方法的作用于它们的英文名称的含义相对应,例如:ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.6)的结果为-11;floor的英文是地板,该方法就表示向下取整,Math.floor(11.6)的结果是11,Math.floor(-11.4)的结果-12;round方法表示“四舍五入”,r就是取最接近整数,如果遇到一样近,则取较大值。
  4. 面向对象的基本规则:
    五个基本原则:
    单一职责原则(Single-Resposibility Principle):一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。
    开放封闭原则(Open-Closed principle):软件实体应该是可扩展的,而不可修改的。也就是,对扩展开放,对修改封闭的。
    Liskov替换原则(里氏原则)(Liskov-Substituion Principle):子类必须能够替换其基类。这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。
    依赖倒置原则(Dependecy-Inversion Principle):依赖于抽象。具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象;抽象不依赖于具体,具体依赖于抽象。
    接口隔离原则(Interface-Segregation Principle):使用多个小的专门的接口,而不要使用一个大的总接口

猜你喜欢

转载自blog.csdn.net/qq_43941925/article/details/111951550