Java基础知识(一)

2018-10-02  本文已影响0人  冰与河豚鱼

零散知识点:

1.写好的java文件名后缀为.java
2.编译Java文件生成响应的字节码文件后缀为.class
3.虚拟机运行Java .class文件
4.Java文件中类型为public的类有两种,一种是外部类,一种是内部类
5.当外部类的类型为public时,文件名需要与其相同
6.当内部类的类型为public时,外部类不是public类型的,文件名可随意

7.return i++ 先return i,再i++

8.声明非静态内部类对象的方法:

Outer.Inner inner=new Outer().new Inner()

9.声明静态内部类对象的方法:

Outer.Inner inner=new Outer.Inner() 

10.方法执行完毕,局部变量消除

Java的数据类型:

基本数据类型(或叫原生类,内置类型)8种:
整数:byte,short,int,long
浮点类型:float,double
字符类型:char
布尔类型:boolean
引用数据类型3种:
数组、类、接口
其中数组可以看成一种对象
String类是final类,不可以被继承

Java中的值传递(call by value)和引用传递(call by reference):

值传递不可以改变原变量的内容和地址;
引用传递不可以改变原变量的地址,但可以改变原变量的内容;
但是,
Java语言中只有按值传递。但是Java方法参数中有两种类型:基本数据类型和对象引用。
当一个对象实例作为一个参数被传递到方法中,参数的值就是对该对象的引用。对象的属性可以在被调用过程中该百年,但对对象引用的该百年是不会影响调用者的
一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)
一个方法可以改变一个对象参数的状态
一个方法不能让对象参数引用一个新的对象

关键字总结:

True,false是boolean常量,null是null常量,不是关键字
Const和goto是保留关键字
Java中关键字全部都是小写的

Final关键字:
用于修饰属性,方法和类。分别表示属性不可变,方法不可覆盖,类不可被继承。

  1. 修饰基本类型的变量,一旦对该变量赋值之后,就不能重新赋值了。但是对于引用类型变量,他保存的只是引用,final只能保证引用类型变量所引用的地址不改变,但不保证这个对象不改变,这个对象完全可以发生改变
  2. 修饰方法,方法不可被重写,但是还是可以重载
  3. 修饰类,类不可继承,所以方法都不能被重写。
  4. 修饰参数,用来表示这个参数在这个方法内部不允许被修改

Super关键字:
目的:告诉子类,当前的属性或方法来源于父类
作用:表示当前类父类对象的引用
用法:1.可以调用父类的属性或方法
2.super.属性名称/super.方法名称(参数列表)
3.super可以出现在子类构造方法的第一句代码,表示子类中的构造方法

Static关键字:

This关键字:
用来执行当前实例对象
作用:用来区分对象的成员变量与方法的形参。比如构造方法中的默认使用。

synchronized 关键字:
当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。
Synchronized关键字可以将对象或者方法标记为同步,以实现对对象和方法的互斥访问,可以用synchronized(对象){…}定义同步代码块,或者在声明方法时将synchronized作为方法的修饰符

类的加载顺序:

  1. 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
  2. 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
  3. 父类非静态代码块(包括非静态初始化块,非静态属性)
  4. 父类构造函数
  5. 姿态非静态代码块(包括非静态初始化块,非静态属性)
  6. 子类构造函数

方法重写实现多态问题:

即子类覆盖父类方法问题。例如:Base b = new Special();
声明是Base,实现是Special类,可以理解为b在编译时表现为Base类特性,运行时表现为Special类特性。当子类覆盖了父类的方法后,即父类的方法被重写

Object类方法:

hashCode、equals、toString、getClass、clone、finalize、wait、notify、notifyAll
wait():
notify():唤醒一个正在等待该对象的线程
notifyAll():唤醒所有正在等待该对象的线程
getClass()返回当前运行的类
getName()返回的是:包名+类名

Collection总结:

解释型语言和编译型语言的区别:

C/C++:编译型语言,源码一次编译之后,直接生成了机器码
Java:解释型语言,源码第一个编译后,会生成中间码(字节码bytecode),然后解释器执行字节码,生成机器码

重载与重写

重载:
定义:在同一个类或与它的子类中,方法名相同而参数列表不同。(参数列表不同指的是参数的数量,类型,类型的顺序这三种至少一种不同)
注意:方法重载与返回值类型和访问修饰符无关
重写:
原因:父类的功能无法满足子类的需求
前提:必须存在继承关系
定义:在继承关系中,子类定义与父类相同的方法
原则:
“三同”:即方法名相同,形参列表相同;
“一小”:子类方法返回值类型应比父类方法返回值类型更小或相等,子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;
“一大”:子类方法的访问修饰符应比父类方法更大或相等。
注意:
1.构造方法不能被重写(构造方法必须与当前类名相同)
2.private修饰的方法不能被重写
3.static修饰的方法不能被重写
4.final修饰的方法不能被重写
重载是编译时期的活动,重写是运行时期的活动
问:为什么不能根据返回类型来区分重载?
因为调用时不能指定类型信息,编译器不知道你要调用哪个函数。函数的返回值只是作为函数运行之后的一个“状态”,它是保持方法调用者与被调用者进行通信的关键,并不能作为某个方法的标识。

+ 运算符:

在Java中,“+”和“+=”是经过重载的运算符,而Java不允许程序员进行运算符的重载。若String先出现,则其后的int统一当作String拼接,若int先出现,先执行运算

== 运算符:

== 可用于基本类型和引用类型:
当用于基本类型的时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同,比较的是地址
基本型和基本型封装型进行 == 运算符的比较,基本型封装型会自动拆箱变为基本型之后再进行比较
两个integer类型进行 == 比较,如果值在-128到127之间,返回true,否则返回false
两个基本型的封装型进行equals()比较,首先equal()会比较类型,如果类型相同,则继续比较值,如果值相同,返回true
Integer的取值范围时-128 到127之间
当我们给一个Integer赋予一个int类型的时候,会调用Integer的静态方法valueOf方法,即Integer i = 127 可以翻译为:Integer i = Integer.valueOf(127),当Integer赋予的int数值在-128到127之间的时候,直接从cache中获取,这些cache引用对Integer对象地址是不变的,但是不在这个范围内的数字,则new Integer(i)这个地址是新的地址

补码的计算方法:

-n=~n+1 所以 ~n=-n-1

移位运算符:

<<: 左移运算符,num<<n,相当于num乘以2的n次方
>>: 右移运算符,num>>n,相当于num除以2的n次方
>>>: 无符号右移,忽略符号位,空位都以0补齐

数据类型的转换:

将字符串转换为基本数据类型:
调用基本数据类型对应的包装类中的方法parseXXX(string)或valueOf(String)即可返回相应基本类型
将基本数据类型转换为字符串:
一种方法是将基本数据类型与空字符串(””)连接(+)即可获得其所对应的字符串,另一种方法是调用string类中的valueOf()方法返回相应字符串

上一篇 下一篇

猜你喜欢

热点阅读