没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
java基础
基础
Java与C++的对比
都是面向对象的思想
java应用在高层,C++在中间件和底层
java取消了指针,带来更高的代码质量。完全面向对象,独特的运行机制是其天然的可移植性。
java运行在JVM上,可移植性强【jvm可以安装到任何的系统】
C++不是不能在其他系统运行,而是C++在不同的系统上运行,需要不同的编码(这一点不如
java,只编写一次代码,到处运行)。java程序一般都是生成字节码,在JVM里面运行得到结
果。
java在桌面程序上不如C++使用,C++可以直接编译成exe文件,指针是C++的优势,可以直接对内
存的操作,但同时具有危险性。【操作内存的确是一件非常危险的事情,一旦指针指向的位置发生
错误,或者误删除了内存中某个地址单元存放的重要数据,后果可想而知】
垃圾回收机制的区别:C++用析构函数回收垃圾,java自动回收(GC)算法,写C和C++程序的时
候一定要注意内存的申请和释放。
java丰富的插件是java发展如此迅速的原因。
java很大的沿袭了C++的一些使用结构
对于底层程序编程以及控制方面的编程,C++很灵活,因为有句柄的存在。
java并不仅仅是C++语言的一个变种,它们在某些问题上有根本的不同:
1. java比C++ 程序更加可靠。
2. java语言不需要程序对内存进行分配和回收
3. java语言中没有指针的概念
4. java用接口技术取代了C++程序中的多继承性。
编译型与解释型语言
编译型
使用专门的编译器,针对特定的平台,将高级语言源代码一次性编译成可以被该平台硬件执行
的机器码,并包装成该平台能够识别的可执行程序的格式
解释型
使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。
静态类型的语言和动态类型的语言
静态类型语言:
指的是代码运行之前就做数据类型检查,运行前数据类型就已经确定了。比如java、C、C++
动态类型的语言
代码在运行的时候数据类型才确定。数据类型绑定是代码运行时确定的。比如 JS、PHP。
装箱与拆箱
装箱和拆箱
装类类型
拆箱:把包装类类型转成基本数据类型
为什么要有包装类?
八种基本数据类型不满足面向对象的思想,不包含属性和方法,如果给基本数据类型添加功能,只
能创建其包装类,将方法和属性封装进去(jdk5.0以后出现了自动拆箱,装箱)
== 与equals的区别
== 是比较运算符。如果进行比较的两个操作数是数值类型,即使他们的数据类型不相同,只要他
们的值相同就会返回true; 如果另个操作数都是引用类型,那么只有两个引用变量的类型具有父子
关系时,才可以比较,而且这两个引用必须要指向同一个对象,才会返回true。(可以理解成,对
于引用类型,==是比较两个变量的内存地址。
equals() 方法时Object类中的方法,在Object类中,equals()方法体内实际上返回的就是==进行
比较的结果,但是我们知道所有的类都继承了Object,而且Object中的equals()方法没有使用final
关键字进行修饰,那么,当我们使用equals()方法进行比较的时候,我们需要关注的是这个类有没
有重写Object中的equals()方法。
区别
== 是java提供的等于比较运算符,用来比较两个变量指向的内存是否相同,而equals()是Object提供的
一个方法(),Object中的equals()方法默认实现就是返回两个对象==的比较结果,但是equals()可以被
重写,所以我们具体使用的时候需要关注equals()方法有没有被重写。
static 用法
用来修饰成员变量。将其变为类的成员,从而实现所有对象对于该成员的共享。
修饰成员方法,将其变为类的方法,使得可以使用 类名.方法名 的方式调用,常用于工具类。
静态块的用法。将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非
常关键。
静态导包的用法。将类的方法直接导入到当前类中,从而直接使用 方法名 即可调用类方法,更加方
便。
int和Integer的区别
Integer是int的包装类,int是节本数据类型
Integer变量必须要实例化后下可以使用,int变量不需要
Integer实际是对象的引用,指向此new的Integer对象,int是直接存储数据值
Integer的默认值是null; int 的默认值是0;
深入对比
Integer变量实际上是对一个Integer对象的引用,所以两个通过new 生成的Integer变量永远是不相
等的。(因为new 何时能成的是两个对象,其内存不同)
Integer变量和int变量比较时,只要两个变量的值是相等的,则结果为true(因为包装类Integer和基
本数据 类型int比较时,java会自动拆包装为int,然后进行比较,实际上就编程了两个int变量的比
较)
非new生成的Integer变量和new生成的Integer变量比较时,结果为false。因为非new生成的
Integer变量指向的是静态常量池中的cache数组中存储的指向了堆的Integer对象,而new
Integer()生成的变量指向堆中新建的对象,两者在内存中的对象引用(地址)不同。
对于两个非new 生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比
较结果为true,如果两个变量的值不再此区间,则比较结果为false.
java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100)。而java API中对
Integer类型的valueOf的定义如下,对于-128到127之间的数,会进行缓存,Integer i = 127时,
会将127这个Integer对象进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会
new了。
构造方法
特点
1. 方法名与类名相同
2. 没有返回值。
3. 可以没有参数,也可以有多个构造方法,多个构造方法之间构成重载关系。
4. 如果定义有参构造函数,则无参构造函数没有显式声明的话,会被自动屏蔽。
5. 构造方法不能被继承。
6. 构造方法不能手动调用,在创建类实例的时候会自动调用构造方法。
作用
1. 初始化对象,为对象赋初始值
2. 简化我们为类字段赋值的代码。
构造方法与普通方法的区别
构造方法一定与类同名,普通方法可以不用
构造方法无返回值类型,普通方法可以返回。
在java中定义一个不做事且没有参数的构造方法的作用?
java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中
没有参数的构造方法,因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用
super()来调用父类中特定的构造方法,则编译时将发生错误,因为java程序在父类中找不到没有参数的
构造方法可供执行。解决办法是在父类里加一个不做事且没有参数的构造方法。
Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false
1
2
3
Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
1
2
3
4
5
6
7
引用类型
强引用:类似于是必不可少的物品,不会被垃圾回收器回收,当内存空间不足,java虚拟机宁愿抛
出OutOfMemoryError错误,使得程序异常住址,也不回收这种对象。
软引用:用来描述一些有用但是并不是必须的对象,在java中,用
java.lang.ref.SoftReference 类来表示。对于软引用关联着的对象,只有在内存不足的时候才
会回收该对象。
因此,这一点可以很好地用来解决OOM的问题,并且这个特性很适合用来实现缓存:比如页
面缓存,图片缓存。
可以和个引用队列联合使用
应用:例如浏览器的后腿按钮,这个后退时显示的页面的内容可以重新进行请求或者从缓存中
取出
如果一个页面浏览结束时就进行内容的回收,则按后退查看前面浏览过的页面时,需要
重新构建
如果将浏览过的网页存储到内存中会造成内存的大量浪费,甚至会造成内存溢出这时候
就可以使用软引用
弱引用:非必须的对象,当JVM进行回收的时候,无论内训是否充足都会回收被弱引用关联的对
象。在java中,用 java.lang.ref.WeakReference 类来表示
在使用软引用和弱引用的时候,我们可以显示地通过System.gc()来通知JVM进行垃圾回收
判断它是否已经被回收:如果wr.get()方法为空, 那么说明弱引用指向的对象已经被回收了。
应用场景:如果一个对象是偶尔的使用,并且希望在使用时随时就能获取到,但又不想影响此
对象的垃圾收集,那么应该用 Weak Reference 来记住此对象。或者想引用一个对象,但是
这个对象有自己的生命周期,你不想介入这个对象的生命周期,这时候就应该用弱引用,这个
引用不会在对象的垃圾回收判断中产生任何附加的影响。
虚引用:不影响对象的生命周期。跟没有引用与之关联一样,在任何时候都可能被垃圾回收器回
收。
虚引用主要用来跟踪对象被垃圾回收的活动。
虚引用主要用来跟踪对象被垃圾回收的活动。
当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会把这个虚引用加入到
与之 关联的引用队列中。程序可以通过判断引用队列中是否已经加入了虚引用,来了解
被引用的对象是否将要被垃圾回收。如果程序发现某个虚引用已经被加入到引用队列,
那么就可以在所引用的对象的内存被回收之前采取必要的行动
反射
反射机制
java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意的对
象,都能调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法和功能称为java
的反射机制。
获取Class对象的两种方法
知道具体类的情况下: 类名.class
通过 Class.forName() 传入类的路径获取:
Class alunbarClass = TargetObject.class;1
静态编译和动态编译
静态编译:在编译的时候绑定对象。
动态编译:在运行的时候确定类型,绑定对象、
反射机制的优缺点
优点:运行期间类型的判断,动态加载类,提高代码灵活度
缺点:
1. 性能瓶颈:反射相当于一系列解释操作,通知JVM要做的事情,性能比字节的java代码要慢很
多
2. 安全问题:让我们可以动态改变类的属性同时也增加了类的安全隐患。
反射的应用场景
反射是框架设计的灵魂
在我们平时的项目开发过程中,基本上很少会直接使用到反射机制,但这不能说明单设机制没有用,实
际上有很多的设计、开发都与反射机制有关,例如模块化的开发,通过反射去调用对应的字节码;动态
代理设计模式也采用了反射机制;还有我们日常使用的spring/Hibernate等框架也大量使用了反射机制
举例子:
在使用JDBC连接数据库的时候使用 Class.forName() 通过反射加载数据库的驱动程序
Spring框架的IOC(动态加载管理Bean)创建对象以及AOP(动态dialing)工能够都和反射有关联
动态配置实例的属性、
看代码回答问题
什么是浅拷贝/深拷贝
实现深拷贝
1. 实现Cloneable,重写clone()方法
2. 通过序列化实现深拷贝
深拷贝和浅拷贝就是指对象的拷贝,一个对象中存在两种类型的属性,一种是基本数据类型,另一种是
实例对象的引用。
1. 浅拷贝是指,只会拷贝基本数据类型的值,以及实例对象的引用地址,并不会复制一份引用地址所
指向的对象,也就是浅拷贝出来的对象,内部的类型属性指向的是同一个对象。
Class cls = Class.forName("cn.javaguide.TargetObject");1
String s = new String("abc");
//不改变s引用的指向,最终将输出变为“abcd”
//利用反射
Filed value = s.getClass().getDeclaredField("value");
value.setAccessible(true);
value.set(s,"abcd".toCharArray);
System.out.println(s);
1
2
3
4
5
6
7
8
9
剩余155页未读,继续阅读
李小渣加油鸭~
- 粉丝: 128
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0