Android面试题Java基础篇,由本人整理汇总,后续将继续推出系列篇,如果喜欢请持续关注和推荐,更多精彩内容可以关注微信公众号(Android高级编程):android-tech

系列文章目录:

  • Android面试题View篇
  • Android面试题进程篇
  • Android面试题线程篇
  • Android面试题网络篇
  • Android面试题架构篇
  • Android面试题系统原理篇
  • Android面试题内存&性能篇

一个语言的编译过程

  • 1.词法分析:将一串文本按规则分割成最小的结构,关键字、标识符、运算符、界符和常量等。一般实现方法是自动机和正则表达式
  • 2.语法分析:将一系列单词组合成语法树。一般实现方法有自顶向下和自底向上
  • 3.语义分析:对结构上正确的源程序进行上下文有关性质的审查
  • 4.目标代码生成
  • 5.代码优化:优化生成的目标代码

Java 中内部类为什么可以访问外部类
因为内部类创建的时候,需要外部类的对象,在内部类对象创建的时候会把外部类的引用传递进去

java类加载过程:

  • 1.加载时机:创建实例、访问静态变量或方法、反射、加载子类之前
  • 2.验证:验证文件格式、元数据、字节码、符号引用的正确性
  • 3.加载:根据全类名获取文件字节流、将字节流转化为静态储存结构放入方法区、生成class对象
  • 4.准备:在堆上为静态变量划分内存
  • 5.解析:将常量池中的符号引用转换为直接引用
  • 6.初始化:初始化静态变量

静态方法跟静态代码块有什么区别
静态方法属于类,用类名.就能直接调用,静态代码块是类加载的时候就会调用的

关键字final和static是怎么使用的

final:

  • 1、final变量即为常量,只能赋值一次。
  • 2、final方法不能被子类重写。
  • 3、final类不能被继承。

static:

  • 1、static变量 对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存, 在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
  • 2、static代码块
    static代码块是类加载时,初始化自动执行的。
  • 3、static方法
    static方法可以直接通过类名调用,任何的实例也都可以调用,因此static方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。

String,StringBuffer,StringBuilder区别

  • 1、三者在执行速度上:StringBuilder > StringBuffer > String (由于String是常量,不可改变,拼接时会重新创建新的对象)。
  • 2、StringBuffer是线程安全的,StringBuilder是线程不安全的。(由于StringBuffer有缓冲区)

StringBuffer跟StringBuider的区别
StringBuider非线程安全,执行速度快,单线程用这个类

Java中重载和重写的区别:

  • 1、重载:一个类中可以有多个相同方法名的,但是参数类型和个数都不一样。这是重载。
  • 2、重写:子类继承父类,则子类可以通过实现父类中的方法,从而新的方法把父类旧的方法覆盖。

Java中实现多态的机制是什么?
答:方法的重写Overriding和重载Overloading是Java多态性的不同表现

  • 重写Overriding是父类与子类之间多态性的一种表现
  • 重载Overloading是一个类中多态性的一种表现.

说说你对Java反射的理解
JAVA反射机制是在运行状态中, 对于任意一个类, 都能够知道这个类的所有属性和方法; 对于任意一个对象, 都能够调用它的任意一个方法和属性。 从对象出发,通过反射(Class类)可以取得取得类的完整信息(类名 Class类型,所在包、具有的所有方法 Method[]类型、某个方法的完整信息(包括修饰符、返回值类型、异常、参数类型)、所有属性 Field[]、某个属性的完整信息、构造器 Constructors),调用类的属性或方法自己的总结: 在运行过程中获得类、对象、方法的所有信息。

说说你对Java注解的理解
元注解的作用就是负责注解其他注解。java5.0的时候,定义了4个标准的meta-annotation类型,它们用来提供对其他注解的类型作说明。
@Target
@Retention
@Documented
@Inherited

switch语句能否作用在byte上,能否作用在long上,能否作用在String上?
switch能作用在byte、char、short和int上,JDK1.7后可以作用在String上。

”==”和equals方法究竟有什么区别?
==和equals都可以比较地址。==是运算符,equals是方法,方法可以通过重写改变其行为,如String的equals就是比较字符串内容。

构造方法能否被重写和重载?
构造方法不能被重写但是能被重载。

面向对象的特征有哪些?
封装、继承、多态和抽象。

抽象类和接口的区别?

  • 1).抽象类是abstract class修饰,接口是interface修饰。
  • 2).抽象类可以有任意类型的属性,接口只能有静态常量修饰的属性。
  • 3).抽象类可以有普通方法和抽象法方法,接口的方法都是抽象方法。
  • 4).抽象类和接口都不能实例化,但是抽象类有构造方法,接口没有构造方法。
  • 5).抽象类只能单根继承,接口可以多重实现。

内部类可以引用它的包含类的成员吗?有没有什么限制?
可以引用。如果需要指定当前类时要用外部类.this来引用。如果引用局部变量,需要将局部变量指定为final。

String s = new String(“xyz”);创建了几个String Object? 二者之间有什么区别?
2个对象。”xyz”创建在字符串常量池中,new String()创建在堆中。

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
会在return前执行。

Integer与int的区别
Integer为包装类,int是基本数据类型。包装类拥有方法和属性,基本数据类型不具备。包装类可以通过intValue来转换成基本数据类型,也可以通过new Integer()将基本数据类型转换为包装类。在JDK1.5后,包装类和基本数据类型可以实现自动转换。

java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
java中有三种流,分别是字节流(InputStream、OutputStream)、字符流(Reader、Writer)、对象流(ObjectInputStream、 ObjectOutputStream)。

谈谈final,finally,finalize的区别?

  • final是修饰符,可以修饰类(不能被继承)、属性(常量)、和方法(不能被重写)。
  • finally是异常处理块中的代码块,表示无论如何都会执行的代码块。
  • finalize是Object类的方法,该方法在对象被垃圾回收之前执行的方法。

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
java中只有值传递,如果传递的对象,实际也是传递该对象的地址。

用最有效率的方法算出2乘以8等於几
将2的二进制向左移3位,java中用<<来移位

是否可以从一个static方法内部发出对非static方法的调用?
不能,除非先创建非static方法所在类的对象。

什么是内部类?内部类的作用
内部类可直接访问外部类的属性
Java中内部类主要分为成员内部类、局部内部类(嵌套在方法和作用域内)、匿名内部类(没构造方法)、静态内部类(static修饰的类,不能使用任何外围类的非static成员变量和方法,不依赖外围类)
使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。 因为Java不支持多继承,支持实现多个接口。但有时候会存在一些使用接口很难解决的问题,这个时候我们可以利用内部类提供的、可以继承多个具体的或者抽象的类的能力来解决这些程序设计问题。可以这样说,接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

静态属性和静态方法是否可以被继承?是否可以被重写?以及原因?
可继承 不可重写 而是被隐藏
如果子类里面定义了静态方法和属性,那么这时候父类的静态方法或属性称之为"隐藏"。如果你想要调用父类的静态方法和属性,直接通过父类名.方法或变量名完成。

java的对象锁和类锁的区别
java的对象锁和类锁在锁的概念上基本上和内置锁是一致的,但是,两个锁实际是有很大的区别的,对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。但是有一点必须注意的是,其实类锁只是一个概念上的东西,并不是真实存在的,它只是用来帮助我们理解锁定实例方法和静态方法的区别的

Android面试题Java基础篇相关推荐

  1. java实体类转map_十五道经典面试题-JAVA基础篇

    十五道JAVA基础面试题送给有需要的童鞋,但是不得不多提醒一句,打铁还需自身硬,计算机软件这个行业,技术和学历才是王道.好了,废话不多说,上菜: 一:面向对象的特征有哪些方面 1. 抽象:抽象就是忽略 ...

  2. android 基础应用程序,android应用程序基本实现(基础篇).ppt

    <android应用程序基本实现(基础篇).ppt>由会员分享,可在线阅读,更多相关<android应用程序基本实现(基础篇).ppt(22页珍藏版)>请在人人文库网上搜索. ...

  3. 菜鸟学习笔记:Java基础篇6(数组、字符串)

    菜鸟学习笔记:Java常用类(数组.字符串) 数组 概述 数组的定义 二维数组 数组查找和排序 查找 排序 数组运用--字符串 不可变字符序列(String) 可变字符序列(StringBuilder ...

  4. 菜鸟学习笔记:Java基础篇2(变量、运算符、流程控制语句、方法)

    菜鸟学习笔记:Java基础篇2 变量 基本概念 变量作用域 final关键字 运算符 算术运算符 比较运算符 逻辑运算符 位运算符 赋值运算符 条件运算符 运算符优先级 Java三种流程控制语句 顺序 ...

  5. 极光小课堂 | 极光推送之 Android 客户端使用指南——基础篇

    " 本文中涉及到的所有代码现已在 Github 上开源,地址:https://github.com/xuexiangjys/JPushSample" 01 前言 - 极光推送是国内 ...

  6. 高频面试真题答案 -java后端 -java基础篇

    原贴 2022届秋招高频面试真题汇总,千题奉送!!!- 后端篇_笔经面经_牛客网 整理答案: 类加载机制 47 双亲委派机制 24 new一个对象的过程 4 java程序是如何运行起来的? 1 jvm ...

  7. 你所需要的java基础篇深入解析大汇总

    java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序 ...

  8. Java基础篇4——数组

    Java基础篇4--数组 1.数组的概念 当需要在Java程序中记录单个数据内容时,则声明一个变量即可 当需要在Java程序中记录多个类型相同的数据内容时,则声明一个一维数 组即可,一维数组本质上就是 ...

  9. Java基础篇3——流程控制

    Java基础篇3--流程控制 1.顺序结构 正常代码的流程即是顺序流程 2.分支结构 2.1.if-else分支 if(条件表达式) {语句块1; } if(条件表达式) {语句块1; } else ...

最新文章

  1. 【有美女看】提升用户体验,你不得不知道的事儿——巧用全屏与沉浸式体验,让用户更舒心~...
  2. 图书大甩卖(操作系统、C语言、Linux) 已成交
  3. pycharm 无法导包、无法导入模块(模块名不能含有连接符“-”)
  4. afm原子力分析软件_安东帕Tosca系列原子力显微镜在聚合物表面上大显身手
  5. 十年老站吐血迁移实录
  6. 如何根据进程号去查端口号?
  7. security中的@EnableGlobalMethodSecurity注解详解
  8. 红橙Darren视频笔记 旋转加载界面
  9. 【java】linux命令获取百度的主页-模拟Socket三次握手
  10. 分布式系统基本原理介绍
  11. python基础刻意练习--Task 7 文件与文件系统
  12. 从零开始快速搭建LoRaWAN节点设备
  13. net start mysql无法启动数据库的解决办法
  14. 批量解析域名为IP地址的shell脚本和python脚本
  15. md笔记上传到CSDN---Typora+SMMS+PicGo
  16. 杂散发射干扰和阻塞干扰
  17. Codec Engine 概要
  18. Ubuntu16.04系统安装搜狗输入法教程
  19. 怎么在linux上添加网络打印机,Ubuntu下安装安装hp网络打印机图解
  20. 【Web开发】Python实现Web服务器(Sanic)

热门文章

  1. 爱快路由研究中关于rootfs.gz文件的解压缩问题
  2. 【APICloud系列|16】苹果开发者账号如何更改双重认证的手机号
  3. 关于 SQL Server Reporting Services 匿名登录的解决方案
  4. Habor数据迁移方式有多少,skopeo效率最好
  5. 检测PCB板电路的短路情况试错之路
  6. 树的序列化——浅谈 dfn 与欧拉序列
  7. here-document at line 40 delimited by end-of-file (wanted `EOF‘)
  8. 报错:Torch not compiled with CUDA enabled看这一篇就足够了
  9. CAD测量工具使用方法
  10. html代码seo,SEO必学基础html代码基础