java面向对象,数据类型深入
java程序员面试题day02
1.类和对象有什么区别?
java中的类通过class关键字进行定义,代表的是一种抽象的集合,在类中可以定义各种的属性和方法,代表的是每一个类的实例的特定的数据和动作,java虚拟机对类仅仅加载一次,对类中的静态成员也仅仅加载一次。
对象指的是某一个特定抽象的实例,它属于某一种类型,也就是对象是通过类来确定的,它必须从属于某个类,通过new关键字进行创建,代表的是一个特定类型的实例,对象可以被多次的创建。
类是一种抽象,对象是类的具体实现。
2.java中如何利用继承来重用代码?
首先,java中的继承只有单继承,也就是子类只能去继承一个父类,而不能继承多个父类,子类中对父类的方法进行覆盖,在子类中定义一个和父类方法名相同的方法就可以参数类型和返回值类型保持一致。这种手段也叫方法覆盖(重写)。
通过继承,子类就拥有父类除开私有成员的所有的成员,对于方法上,子类可以使用多态,让子类拥有自己的独特的方法实现方式。
3.谈谈一下java中的多态?
多态的本质在于,发送消息给某个对象,让该对象自行决定去响应何种行为,通过将子类对象的引用赋值给超类对象的引用变量来实现动态方法的调用。
package test;
class Man {
public int eyes = 2;
void getEyesColor() {
System.out.println("父类眼睛颜色");
}
}
class Asian extends Man {
void getEyesColor() {
System.out.println("black eyes");
}
}
class Euro extends Man {
void getEyesColor() {
System.out.println("blue eyes");
}
}
public class Main {
public static void main(String[] args) {
Man man1 = new Asian();
Man man2 = new Euro();
man1.getEyesColor();
man2.getEyesColor();
}
}
4.介绍下java中静态成员的特点?
类的静态成员是指用static修饰的成员,包括静态成员变量,静态方法,静态代码块.
共同的特点是:
<1>在类的加载时进行创建和初始化或者执行代码;
<2>对于一个类而言,都只有一份;
<3>类的所有的实例都可以访问到他们。
一个例子:
package test;
public class Main {
static int a=5;
public static void testMethod(){
System.out.println("static method testing");
}
static{
System.out.println("static code block testing");
}
public static void main(String[] args) {
System.out.println(Main.a);
Main.testMethod();
}
}
运行结果:
static code block testing
5
static method testing
静态代码块在类加载时执行了,然后再执行main主函数中要求输出的信息。
5.派生类中的构造方法如何为父类传递参数?
一个例子:
package test;
class Base{
static int a ;
Base(){
}
//基类的带参构造方法
Base(int a ){
this.a = a;
}
}
class Child extends Base{
//子类的无参构造器
Child(){
super(100);
}
//子类的带参构造器
Child(int a){
super(a);
}
}
public class Main {
public static void main(String[] args) {
new Child();
//new Child(200);
System.out.println(Base.a);
}
}
结果:
100 200
在java中,使用super关键字加()的形式为父类的 构造方法提供参数,通过参数的数目和类型去决定调用哪一个构造方法,如果调用的是父类的默认的无参数构造方法,则可以不必显式地使用super().但是需要注意的是,super的使用必须放在子类的构造方法的第一行。
6.Java中的接口和抽象类的区别和联系?
联系:1>接口和抽象类指的都是不能具体描述一个对象的类型,包含了不完整的信息,需要实现类来进行具体的实现。
2>接口和抽象类都可以用于进行类型的强制转换
3>两者都不可以被实例化
区别:1>所有的对象都是通过类来描述的,但是如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类,往往用来表示在对问题领域进行分析,设计中得出的抽象的概念。
2>接口是在抽像类上的进一步的抽象,所有的方法都是抽象的,没有任何的实现。
3>如果一个类中包含一个或者多个抽象的方法,该类必须申明为 抽象类。
4>接口是一种特殊形式的抽象类,在java中抽象类表示一种继承关系,一个类只能继承一个抽象类 ,而一个类 可以实现多个接口。
7.简述一下内部类的实质?
内部类生存在其他的类内部,包括四种类型:
package test;
/*
* 静态内部类:定义在一个外部类中,被static所修饰
* */
class Outter{
static class Inner{
}
}
/*
* 成员内部类:定义在一个外部类中,没有被static修饰
* */
class Outter2{
class Inner2{
}
}
/*
* 局部内部类,定义在一个方法中
* */
class Test{
public void abc(){
class MyLocalClass{
}
}
}
/*
* 匿名内部类:定义在一个方法中,但是没有指明类的具体名字,在这里仅仅是实现一个接口
* */
class Test2{
public void abc(){
new myInterface(){
public void interMethod(){
}
};
}
}
public class Main {
public static void main(String[] args) {
//访问一个成员内部类
Outter2 o2 = new Outter2();
Outter2.Inner2 i = o2.new Inner2();
}
}
1>静态内部类:相当于 外部类的静态成员,使用static修饰的内部类,隶属于外部类,使用起来相当于一个独立的外部类。
2>成员内部类:相当于外部类的普通成员,隶属于外部类的具体对象,定义时需要先创建外部类的对象,再创建它的实例。
3>局部内部类:定义在一个方法的方法体中,往往仅作为方法短暂的使用,只能访问用final修饰的局部变量。
4>匿名内部类:定义在方法体中,没有指定具体的名字。工作本质和局部内部类类似。
8.包如何被创建和使用?
避免重名,package a.b.c
9.说明private protected public default的区别?使用范围
Public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口和异常,往往用于对外的情况,也就是对象或者类对外的一种接口的形式。
Protected:用于保护子类,子类可以用它所修饰的成员,相当于传递给子类的一种继承的东西。
Defalut:针对本包访问而设计的,任何处于本包下的类、接口和异常都可以相互访问。
Private:只能在本类内部被访问到和修改,其他类则不可以。
10.int和integer的区别?
Int的字节的长度为4,用于表示现实中的正负整形数字,由于属于基础数据类型,它的创建不会再堆内存中分配空间,一般是保存在栈内存中,可以直接进行加减乘除的基本算数运算,同时它作为参数传递的时候,直接传递的是它的值。
Integer是int的包装类,可以说,它是一个类。它不能直接参与基本的算数运算,必须转换成int才可以进行运算,同时它作为参数传递时,传递的是对象的一个引用。
看一个他们之间相互转换的例子:
package test;
public class Main {
public static void main(String[] args) {
//基本数据类型的int
int a = 10;
//通过构造器或者valueOf的静态方法得到包装类型
Integer b = new Integer(a);
Integer c = Integer.valueOf(a);
//将包装类型转换为基本数据类型
b.intValue();
c.intValue();
}
}
11.int型数据的取值范围?
int型用四个字节进行存储,范围是:-2^31~(2^31)-1
12.如何用八进制和十六进制表示整形数据?
int型的字面量都为十进制、八进制的字面量采用0开头、十六进制采用0x开头。十六进制:0 1 2 3 4 5 6 7 8 9 a b c d e f八进制:0 1 2 3 4 5 6 7 8
13.long型的数据的表示范围?
long型数据用8位进行存储,取值范围为-2^63~(2^63)-1
14.java中的float和double类型数据的精度?
Float:范围是3.4E+10^(-38)~3.4E+10^(38)
Double:范围是1.7E+10^(-308)~1.7E+10^(308)
在java中默认的浮点型数据为double型
报错:float i = 1.2;
正确: float i = 1.2f;或者 float i = (float)1.2;
15.整类和实型的相互转换?
整形转换为实型时,不会有精度的丢失,但是实型转换为整形时会有。转换的过程分为隐式和显式的,后者是通过强制类型转换来实现的,前者是系统的自动的行为。
16.如何利用bigDecimal进行精确的计算?
自己分装的类:
package test;
import java.math.BigDecimal;
public class Main {
//加法运算
public static double add(Double num1,Double num2){
BigDecimal b1 = new BigDecimal(Double.toString(num1));
BigDecimal b2 = new BigDecimal(Double.toString(num2));
return b1.add(b2).doubleValue();
}
//减法运算
public static double substract(Double num1,Double num2){
BigDecimal b1 = new BigDecimal(Double.toString(num1));
BigDecimal b2 = new BigDecimal(Double.toString(num2));
return b1.subtract(b2).doubleValue();
}
//乘法运算
public static double multiply(Double num1,Double num2){
BigDecimal b1 = new BigDecimal(Double.toString(num1));
BigDecimal b2 = new BigDecimal(Double.toString(num2));
return b1.multiply(b2).doubleValue();
}
//除法运算
public static double divided(Double num1,Double num2){
if(num2==0){
System.out.println("divided by zero!");
System.exit(0);
}
BigDecimal b1 = new BigDecimal(Double.toString(num1));
BigDecimal b2 = new BigDecimal(Double.toString(num2));
return b1.divide(b2).doubleValue();
}
public static void main(String[] args) {
System.out.println(add(0.05,0.01));
}
}
17.java中可以用0来表示true吗?
编译错误的例子:
1>If(100){
}
括号中或者为true或者为false
2>boolean a ;
If(a){
}
布尔类型的变量在用之前必须进行初始化,否则编译报错。
18.boolean和Boolean的区别?
boolean是基础数据类型,boolean是类。
boolean一般存在栈空间中,Boolean存在堆空间中。
boolean有true和false两种值,Boolean有true false null。
19.char类型数据的取值范围?
char采用unicode编码,用两个字节表示一个字符,所有的char型数据的字节长度都是2个字节,一共16位。
范围是:0~(2^16)-1
20.char能否存储汉字?
由于每个中文字符都有对应的Unicode编码,则可以存储汉字。
一个例子:
package test;
public class Main {
public static void main(String[] args) {
//char c = '中';
int i = 20013;
char res = (char)i;
System.out.println(" "+res);
}
}
java面向对象,数据类型深入的更多相关文章
- 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符
[重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...
- Java面向对象 String 基本数据类型对象包装类
Java面向对象 String 知识概要: (1)String的用法详解 (2)基本数据类型对象包装类 String 顾名思义,该类主要是对字符串 ...
- JAVA面向对象-----值交换(基本数据类型 数组类型 对象的值 字符串的)
JAVA面向对象-–值交换 基本数据类型交换 数组类型交换 对象的值交换 字符串的值交换 恩,没错,又是贴图,请大家见谅,我也是为了多写几个文章,请大家谅解. 字符串的值交换: 交换值失败. 这个文章 ...
- 实验二 Java面向对象程序设计
实验二 Java面向对象程序设计 实验内容 1. 初步掌握单元测试和TDD 2. 理解并掌握面向对象三要素:封装.继承.多态 3. 初步掌握UML建模 4. 熟悉S.O.L.I.D原则 5. 了解设计 ...
- java基础1.0::Java面向对象、面向对象封装、抽象类、接口、static、final
一.前言 一直以来都是拿来主义,向大神学习,从网上找资料,现在就把自己在工作中和学习中的所理解的知识点写出来,好记星不如烂笔头,一来可以作为笔记自己温习,二来也可以给走在求学之路的同学们一点参考意见, ...
- 20145212《Java程序设计》实验报告二 《 Java面向对象程序设计》
20145212 实验二< Java面向对象程序设计> 实验内容 单元测试 三种代码 伪代码 百分制转五分制: 如果成绩小于60,转成"不及格" 如果成绩在60与70之 ...
- 20145213《Java程序设计》实验二Java面向对象程序设计实验报告
20145213<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装,继承,多态 初步掌握UML建模 熟悉S.O. ...
- 20145206《Java程序设计》实验二Java面向对象程序设计实验报告
20145206<Java程序设计>实验二Java面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O. ...
- Java面向对象的继承
继承也是面向对象的又一重要特性,继承是类于类的一种关系,通俗来说狗属于动物类,那么狗这个类就继承了动物类 java中的继承是单继承的,一个类只能继承与一个父类 子类继承父类之后,子类就拥有了父类的所有 ...
- Java实验报告二:Java面向对象程序设计
Java实验报告二:Java面向对象程序设计 ...
随机推荐
- 在.net core web 项目中使用Nlog记录日志
第1步,添加NLog.Web.AspNetCore包引用 方法1 在项目上右击“依赖项”---“管理Nuget程序包(N)…”,然后在浏览对话框中输入“NLog.Web.AspNetCore”查找包, ...
- Sql Server中变的定义以及赋值的应用
--申明变量declare @ad_begin datetimedeclare @fydl varchar(50)declare @userid varchar(50)declare @jdrbm v ...
- Python从入门到精通之环境搭建
本章内容: Windows系统环境搭建 Linux系统环境搭建 Mac OS系统环境搭建 一.下载python安装包 下载地址:https://www.python.org/downloads/ 二. ...
- 【linux】【root权限的掌控】
前言: 喜欢玩linux的都知道root权限是一个很重要的东西.因为linux里面万物皆文件,对于权限的掌控也就达到了一个前所未有的限制(不然随便一个用户rm -rf /*不就全完了,,哈哈). 下面 ...
- Keras(四)CNN 卷积神经网络 RNN 循环神经网络 原理及实例
CNN 卷积神经网络 卷积 池化 https://www.cnblogs.com/peng8098/p/nlp_16.html 中有介绍 以数据集MNIST构建一个卷积神经网路 from keras. ...
- python中的全局变量
1. 在函数中定义的局部变量如果和全局变量同名,则会使用局部变量(即隐藏全局变量). 示例: x = 1 def func(): x = 2 print x func() print x 运行结果: ...
- 洛谷P1352没有上司的舞会+树形二维DP
传送门 题意:上司和直接下属,不能同时去一个聚会,问可邀请到的人的快乐值最大是多少: 参考:https://www.luogu.org/blog/mak2333/solution-p1352 思路: ...
- 反序列化JSON
本人编程生涯刚刚起步,以下是个人理解,如果有些不对的地方,请各位在评论区指出,如果有更详细的博客也可以推荐给我. 首先要根据JSON创建一个实体类,并且要实现Serializable接口,再创建一个J ...
- 网页去重之Simhash算法
Simhash算法是Google应用在网页去重中的一个常用算法,在开始讲解Simhash之前,先了解——什么是网页去重?为什么要进行网页去重?如何进行网页去重,其基本框架是什么? 网页去重,顾名思 ...
- spring security集成cas实现单点登录
spring security集成cas 0.配置本地ssl连接 操作记录如下: =====================1.创建证书文件thekeystore ,并导出为thekeystore.c ...