作为一个刚入门的java程序猿,这些知识你真正理解了多少呢?
比如:JDK、JRE、JVM三者的关系?8种基本类型?访问权限修饰词作用范围?Java内存分为哪几个区域?等等好多基础知识的呦~
如果还不太清楚的话,那让小姐姐告诉你吧!
如果你是一个有很多年工作经验的老司机,那来一起回顾下!欢迎指正!
本人是一个刚学会做项目的小姐姐,在学习java的过程中,还有很多很多不理解的地方,有一颗要做好不要命的心,把自己学到的东西拿出来分享,大家一起努力变大牛呀~!
-
JDK、JRE、JVM三者的关系
①JVM:
java虚拟机,加载.class并运行.class
②JRE:
java运行环境,除了包含JVM以外还包含运行java程序所必须的环境
JRE=JVM+java系统类库
③JDK:
java开发工具包,除了包含JRE以外还包含开发java程序所必须的命令工具
JDK=JRE+编译、运行等命令工具
【说明】:
运行java程序的最小环境为JRE
开发java程序的最小环境为JDK -
8种基本类型
①byte(字节型,1个字节)
②short(短整型,2个字节)
③int(整型,4个字节)
④long(长整型,8个字节)
⑤float(单精度浮点数,4个字节)
⑥double(双精度浮点数,8个字节)
⑦boolean(布尔类型,1个字节)
⑧char(字符类型2个字节) -
访问权限修饰词作用范围
public protected 默认(default) private
①public:公开的,任何类
②private:私有的,本类
③protected:受保护的,本类、子类、同包类
④默认的(default):什么也不写,本类、同包类 -
Java内存分为哪几个区域;
1)堆:
①存储new出来的对象(包括实例变量)
②成员变量的生命周期:创建对象时存在堆中,对象被回收时一并消失
③垃圾:没有任何引用指向的对象垃圾回收器不定时到内存中清扫垃圾,回收过程是透明的,不一定发现垃圾就立刻回收,调用System.gc()可以建议JVM尽快调度GC来回收
④内存泄漏:不再使用的内存没有被及时的回收
建议:不再使用的对象需及时将引用设置为null
2)栈:
①存储正在调用中的方法中的所有局部变量(包括参数)
②调用方法时,会在栈中为该方法分配一块对应的栈帧,栈帧中存储方法中所有局部变量(包括参数)方法调用完后,栈帧被清除,局部变量一并失效
③局部变量的生命周期:调用方法时存在栈中,方法完之后与栈帧一并消失
3)方法区:
①存储.class字节码文件(包括方法)
②方法只有一份,能过this来区分具体的调用对象 -
重写和重载的区别;
1)重写(Override):
①发生在父子类中,方法名相同,参数列表相同,方法体不同
②重写遵循"运行期"绑定,看对象的类型来调用方法
【总结】:遵从“两同两小一大”原则:
⑴两同:方法名相同,参数列表相同
⑵两小:返回值类型小于等于父类方法返回值类型(基本类型必须等于,void必须一致),抛出的异常小于等于父类方法抛出的异常
⑶一大:访问权限要大于父类方法访问权限
2)重载(Overload):
①发生在一个类中,方法名相同,参数列表不同,方法体不同
②重载遵循"编译期"绑定,看引用的类型来绑定方法 -
成员变量和局部变量的区别:
①位置不一样
成员:类中方法外
局部:方法内或者方法声明上
②默认值不一样
成员:有默认值
局部:没有
③作用域不一样
成员:整个类
局部:方法内中的大括号内
④内存中位置
成员:堆
局部:栈
⑤声明周期
成员:比较长–>随之对象的创建而诞生,随之对象消失而消失
局部:方法调用的时候产生,方法调用结束而消失。 -
使用对象的过程:
①导包
告诉这个类在何处(如果使用的类和被使用的在同一个包下的话,这一句可以省略)不然需要写出导包语句
比如:import 包名.类
②创建对象
格式: 类名 对象名(存的是地址值) = new 类名();
【解释】:
⑴new:new出来的是地址值,在堆内存中,参照本文第4条
⑵类名:构造函数:( 包括有参构造、无参构造 )
⑶构造方法作用: 用来创建对象,专门被new调用,用来创建对象的,给对象在堆内存中开辟空间,给成员变量进行初始化!!! 用new来创建时,其实就是在调用构造方法。 当我们创建对象时利用满参构造方法可以直接给成员变量进行赋值!(有参构造可以直接给成员变量赋值、无参构造可以通过setter和getter方法给成员变量进行赋值!!!)
【特点】:
❶构造方法名和类名必须完全一样
❷构造方法没有返回值类型,连void都不能有
❸构造方法没有返回值,不能有return语句!!!
❹如果你一个构造都没有提供,系统会默认提供一个无参构造方法。
❺如果一旦提供了至少一个构造,系统就不会提供那个无参构造了。
❻构造函数可以给我们成员变量进行赋值,但是只能用一次,如果要修改对象的属性,不能再new了,还需要setter和getter方法的支持。
❼有参构造和无参构造的方法名一样、参数列表不一样,是一种重载现象。
③使用对象
⑴使用成员变量:
对象名.成员变量 获取成员变量
对象名.成员变量 = 值 即为给对象的成员变量赋值
【注意】: 成员变量有默认值,原因是在成员变量在堆里!!!
⑵使用成员方法
对象名.成员方法名 ( 参数 )
【注意】:对象作为方法的参数或者返回值时,传的参数是地址值,返回的返回值也是地址值!!!!!! -
匿名对象:
没有变量名的对象, new 类名(参数列表),创建匿名对象直接调用方法,没有变量名,一个匿名对象只能使用一次,匿名对象是引用类型数据可以作为方法的参数和返回值。(操作地址值!!!) -
数据类型转换
①隐式自动类型转换: 小数据转大数据。
②显示强制类型转换: 大数据转小数据–>小数据类型
小数据变量名 = (小数据类型)大数据类型
【注意】 :强制类型转换会导致数据溢出,精确度下降。
变量byte和变量short和变量char,如果说右边全部都是常量的话,他会帮我们自动判断在不在左边的范围之内,如果在的话,自动帮我们做了强制类型转化。
byte、short、char 在参与算术运算时会首先提升为 int类型再计算。 -
跳出语句
①break :
使用场景:终止switch或者循环 在选择结构switch语句中 在循环语句中 离开使用场景的存在是没有意义的
②continue :
使用场景:结束本次循环,继续下一次的循环