1.  Java 内部类

   内部类有四种常见的类型:成员内部类、局部内部类、匿名内部类和静态内部类。

   1.成员内部类:定义为另一个类的里面如下:

class Circle {
double radius = 0; public Circle(double radius) {
this.radius = radius;
} class Point{ //内部类
public void DrawPoint() {
System.out.println("DrawPoint");
}
}
}

   成员内部类可以无条件访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。

   同时需要注意当成员内部类拥有和外部类同名的成员变量或者方法时,会发生隐藏现象,即默认情况下访问的是成员内部类的成员,如果要访问外部类的同名成员,需要以下面的形式进行访问:

外部类.this.成员变量
外部类.this.成员方法

   2.局部内部类

   局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。

class People{
public People() { }
} class Man{
public Man(){ } public People getWoman(){
class Woman extends People{ //局部内部类
int age =0;
}
return new Woman();
}
}

   局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。

   3.匿名内部类

   大部分匿名内部类用于接口回调。常见于各种监听响应这些的代码当中。如下:

scan_bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});

   4.静态内部类

   静态内部类也是定义在另一个类里面的类,但是在类的前面多了一个关键字static。它是不需要不需要依赖于外部类的,它可以因为在没有外部类的对象的情况下,可以创建静态内部类的对象,也因此它不能使用外部类的非static成员变量或者方法。

public class Test {
public static void main(String[] args) {
Outter.Inner inner = new Outter.Inner();
}
} class Outter {
public Outter() { } static class Inner {
public Inner() { }
}
}

   5.为什么局部内部类和匿名内部类只能访问局部final变量?

   如果局部变量的值在编译期间就可以确定,则直接在匿名内部里面创建一个拷贝。如果局部变量的值无法在编译期间确定,则通过构造器传参的方式来对拷贝进行初始化赋值,这样就会出现数据不一致的情况的发生。具体的详解可以看:https://www.cnblogs.com/dolphin0520/p/3811445.html

2.  Java的八种基本数据类型

   

3.  Java访问控制符

   1.private(当前类访问权限):如果类里的一个成员(包括成员变量、方法和构造器等)使用private访问控制符来修饰,则这个成员只能在当前类的内部被访问。很显然,这个访问控制符用于修饰成员变量最合适,使用它来修饰成员变量就可以把成员变量隐藏在该类的内部。

   2.protected(子类访问权限):如果一个成员(包括成员变量、方法和构造器等)使用protected访问控制符修饰,那么这个成员既可以被同一个包中的其他类访问,也可以被不同包中的子类访问。在通常情况下,如果使用protected来修饰一个方法,通常是希望其子类来重写这个方法。

   3.public(公共访问权限):这是一个最宽松的访问控制级别,如果一个成员(包括成员变量、方法和构造器等)或者一个外部类使用public访问控制符修饰,那么这个成员或外部类就可以被所有类访问,不管访问类和被访问类是否处于同一个包中,是否具有父子继承关系。

4.  Java 泛型:

   参考:https://www.cnblogs.com/demingblog/p/5495610.html

   什么是Java泛型:通俗的讲,泛型就是操作类型的 占位符,即:假设占位符为T,那么此次声明的数据结构操作的数据类型为T类型。

   为什么要使用泛型?其实就是为了 类型安全,List<String> 就是用来操作String类型的,你插入Person对象就不行。但是在编译之后会去掉泛型类型。

5.  Java 中,直接使用==操作符,比较的是两个字符串的引用地址,并不是比较内容,比较内容请用String.equals()。

6.  Java的常量池放在方法区。

7.  join方法 wait方法 notify方法:参考https://blog.csdn.net/jisuanji_qiyongjie/article/details/82052970

   现假设有一块钟表对象,钟表有两个线程,一个是查询当前时间,另一个是将时间显示出来。需要显示出正确的时间。

   由于线程之间的竞争关系,导致很多次显示时间的线程先执行,而获取时间的线程后执行,不能显示正确的时间。这个时候就可以用join,wait,notify 方法。

     1.join方法的特点:执行该方法的线程进入阻塞状态,直到调用该方法的线程结束后再继续向下执行

   显示时间的线程执行join方法,而获取时间的线程调用join方法,因此显示时间的线程会等待获取时间的线程执行完再执行,从而可以保证每次都可以获得正确的时间。

   2.对象锁调用了wait()方法会使当前持有该对象锁的线程处于线程等待状态同时该线程释放对对象锁的控制权,直到在其他线程中该对象锁调用notify()方法或notifyAll()方法时等待此对象锁的线程才会被唤醒。需要注意wait方法是一个本地方法,其底层是通过一个叫做监视器锁的对象来完成的。所以在调用wait方式时要获取到monitor对象的所有权,那如何获取monitor对象所有权?Java中只能通过Synchronized关键字来完成。

8.  Java类初始化的顺序:

   1.非继承关系中的初始化顺序:static静态代码块和静态成员 -> 普通成员 -> 构造函数执行

    2.继承的子类:父类静态代码块和静态成员 -> 子类静态代码块和静态成员 ->父类普通成员和非static块 -> 父类构造函数 -> 子类普通成员和非static块 -> 子类构造函数 。

9.  抽象类和接口:

   抽象类是用来捕捉子类的通用特性的 。它不能被实例化。抽象方法可以继承一个类和实现多个接口。子类使用extends关键字来继承抽象类。

   接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。且接口方法默认修饰符是public。你不可以使用其它修饰符。接口只可以继承一个或多个其它接口。子类使用关键字implements来实现接口。

10.  Java的final 关键字:

   1.修饰类当用final去修饰一个类的时候,表示这个类不能被继承。注意:a. 被final修饰的类,final类中的成员变量可以根据自己的实际需要设计为fianl。b. final类中的成员方法都会被隐式的指定为final方法。

   2.被final修饰的方法不能被重写:a. 一个类的private方法会隐式的被指定为final方法。b. 如果父类中有final修饰的方法,那么子类不能去重写。

   3.修饰成员变量,必须要赋初始值,而且是只能初始化一次。

Java 一些常见问题(持续更新)的更多相关文章

  1. Java名词术语---持续更新

    在看技术文档的过程中,经常会出现新的java缩写术语,很多时候都不知道它们是什么,在这里记下,持续更新. ——————————————————————————————————————————————— ...

  2. 2019春招面试高频题(Java版),持续更新(答案来自互联网)

    第一模块--并发与多线程 Java多线程方法: 实现Runnable接口, 继承thread类, 使用线程池 操作系统层面的进程与线程(对JAVA多线程和高并发有了解吗?) 计算机资源=存储资源+计算 ...

  3. 常见算法合集[java源码+持续更新中...]

    一.引子 本文搜集从各种资源上搜集高频面试算法,慢慢填充...每个算法都亲测可运行,原理有注释.Talk is cheap,show me the code! 走你~ 二.常见算法 2.1 判断单向链 ...

  4. Java基础——集合(持续更新中)

    集合框架 Java.util.Collection Collection接口中的共性功能 1,添加 booblean add(Object obj);  往该集合中添加元素,一次添加一个 boolea ...

  5. Java基础——多线程(持续更新中)

    如何建立一个执行路径呢? 通过查询API文档 java.lang.Thread类 该类的描述中有创建线程的两种方式 1.继承Thread类 (1).将类声明为 Thread 的子类 (2).该子类应重 ...

  6. 易错java知识点总结(持续更新)

    1. 2.java转义字符的理解 参考知乎大神:http://www.zhihu.com/question/29232624 正向和逆向处理转义字符 正向:把两个字符 \ n 识别为一个转义字符 ne ...

  7. Java笔记(持续更新中)

    Java语言的特点: 面向对象(封装,继承,多态) 平台无关性(JVM运行.class文件) 语言(泛型,Lambda) 类库(集合,并发,网络,IO/NIO) JRE(Java运行环境,JVM,类 ...

  8. java并发编程[持续更新]

    目录 java并发编程 1.常用类介绍 Semaphore 2.名词解释 2.1 线程安全 2.2 可重入锁和不可重入锁 java并发编程 1.常用类介绍 Semaphore Semaphore 类是 ...

  9. Java学习目录(持续更新中)

  10. Java笔记(持续更新)

    码云地址    https://gitee.com/MarkPolaris/Java_Mark

随机推荐

  1. hdu 1521 排列组合【指数型生成函数】

    根据套路列出式子:\( \prod_{i=1}^{n}\sum_{j=0}^{c[i]}\frac{x^j}{j!} \),然后暴力展开即可 #include<iostream> #inc ...

  2. P5112 FZOUTSY

    传送门 没想到这题还这能用莫队--本来看看以为复杂度会挂的-- 预处理出每个字母开头往后\(k\)个的字符串的哈希值,然后大概就是那道小z的袜子了 而且据说这题的哈希得用自然溢出 //minamoto ...

  3. Apereo CAS Server服务端搭建教程

    不说废话了,直接看搭建过程吧. 首先到下载源码,https://github.com/apereo/cas-overlay-template/tree/4.2 附上地址,本次版本为4.2,下载源码后如 ...

  4. P1223 [小数据版]边权差值最小的生成树

    这道题和最小生成树kruskal的代码几乎相同,只不过不一定是最小生成树,所以不一定从最短的边开始做生成树:所以将每一条边分别作为起点,然后枚举就行了...... #include <bits/ ...

  5. 449B

    B. Chtholly's request time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  6. websocket实现群聊

    server # @File: 群聊 from flask import Flask, render_template, request from geventwebsocket.handler im ...

  7. [洛谷p2858] 奶牛零食

    题目链接: 点我 题目分析: 这是什么,区间dp吗?怎么大佬都在说区间dp的样子 完蛋区间dp都不知道是啥quq 于是使用了玄学的姿势A过了这道题 设dp[i][j][0]表示第i天,左边选了j个,当 ...

  8. 福建工程学院第七届ACM程序设计新生赛 (同步赛)

    A.关电脑 #include<bits/stdc++.h> using namespace std; typedef long long LL; int T,h1,m1,s1,h2,m2, ...

  9. 初探Hibernate3源码--读取配置文件

    依照个人推测,要实现ORM框架,关键是如何拼凑sql语句再通过jdbc来进行对数据库的访问,另外将数据库返回的数据记录封装成对应的类也是必不可少的. 那么实现ORM框架的基本思路如下: 1,读取xml ...

  10. sql注入原理及解决方案

    sql注入原理 sql注入原理就是用户输入动态的构造了意外sql语句,造成了意外结果,是攻击者有机可乘 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的 ...