总结每天10问之Java基础1

Java 基础

OOP相关

1、什么是B/S架构?什么是C/S架构

答:

B/S中B是Brower,浏览器的意思;S是Server,即Brower/Server,用户通过浏览器访问服务。

C/S中C是Client,客户端的意思;Client的范围很大,可以包括浏览器,但是一般情况都是桌面定制。

2、Java都有那些开发平台?

答:

1)Java SE:主要用在客户端开发

2)Java EE:主要用在Wef服务器开发

3)Java ME:主要用在嵌入式开发

3、JDK和JRE的区别

答:

1)JDK:Java development kit:Java开发工具箱,运行在JRE之上,主要是提供给开发人员开发相关的业务功能。

2)JRE:Java Run Environment:Java运行时环境,java程序需要通过jre去运行。java的跨平台性是靠这个,支持多种语言,包括groovy,scala,java等程序。

4、Java语言有哪些特点

答:

1)跨平台
2)类库丰富,社区活跃,最受欢迎的语言之一
3)支持多线程,面向对象

5、面向对象和面向过程的区别

答:

整体来说算是一个编程进化的过程,面向过程出现在面向对象之前。

面向过程一般只需按照业务逻辑从头到尾编写即可,但是时间久了就会发现代码逻辑混乱,晦涩难懂,维护难度高。

为了解决面向过程编程遇到的问题,提出了面向对象编程。

面向对象编程:OOP,重点在于对象是什么:

赋予某个类丰富的功能,比如创建一个类对应业务功能的用户,把这个用户的动作行为封装在该类中,让这个类看起来就像人一样有手有脚。称之为对象。

具备某种功能的实体,称为对象。面向对象最小的程序单元是:类。面向对象更加符合常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。

面向对象也是依据Java的三个特性:继承、封装、多态 来实现的。主要是一种设计思想。

面向对象的特征:四点:封装、继承、多态、抽象。

6、访问修饰符 public,private,protected,以及不写(默认)时的区别?

答:

作用域当前类同包子类其他
public
protected×
default××
private×××

这个是对class的,其实对interface,默认就是public

7、Java的基本类型包括哪些:

答:

8种:

整形:byte,short,int,long
浮点型:float,double
字符型:char,char 在底层也会翻译成整形。
布尔型:boolean,boolean 在底层也会翻译成整形。

char 型变量中能不能存贮一个中文汉字?为什么?

  • 在 C 语言中,char 类型占 1 个字节,而汉字占 2 个字节,所以不能存储。
  • 在 Java 语言中,char 类型占 2 个字节,而且 Java 默认采用 Unicode 编码,一个 Unicode 码是 16 位,所以一个 Unicode 码占两个字节,Java 中无论汉字还是英文字母,都是用 Unicode 编码来表示的。所以,在 Java 中,char 类型变量可以存储一个中文汉字。
8、instanceof 关键字的作用?和 isAssignableFrom 区别?

答:

instanceof是java保留的二目操作符,用来判断该对象是否是某个java类型/父类/interface。返回值是boolean,true表示该对象是该类型,false表示不是该类型。

不过instanceof使用有限制,该对象不能是基本类型(什么是基本类型看第七点)。在编译阶段就会抛出异常类。

instanceof 等价于 Class.isInstance(),不过Class.isInstance()是提供给class去动态匹配的,使用的情况是我们只拿到了对象的class,没有拿到具体的对象的情况下。

isAssignableFrom 和 instanceof 功能类似,instanceof能实现的功能 isAssignableFrom 操作的对象是class,这一点和 instance 不一样。

看看使用情况应该更好理解:

interface ClassDemoInteface {

}

class ClassDemoParent {

}

public class Assigned extends ClassDemoParent implements ClassDemoInteface {



    public static void main(String[] args) {
        Assigned cd = new Assigned();

        /* ----------- instance ------------*/
        System.out.println(cd instanceof Assigned);    // true
        System.out.println(cd instanceof ClassDemoParent);   // true
        System.out.println(cd instanceof ClassDemoInteface);   // true
        System.out.println(cd instanceof Object);

        /* ----------- isAssignableFrom ----------*/
        System.out.println(Assigned.class.isAssignableFrom(Assigned.class));  // true

        System.out.println(Assigned.class.isAssignableFrom(ClassDemoParent.class));  // false
        System.out.println(Assigned.class.isAssignableFrom(ClassDemoInteface.class));    // false

        System.out.println(ClassDemoParent.class.isAssignableFrom(Assigned.class));    // true
        System.out.println(ClassDemoInteface.class.isAssignableFrom(Assigned.class));    // true
    }

}
9、重载和重写的区别

答:

重载:指的是父类有一个函数签名(函数名/方法名),子类/同类使用同样一个同一个函数签名,但是我们的参数不一样(类型不一样,参数个数不一样都可以)。

然后在代码运行的阶段,jvm会自动帮我们匹配到一个符合的函数/方法,然后执行代码程序。

这里会引发另外一个问题:如果我的调用方法的时候传参发现有多种重载函数都能匹配上,怎么办?

一般只有基本类型才会出现上面的问题,为什么呢?因为这里涉及一个隐式转换和显式转换的问题?第10题会涉及这一点:

这个设计jvm的运行的重载函数的匹配顺序,下面直接给出匹配的结论点:

byte   ->    byte, short, int ,long ,float ,double,Byte,Number,Object
short  ->   short, int ,long ,float ,double,Short,Number,Object
char   ->   char, int ,long ,float ,double,Character,Object
int       ->   int ,long ,float ,double,Integer,Number,Object
long   ->   long ,float ,double,Long,Number,Object

重写:指的是子类使用和父类/接口同一个的一个方法签名(函数名/方法名),参数也一样,一般情况会使用注解@Override标准出来。表示覆盖父类/interface方法。

10、什么是隐式转换,什么是显式转换?

答:

显示转换就是类型强转,把一个大类型的数据强制赋值给小类型的数据;
隐式转换就是大范围的变量能够接受小范围的数据;
隐式转换和显式转换其实就是自动类型转换和强制类型转换。

为了更方便理解,可以看下面的代码:

public static void main(String[] args) {
    char c = '~'; //char 占 2 byte,16bit。
    System.out.println(c); //~
    int i = c;
    System.out.println(i); //126
    long l =c;
    System.out.println(l); //126
    double d = c;
    System.out.println(d); //126.0
    byte b = (byte) c;
    System.out.println(b); //126
    c = (char) (c << 3);
    System.out.println(c); // ϰ
    byte b1 = (byte) c;
    System.out.println(b1); //-16
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值