• 继承

    关键字extends

    继承是为了不同的实现(龙生九子,各不相同)

    单继承,一个类最多只能有一个父类

    除了私有的外,子类可以访问父类的方法、属性。

    new过程中,父类先进行初始化,可通过super调用父类相应的构造方法,没有使用super的情况下,调用父类的默认构造方法

    防止继承使用final关键字
  • 多态

    子类对象可以赋值给父类引用变量;但是执行的时候调用的却是子类的实现。
  • 重载与重写

    重写发生在子类,主要是为了和父类不一样的实现;

    重载发生在方法之间,主要是为了适应不同的入参类型、数量。

    重写发生在编译期间,而重载发生在运行期间。
  • 类加载的过程

    动态加载,用到加载,加载的时候,如果父类已经加载,则直接加载;否则先加载父类。
  • java内存

    内存分为栈和堆,栈存放函数的局部变量,而堆存放动态分配的对象,还有一个内存区,存放类的信息,这个区在Java中称为方法区。例如A a = new A(); new A() 出的对象在堆,而A a 变量存在栈;A 的一些信息 方法什么的都在方法区。

    JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存空间,这就是我们今天要讨论的核心,即字符串池(String Pool)。字符串池由String类私有的维护
  • 接口

    关键字interface,implements ;可以实现多个接口,使用逗号

    接口里的方法名都是public的,写不写修饰符都一样。

    Java8之前不能写方法体。Java8 有个例外 可以使用default关键字写方法体;
public interface BaseService {
default void sayHello(){
System.out.println("helo");
}
}
public class BaseServiceImpl implements BaseService { public static void main(String[] args) {
BaseService baseService = new BaseServiceImpl();
baseService.sayHello();
}
}
  • 用来判断一个对象是否实现了某接口?

    java使用instanceof,js 使用typeof
  • 抽象类

    关键字 abstract ,可以被继承,没有构造函数。

    通常抽象类搭配接口使用,抽象类提供默认实现,类似与java8之后接口的方法声明用default声明写方法体一样,而接口声明功能;

    例如:
public interface BaseService {
void sayHello();
}
/**
* 默认实现抽象类
*/
public abstract class MyService {
public void sayHello(){
System.out.println("my hello");
}
}
public class BaseServiceImpl extends MyService implements BaseService { public static void main(String[] args) {
BaseService baseService = new BaseServiceImpl();
baseService.sayHello();
}
}
  • 异常

    所有的异常类都有一个父类Throwable,Throwable 两大子类(得力干将) Error\Exception;如下:
public class MyException {
public static void main(String[] args) {
int s = testExcep();
System.out.println("返回值:"+s);
}
private static int testExcep() {
int a = 0;
try {
a = 9/0;
//return a; //返回值为9,去掉return ,a的值在finally 里被修改,如果finally 里有return则返回8,没有return 就在这里直接返回,除非产生异常,没有执行return
}catch (Exception e){
System.out.println(e.getMessage());
a= 7;
return a; //catch 里的return会 finally 里的return 挤掉
}finally {
System.out.println("执行");
a = 8;
//return a; //无论之前有没有return ,都会执行finally里的return;如果finally 里没有return ,这return 在哪,就返回最近的值;
}
return a;
}
}

Try(这里创建的对象自动关闭,比如inputStream.){..}catch{...}finally{释放资源}

  • String ,StringBuffer,StringBuilder

    String类也是不可变类,即对象一旦创建,就没有办法修改了。String类也声明为了final,不能被继承,内部char数组value也是final的,初始化后就不能再变了

    https://www.cnblogs.com/cold-windy/p/11514977.html 讲字符串的存储

    StringBuffer线程安全的,而StringBuilder 是线程不安全的,底层实现都是char[] ,StringBuffer之所以线程安全,是因为重写的append()方法,ensureCapacity()等加了synchronized:如下
@Override
public synchronized StringBuffer append(CharSequence s) {
toStringCache = null;
super.append(s);
return this;
}

底层实现是char[],初始容量16;

StringBuilder线程不安全,因为没加锁。

  • +和+= 的区别

    +和+= 都是java编译器支持的运算符,会转化成StringBuilder进行处理,所以拼接底层都是使用append()方法。
  • 既然+ 或者是+= 都是通过StringBuilder实现的,那么还有必要去使用StringBuilder吗?

    如果只是简单的拼接,使不使用StringBuilder差别不大。但是如果数量大且循环拼接的话,差距就很明显,因为使用StringBuilder就只需要一次对象,而如果使用+ 或者+= 的话,等同于每循环一次,编译器每遇到一个 + 就new StringBuiler(),所以会耗费大量时间。
  • 说到string 就必须谈的equals(str)以及==?

    equals 主要用来比较内容,如果是引用类型的话,还需要比对hashCode,而 == 主要比较基础数据类型(比的是内存地址)。

    hashCode和equals方法联系密切,对两个对象,如果equals方法返回true,则hashCode也必须一样。反之不要求,equal方法返回false时,hashCode可以一样,也可以不一样,但应该尽量不一样。hashCode的默认实现一般是将对象的内存地址转换为整数,子类如果重写了equals方法,也必须重写hashCode。
  • 字节编码
Charset charset = Charset.forName("utf-8");//import java.nio.charset.Charset;

[java基础]复习 java三大特性,异常,接口,String的更多相关文章

  1. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  2. Java基础—面向对象的三大特性

    面向对象有三大特性分别是继承.封装和多态. (1)继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类 ...

  3. 6.JAVA基础复习——JAVA中文档注释与帮助文档的生成

    java中的文档注释:用于说明该类的功能作用方便他人使用关键词前需要加@符 用于类的注释 @author name 作者 @version v1.0 版本 …… 用于函数的注释 @param para ...

  4. 3.JAVA基础复习——JAVA中的类与对象

    什么是对象: 就是现实中真实的实体,对象与实体是一一对应的,现实中每一个实体都是一个对象在. JAVA中的对象: Java中通过new关键字来创建对象. 类: 用JAVA语言对现实生活中的事物进行描述 ...

  5. Java基础复习--java.util.Timer定时任务

    在java中,Timer类主要用于定时性.周期性任务 的触发,这个类中有两个方法比较难理解,那就是schedule和scheduleAtFixedRate方法,在这里就用实例分析一下. (1)sche ...

  6. 7.JAVA基础复习——JAVA中的设计模式单例模式

    设计模式:是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 总体来说设计模式分为23种三大类: 创建型模式,共 ...

  7. 5.JAVA基础复习——JAVA中的static关键字作用与用法

    static关键字: 特点: 1.static是一个修饰符,用于修饰成员.(成员变量,成员函数)static修饰的成员变量 称之为静态变量或类变量. 2.static修饰的成员被所有的对象共享. 3. ...

  8. 4.JAVA基础复习——JAVA中的构造函数与this关键字

    构造函数:构建创造对象时调用的函数 特点: 1.函数名与类名相同. 2.不用定义返回值类型. 3.没有具体的返回值. public class Demo { private int age; priv ...

  9. java基础(二)-----java的三大特性之继承

    在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...

随机推荐

  1. Java编程思想 笔记

    date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...

  2. react-native 常见问题

    1.webpack使用babel-loader后编译报错 报错ERROR in ./entry.js Module build failed: SyntaxError: /Users/yixin/De ...

  3. Mybatis---06Mybatis配置文件浅析(四)

    参考链接:深入理解Mybatis插件开发 1.plugins:与其称为Mybatis插件,不如叫Mybatis拦截器,更加符合其功能定位,实际上它就是一个拦截器,应用代理模式,在方法级别上进行拦截. ...

  4. Rancher 2.5特性解读丨更简单友好的API和Dashboard

    本文来自Rancher Labs 关注我们,看K8S干货教程 作者简介 张智博,Rancher中国研发与产品总监.7年云计算领域经验,一直活跃在研发一线,经历了OpenStack到Kubernetes ...

  5. uniapp swiper高度自适应问题

    这里的话是想做一个比较常见的左右滑动更改tab的效果,引用了uview-ui中的u-tabs-swiper组件,需要结合swiper组件来使用 先来讲下主体思路:每个tab页(swiper-item) ...

  6. 初识ABP vNext(12):模块的独立运行与托管

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 模块运行 动态 C# API 客户端 最后 前言 很久没更新这个系列...之前的章节中讲到ABP的模块是可以独立运行的 ...

  7. ThreadLocal内存泄漏需要注意的

    前段时间在网上看到了一篇关于ThreadLocal内存泄漏的文章 于是个人也研究了下ThreadLocal 对象,其原理是: ThreadLocal 定义的变量值 会存储在当前线程的一个map集合中 ...

  8. python gunicorn详解

    Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server.和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点. gunicorn 安装 ...

  9. 怎么购买合适的4G DTU

    4G DTU指的是采用FDD-LTE或者TD-LTE的4G网络实现将是本地串口数据进行无线长距离数据传输,和远程公网服务器进行数据交互,主要用于远程数据采集和远程控制项目.在购买之前,也要对4G DT ...

  10. c100k

    sysctl -w fs.file-max=10485760 #系统允许的文件描述符数量10msysctl -w net.ipv4.tcp_rmem=1024 #每个tcp连接的读取缓冲区1k,一个连 ...