您现在的位置是:首页 > 正文

总结每天10问之Java基础1

2024-01-30 21:26:06阅读 0

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
}

网站文章

  • C#将word文档转为PDF

    C#将word文档转为PDF

    C#将word文档转为PDF

    2024-01-30 21:26:00
  • 2021-09-29

    2021-09-29

    小程序时间刻度尺组件库(vue通用) 实现效果:页面进来的时间 刻度尺当前时间点 以前表示不可预约 样式为红色 时间点之后的样式为蓝色 Demo效果: 实现思路:刻度尺上面的小刻度数用循环遍历出来的 ...

    2024-01-30 21:25:54
  • 如何设计更优的分布式锁?

    如何设计更优的分布式锁?

    如何设计更优的分布式锁?

    2024-01-30 21:25:19
  • Android JNI学习-异常处理

    异常我们已经很熟悉了,空指针、数组越界等等,在Java中,当抛出一个异常,虚拟机会停止执行代码块并进入调用栈反向检查能处理特定异常的异常处理程序代码块,虚拟机清除异常并将控制权交给异常处理程序。而JN...

    2024-01-30 21:25:12
  • Kafka学习笔记之K8S内filebeat传输到kafka报错带解决方案

    Kafka学习笔记之K8S内filebeat传输到kafka报错带解决方案

    0x00 概述filebeat非常轻量级,正常情况下占用的资源几乎都能忽略不计,但是部署后发现资源占用很大,所以怀疑是filebeat本身出了问题。第一时间查看filebeat日志(默认路径/var/log/filebeat/filebeat,K8S需要在控制台实时查看pod的日志),发现有大量内容输出:2019-03-20T08:55:02.198+0800 IN...

    2024-01-30 21:25:07
  • PgSQL · 追根究底 · WAL日志空间的意外增长

    PgSQL · 追根究底 · WAL日志空间的意外增长

    问题出现我们在线上巡检中发现,一个实例的pg_xlog目录,增长到4G,很是疑惑。刚开始怀疑是日志归档过慢,日志堆积在pg_xlog目录下面,未被清除导致。于是检查归档目录下的文件,内容如下。但发现新近完成写入的日志文件都被归档成功了(即在pg_xlog/archive_status里面,有对应的xxx.done文件)。ls -lrt pg_xlog...-rw------- ...

    2024-01-30 21:24:38
  • 第七节:元组&amp;字典

    元组和字典for循环range函数元组字典的简介字典的增删改查作业 for循环 range函数 元组 字典的简介 字典的增删改查 作业

    2024-01-30 21:24:32
  • java构造一个银行账户类

    java构造一个银行账户类

    (1)思路数据成员用户的账户名称、用户的账户余额(private数据类型)方法包括开户(设置账户名称及余额),利用构造方法完成查询余额。取款存款(2)代码实现package p1;import jav...

    2024-01-30 21:24:25
  • JDK和Maven在Windows下安装和配置

    JDK和Maven在Windows下安装和配置

    文章目录1.JDK1.1 下载安装1.2 配置环境变量1.3 验证安装2.Maven2.1 下载安装2.2 配置环境变量2.3 修改本地仓库位置2.4 配置阿里云的中央仓库2.5 验证和测试1.JDK...

    2024-01-30 21:23:55
  • bzoj2242

    2242: [SDOI2011]计算器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 3179 Solved: 1248 [Submit][Status][Discuss] Description 你被要求设计一个计算器完成以下三项任务: 1、给定y,z,p,计算Y^Z Mod P 的值; 2、给定y,z,p,计算满足xy≡

    2024-01-30 21:23:48