Java面试集合(七)
前言:
Java面试集合(六)
的回顾,对于final
可以修饰常量,方法,和类,一旦常量定义好后就不可改变,而方法,用final
来修饰方法,方法不可重载,继承,重写,final
用来修饰类,该类不能被继承。
抽象abstract
,不能够有对象,即不能进行实例化,但又构造方法,在抽象修饰类时,这个抽象类,不一定有抽象方法,但是在类中有抽象方法,那么这个类就一定是抽象类。
在抽象类中的所有抽象方法,子类一旦继承抽象类,就要重写父类(即抽象类)中的所有抽象方法,但是连子类都是抽象类就不用,如果该子类继承了抽象的父类,子类也是抽象类,就不用。
抽象方法是没有方法体的,因为抽象方法是抽象功能的,在子类中实现,抽象方法可以被重载,即参数等不同。抽象方法不能再用static/final/private
来修饰。
接口interface
的抽象方法用public abstract
来修饰,属性用public static final
来修饰。
接口是没有实例化对象的,也没有构造方法
内部类的分类为,方法的内部类,成员的内部类,静态内部类,匿名内部类。
包的基础(package
)和垃圾回收机制基础。
1. Object对象
所有类的父类Object
,因为任何一个类都是直接或者间接的继承Object
类,都是Object
的子类,Object
是类层次结构的根类,存在java.lang.Object
中。
getClass
可以获取对象的实际类型
toString
可以返回对象的地址
equals
可以判断两个对象是否相等
对象和类的关系进行判断:instanceof
class A {}
class B extends A {}
interface D{}
class C extends B implements D {}
B b = new C();
b instanceof A --- true
b instanceof B --- true
b instanceof C --- true
b instanceof D --- true
构造方法:
public Object()
finalize()
方法:java的垃圾回收时机Object的toString()
方法:返回的是对象的字符串形式Object的equals()
方法:比较两个对象是否相等
复习:
- 二进制:
以0b/0B作为开头
(0~1,满2进1) - 八进制:
以0作为开头
(0~7,满8进1) - 十进制:
没有特殊标识
(0~9,满10进1) - 十六进制:
以0X/0x作为开头
(09,af,满16进1)
进制间的转化
- 十进制转二进制:不断除以2,然后取余数
- 二进制转十进制:从最低位依次乘以2的位次次幂,然后求和
同理:
十进制转其他进制:除以对应的进制数,然后取余数
其他进制转十进制:从最低位依次开始,按位次乘以进制的位次次幂,然后求和
二进制转八进制,也是从低位开始,每三位二进制为一组,产生一个八进制数字,最高位不足三位,就补0,凑齐三位即可。
口诀:三变一
八进制转二进制,每一位八进制数都会产生三位二进制数字,不足三位就补0即可。
口诀:一变三
同理
二进制转十六位进制:口诀为四变一
十六位进制转二进制:口诀为一变四
Bin为二进制,Oct为八进制,Dec为十进制,Hex为十六进制
2. String类
在 Java
中的字符串属于对象,那么Java
中提供了 String
类来创建和操作字符串,即是使用对象;因为String
类修饰的字符一旦被创建就不可改变,所以当对字符串进行修改的时候,需要使用到StringBuffer
和 StringBuilder
类。
String
类是用来修饰字符串的,字符串是一种特殊的对象,一旦初始化就不可被改变,用String
修饰的字符串变量是不可以被改变的。
例子:
//定义一个字符串
String str = "hello world";
String str = new String("hello world");
对于String
类,存在java.lang.String
中,String
类代表字符串,如何实现字符串的字面值,就是用此类来实例的。
String
类,代表字符串的类,如何的字符串都是String
的对象。字符串是作为常量,被双引号包着的为常量,被初始化即不可被更改。那么接下来举个例子效果。
String i = "123";
System.out.println("i="+i);
//结果为
i=123
如果添加以下
String i = "123";
i = "12"
System.out.println("i="+i);
//结果为
i=12
// 看到这个效果,你会认为不是改了吗?
// 其实不是的,而是新创建了一个对象而已。
在String
中,对象是不可变的,但可以共享的。那么怎么理解是共享的呢?这里引出常量池的概念,如下:
//多个引用指向同一个字符串
String str1 = "dashu"
String str2 = "dashu";
System.out.println(str1==str2);
//结果
true
为true
代表它们同时指向一个字符串,即为对象。创建了一个str1
对象,字符串常理为"dashu"
,那么再次创建一个对象时,常理名相同,在常量池中发现有相同的"dashu"
,那么就同时指向一个值。
常量池是放置常量的,如果有相同的值,就不用创建对象,第一个创建的字符串放在常量池中,如果要用的时候,就拿来用。
// 字符串在底层是以字符数组形式来存储的
String str = “ab”;
String str = new String(“ab”);
String s = “a”;
s = s + “b”;
//内容相同,但是创建方式不同的情况
String str3 = "abc"
String str4 = new String ("abc");
System.out.println(str3==str4);//false
System.out.println(str3.equals(str4));//true
//结果
false
true
// 100个元素拼接成一个字符串,使用+进行拼接
// 整个过程产生301个
String[] arr = { /*100个元素*/ };
// 为 1
String str = “”;
for(String s : arr){
str += s;
// 每拼接1次,要多产生3个对象。
// 一共100个元素,拼接100次,意味着要多产生300个元素
}
String
代表是字符串的类,而字符串本身就是常量,字符串在底层是以字符数组形式存储的,字符串是共享的,在常量池中
StringBuffer
对于字符串是常量,它的值在创建后时不可以改变的,但字符串缓冲区支持可变的字符串。
StringBuffe
r类为java.lang
中,StringBuffer
为字符串缓冲,StringBuffer
为线程安全的可变字符序列,类似String
的字符串缓冲区,缓冲区不能改,但里面可以改,通过某方法可以改变序列的长度和内容。
StringBuffer
提供了主要的两种方法,一,append()
,二,inset()
StringBuffer
为一个字符串缓冲区,相对于一个容器,长度是可变的,可以存储任意类型数据,是将任意数据转变为字符串进行存储,StringBuffer
提供了对数据的很多的操作功能。
例子:
StringBuffer sb = new StringBuffer();
sb.append("da");
sb.append("shu");
System.out.println(sb);
//sb.append("da").append("shu");
如果要操作数据,要转换为字符串。StringBuffer
所有存储的元素都被转成字符串才可使用。
String str = sb.append("da").append("shu").toString();
在指定位置插入元素
sb.insert(2,"hehe");//插入
StringBuilder
的效率要远高于用“+”,需要拼接多个字符串,建议使用StringBuilder
。
StringBuffer和StringBuilder的区别
StringBuilder
是线程不安全的,StringBuffer
是线程安全的
StringBuilder
为java.lang
类,是一个可变的字符序列,提供了与StringBuffer
兼容的API
,StringBuffer
和StringBuilder
方法是一模一样的。
StringBuilder
不同步,不安全。如果同时append(),delete(),insert(),
会导致出错,多线程访问不安全,添加修饰synchronized
即可。在jdk1.5
版本后,推出StringBuilder
被用作一个StringBuffer
的简易替换,用在字符串缓冲区被单个线程使用的时候。
3. 装箱与拆箱
封装类有:Byte , short , Integer , Character , long , Float , Double
记住这些类就可以了,这些都是Number
的子类。
包装类
byte
Byte
short
Short
int
Integer
long
Long
float
Float
double
Double
char
Character
boolean
Boolean
void
Void
自动封箱/自动装箱
底层默认调用valueOf
方法进行封箱
自动拆箱
用***Value()
进行拆箱
自动封装,将基本类型的变量赋值给对应的引用类型对象
自动拆箱,将引用类型的变量赋值给对应的基本类型变量
public class Test{
public static void main(String[] args){
int i = 5;
Integer integer = new Integer(i);//装箱
//拆箱
int i2 = integer.intValue();
}
}
//
public class Test{
public static void main(String[] args){
int i = 5;
Integer integer = new Integer(i);
Interger i2 = i;//自动装箱
int i3 = integer;//自动拆箱
}
}
//
public class Test{
public static void main(String[] args){
char c = 'Vic';
character c2 = c;
c3 = c2;
}
}
4. 类Date
Date
代表日期的类
Date的构造方法
Date(): 为分配Date对象,并初始化对象
Date(int year, int month, int date)
类 Calendar日历的类
Calendar
类是一个抽象类
public abstract class Calendar extends Object
//Calendar 提供了一个类方法 getInstance
Calendar rightNow = Calendar.getInstance();
结语
- 下面我将继续对
Java
、Android
中的其他知识 深入讲解 ,有兴趣可以继续关注 - 小礼物走一走 or 点赞
Java面试集合(七)的更多相关文章
- Java面试集合(三)
前言 大家好,给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类? 答:可以含有多个类,但只有一个是public类,public类的类名与文件名必须一致. 2 ...
- Java面试集合(二)
前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...
- Java面试集合(一)
前言 大家好,给大家带来Java面试集合(一)的概述,希望你们喜欢 一 1.Java按应用范围可划分几个版本? 答:Java按应用范围有三个版本,分别是JavaSE,JavaEE,JavaME. 2. ...
- Java面试集合(三)-30道面试题
前言 大家好,我是 Vic,今天给大家带来Java面试集合(三)的概述,希望你们喜欢 三 1.在Java中是否可以含有多个类?答:可以含有多个类,但只有一个是public类,public类的类名与文件 ...
- Java面试集合(六)
1. abstract抽象 什么是abstract,中文为抽象,从具体事物抽出,概括它们共同的方面,本质属性与关系等,称为抽象.看不见,摸不着的东西叫做抽象,抽象是人们对世界万物的感觉,用特定的图像表 ...
- Java之集合(七)Map
转载请注明源出处:http://www.cnblogs.com/lighten/p/7327216.html 1.前言 按照顺序,本章本是要对Set的相关类进行介绍及讲解的.但是对于其实现有所了解的都 ...
- Java面试集合(五)
1. 继承 在Java中的三大特性中存在一种为继承,继承究竟是用来解决什么问题的呢?在我们写代码的时候,我们会在一些类中使用相同的属性和方法,如两个不同的人(类),共同都有年龄,身高,体重等. 那么我 ...
- Java面试集合(四)
1. jdk,jre,jvm之间的关系 JVM是Java虚拟机,是Java跨平台的重要保障,JVM实现Java跨平台的前提,可以针对不同的操作系统,有不同的JVM. 可以说Java语言是跨平台的,但J ...
- java面试第七天
反射: 反射:在运行时动态分析或使用一个类进行工作. java.lang.Class类:描述类信息的类. 类对象:描述一个类信息的对象,当虚拟机加载类的时候,就会创建这个类的类对象并加载该对象,Cla ...
随机推荐
- spark 线性回归算法(scala)
构建Maven项目,托管jar包 数据格式 //0.fp_nid,1.nsr_id,2.gf_id,2.hydm,3.djzclx_dm,4.kydjrq,5.xgrq,6.je,7.se,8.jsh ...
- FPGA做正则匹配和网络安全,究竟有多大的优势?
FPGA做正则匹配和网络安全,究竟有多大的优势? 西电通院专用集成电路课程学习 云导播 网络安全已经被提升为国家战略的高度,高校里面的新增的一级学科,去年9月份,中央网信办.教育部公布了“一流网络安全 ...
- cnblog测试
文字测试 图片测试
- mysql 数据库导入导出方法总结
一般形式:mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 (1)-p 后面不能加password,只能单独输入如1中那样 (2)mysqldump是在cmd下的命 ...
- Moving or disabling the package cache for Visual Studio 2017
Moving or disabling the package cache for Visual Studio 2017 | Setup & Install by Heath Stewart ...
- Scrum冲刺阶段7
成员今日完成的任务 人员 任务 何承华 美化会员查看安排界面 陈宇 后端设计 丁培辉 美化会员查看界面 温志铭 会员查看界面设计 杨宇潇 会员查看界面设计 张主强 服务器构建 成员遇到的问题 人员 问 ...
- 虚方法(virtual)和抽象方法(abstract)的和接口(interface)的区别
虚方法(virtual)和抽象方法(abstract)的区别 2017年06月15日 13:41:26 阅读数:65 注:本文转载自 http://www.cnblogs.com/michaelxu/ ...
- 使用mobx项目开发总结(不再更新)
mobx的优点 1,使用@observer的组件真正实现按需更新,只有监听的数据发生变化,它才会re-render,尽管父组件发生更新,但是子组件只要有@observer,则不会触发更新,类似于实 ...
- DarwinStreamServer 6.0.3 rtsp服务器搭建
14:46:34 环境:Centos 7.3 编译安装 1.下载Darwin源码 http://dss.macosforge.org/downloads/DarwinStreamingSrvr6.0. ...
- Maven捆绑TestNG实现测试自动化执行、部署和调度
一. 需求介绍 自动化测试,尤其是接口测试时,要写大量的测试用例,这些测试用例我们当然首选使用TesteNG编写,用例数量大,还涉及各种依赖包之类的问题,因此用Maven管理也是最方便最易实现的. 面 ...