一、static

可以修饰成员变量和成员方法

关键字特点:

  随着类的加载而加载;

  优先于对象存在;

  被类的所有对象共享;

  可以通过类名直接调用;

注意事项:

  在静态方法中是没有this关键字的

  静态的方法只能访问静态的成员变量和成员方法

  静态的成员,是属于类本身的东西,是优先于对象而存在的

静态的内容存在于方法区的静态区

静态变量和成员变量的区

所属不同

  静态变量属于类,所以也称为类变量

  成员变量属于对象,所以也称为实例变量

内存中位置不同

  静态变量存储于方法区的静态区

  成员变量存储于堆内存

内存出现时间不同

  静态变量随着类的加载而加载,随着类的消失而消失

  成员变量随着对象的创建而存在,随着对象的消失而消失

调用不同

  静态变量可以通过类名调用,也可以通过对象调用

  成员变量只能通过类名调用

二、帮助文档

如何使用

1.找到文档,打开文档

2,点击索引,搜查要查询的类

3. 看在哪个包下,但凡不在java.lang包下的都需要进行导包

4.查看继承和实现关系

4,看这个类的结构

  看这个类的成员变量

  看这个类的构造方法

  看这个类的成员方法

(如果一个类没有构造方法,意味着这个类是一个工具类。特点:变量或者方法都是被static修饰)

三、代码块

顾名思意就是使用{}括起来的代码,叫做代码块,根据其定义的位置和语句格式不同,分为4种代码块:
局部代码块:定义在方法内部的代码块,叫做局部代码块,局部代码块之间的执行顺序是根据定义的上下顺序来的
构造代码快:定义在类中方法外,写的格式与局部代码块的一样,在创建对象的时候被执行,优先于构造方法执行,与构造方法的顺序无关
静态代码块:定义在类中方法外的,格式是需要使用static关键字进行修饰,只会在程序运行之前执行一次,后面不会再执行
同步代码块

四、继承

概述

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可

通过extends可以实现类与类的继承

  class 子类名 extends 父类名{}

单独的这个类可以成为父类,基类或者超类;这多个类可以称为子类或者派生类

有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的继承上,还可以定义自己的成员。

好处

  提高了代码的复用性:多个类的相同成员可以放到同一个类中

  提高了代码的维护性:如果功能的代码需要修改,修改一处即可

  让类与类之间产生了关系,是多态的前提:这也是继承的一个弊端,类的耦合性很强

特点(注意事项)

1、java中的类与类之间不能进行多继承,只能进行单继承,但是可以进行多层继承,形成继承体系
2、子类只能继承父类中所有非私有的成员(成员变量和成员方法)
3、子类无法继承父类中的构造方法,但是要想初始化子类,必须先初始化父类(指的是执行一次父类中任意一个构造方法)
4、不要为了部分功能去使用继承
5、什么时候使用继承?满足英语中的 is a的关系

继承中成员变量的关系(就近原则)

在子类方法中访问一个变量

首先在子类局部范围找

然后在子类成员范围找

最后在父类成员范围找

如果都没找到就报错

this和super的异同之处

  相同:使用语句都相似

    访问成员变量:this.成员变量  super.成员变量

    访问成员方法: this.成员方法(...)    super.成员方法(...)

    访问构造方法:this(...)   super(...)

  不同:this代表的是当前类的对象   super代表的是直接父类的引用

继承中构造方法的关系

  子类通过super去显示调用父类其他的带参的构造方法

  子类通过this其调用本类的其他构造方法

    (本类的其他构造方法也必须首先访问了父类的构造)

  一定要注意

     super(...)或者this(...)必须出现在第一条语句上

     否则就会有父类数据的多次初始化

继承中成员方法的关系

方法的重写:在继承关系中,子类的方法的声明(返回值类型,方法名,参数列表)与父类的声明都一样,只是实现不一样,这样的现象叫做方法的重写

      判断一个方法能不能重写,可以在方法的上边加上一个注解@override,如果加上不报错,就说明可以重写

面试题:重写与重载的区别?Override与Overload的区别?
方法的重写:在继承关系中,子类中的方法的声明(返回值类型,方法名,参数列表)与父类中的方法声明都一样,只是实现不一样,这样的现象,叫做方法的重写。
方法的重载:在同一个类中,方法的方法名相同,参数列表不同,这个现象叫做方法的重载,与返回值无关。

重写的注意事项:

  1.父类中私有的方法不能被重写,因为私有的方法子类根本不能继承

  2.子类重写父类方法时,权限不能更低,推荐除了特殊要求外,子类重写父类的方法要保持一致

    顺序:public protected 默认 private

  3.父类静态方法,子类无法重写

final关键字

可以修饰类,成员变量,成员方法

修饰类,类不能被继承

修饰变量,变量就变成了常量

修饰方法,方法不能被重写

final修饰局部变量

  在方法内部,该变量不可以被改变

  在方法声明上,基本类型是值不能被改变

          引用数据类型是地址值不能被改变

  final修饰变量的初始化时机:在对象构造完毕前即可

五、多态

概述

某一个事物,在不同时刻表现出来的不同的状态

前提

有继承关系

有方法重写

有父类引用指向子类对象

多态访问成员特点

成员变量

  编译看左边,运行看左边

成员方法

  编译看左边,运行看右边

静态方法

  编译看左边,运行也看左边

好处

提高了程序的维护性(由继承保证)

提高了程序的扩展性(由多态保证)

弊端

无法使用子类特有的成员方法

多态的转型问题

向上转型

  从子到父

  父类引用指向子类子类对象

向下转型

  从父到子

  父类引用转为子类对象

六、抽象类

概述

一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。

抽象类不是具体的类,关键词abstract

可以修饰类和方法

特点

必须用abstract关键词修饰  格式:abstract class 类名{}

               public abstract void eat()

抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类

抽象类不能实例化

  所以如果想实例化的话,要按照多态的形式,有具体的子类实例化。其实这也是多态的一种,抽象类多态

抽象类的子类,要么是抽象类,要么重写抽象类中的所有抽象方法

注意事项

1.修饰方法的时候,方便变为抽象方法,不能有具体的实现,连大括号都不能有

2.当抽象类继承抽象类的时候,可以不用重写抽象方法,也可以选择重写方法

成员特点

成员变量

  可以是变量

  也可以是常量

构造方法

  有构造方法,但不能实例化

  构造方法的作用:用于子类访问父类数据的初始化

成员方法

  可以使抽象方法,限定子类必须完成某些动作

  也可以有非抽象方法 ,提高代码服用性

一个类没有抽象方法,也可以被定为抽象类

abstract不能和哪些关键词共存

  不能与private关键字共存

  不能与static共存

  不能与final共存

七、接口

概述

为了体现事物功能的扩至性,提供了接口来定以额外的功能

可以将接口看作是一个特殊的类,因为接口也会被编译成一个class文件 

特点

用关键词interface表示

  interface 接口名{}

类实现接口用implements表示

  格式:class 类名 implements 接口名{}

接口不能实例化

  如何实例化:按照多态的方式,由具体的子类实例化。其实也是多态的一种,接口多态。

接口的子类

  要么是抽象类

  要么重写接口中的所有抽象方法  

成员特点

    成员变量:接口中只允许定义常量,默认存在修饰符 public static final

    构造方法:接口中不存在构造方法,不能进行实例化

    成员方法:接口中只允许定义抽象方法,方法会默认添加修饰符 public abstract 

注意事项

  类和接口的关系是实现关系

  具体的类实现一个接口的时候,必须要实现接口中所有抽象方法

类与类,类与接口,接口与接口之间的关系

类与类:存在继承关系,只能单继承,不能多继承,但可以多层继承,形成继承体系

类与接口:存在实现关系,implements,可以一次性实现多个接口

接口与接口:存在继承关系,可以存在多继承

抽象类和接口的区别

成员区别

抽象类:变量,常量;有抽象方法;抽象方法,非抽象方法

接口:常量;抽象方法

设计理念区别

抽象类:被继承体现的是:“is a”的关系。共性功能。

接口:被实现体现的是:“like a”的关系。扩展功能。

八、形式参数和返回值问题

形式参数类型的问题

基本数据类型:当基本数据类型作为方法的参数类型的时候,将来调用时传入的是具体的值

引用数据类型
    数组:当数组为方法的参数类型的时候,将来调用时传入的是数组的地址值
    :当你看到一个类作为方法的参数类型的时候,将来调用时需要传入该类或者该类的子类对象
    抽象类:当你看到抽象类作为方法的形式参数类型的时候,将来调用时需要传入具体的子类对象
    接口:当你看到接口作为方法的形式参数类型的时候,将来调用时需要传入实现该接口的具体子类的对象

当类作为方法的参数类型:

当抽象类作为方法的形式参数类型:

当接口作为方法的形式参数类型

返回值类型的问题

基本数据类型:当基本数据类型作为方法的返回值类型的时候,将来方法返回的是具体的值

引用数据类型
    数组:当数组为方法的返回值的时候,将来方法返回的是数组的地址值

    :当你看到一个方法的返回值类型是一个类的时候,方法内部应该返回该类的对象或者该类的子类对象

    抽象类:当你看到一个方法返回值类型是一个抽象类的时候,方法内部应该返回该抽象类的具体实现子类对象

    接口:当你看到一个方法返回值类型是一个接口的时候,方法内部应该返回实现该接口的具体子类对象

方法的返回值类型是一个类:

方法的返回值类型是一个抽象类:

方法的返回值类型是一个接口

九、包

概述

其实就是文件夹

作用:对类进行分类管理

基本划分:按照功能划分或者按照角色划分

定义及注意事项

格式

  package 包名;

注意事项

  package语句必须是程序的第一条可执行代码

  package语句在一个java文件中只能有一个

  如果没有package,默认表示无包名

导包格式

  import 包名;

  注意

    这种方式导入是到类的名称  

    虽然最后可以写*,但是不建议

十、权限修饰符

类及其组成可以用的修饰符:

十一、内部类

概述

将类定义在一个类里边

根据定义位置的不同,分为两种内部类

  1.成员内部类(将类定义在类中成员位置上)

  2.局部内部类(将类定义在类中成员方法内部)

访问特点

  内部类可以直接访问外部类的成员,包括私有

  外部类要访问内部类的成员,必须创建对象

成员内部类

  创建对象

  外部类名.内部类名 对象名 = 外部类对象.内部类对象

成员内部的常见修饰符

  private 为了保证数据的安全性

   static 为了让数据访问更方便

    被静态修饰的成员内部类只能访问外部类的静态成员

    内部类被静态修饰后的方法、

      静态方法

      非静态方法

面试题

局部内部类

  可以直接访问外部类的成员

  可以创建内部类对象,通过对象调用内部类方法,来使用局部内部类功能

  局部内部类访问局部变量的注意事项:

    必须被final修饰

    因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。

    为了让数据还能继续被使用,就用final修饰。这样在堆内存中存储的其实是一个常量值。

十二、匿名内部类

没有名字的内部类

匿名内部类的定义格式

  new 类名/抽象类名/接口名(){

    重写方法

  }

前提:存在一个类或者接口

    这里的类可以是具体类也可以是抽象类

本质:是一个继承了类或者实现了接口的子类匿名对象  

匿名内部类的第二种用法:将匿名内部类作为返回值返回i

nterface Inter2{

void show();

}

class Inter2Demo{
public Inter2 fun(){
//使用匿名内部类改写
return new Inter2() {
@Override
public void show() {
System.out.println("");
}
};
}
}

public class NIMingInnerClassDemo2 {
public static void main(String[] args) {
Inter2Demo inter2Demo = new Inter2Demo();
Inter2 inter2 = inter2Demo.fun();
inter2.show();
}
}

面试题



Java——面向对象(static关键字开始)的更多相关文章

  1. Java面向对象-static关键字、静态方法与普通方法、静态成员变量

    Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...

  2. Java面向对象--static关键字

  3. JAVA面向对象-----final关键字

    JAVA面向对象-–final关键字 1:定义静态方法求圆的面积 2:定义静态方法求圆的周长 3:发现方法中有重复的代码,就是PI,圆周率. 1:如果需要提高计算精度,就需要修改每个方法中圆周率. 4 ...

  4. JAVA面向对象-----super关键字

    JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...

  5. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  6. Java的static关键字

    本文参考:Java的static关键字 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少对象,甚至根本就不创建任何对象.另一种情形是,希 ...

  7. java的static关键字 – Break易站

    本文内容来自:java的static关键字 – Break易站 (原文网站阅读体验更好) 通过static关键字可以满足两方面的需要.一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多 ...

  8. 面向对象-static关键字实战案例

    面向对象-static关键字实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.static关键字概述 1>.static的功能 static关键字用于修饰成员变量和 ...

  9. Java 静态static关键字,main函数,对象的初始化过程,对象调用成员,单例模式的设计,静态代码块(6)

    Java 静态static关键字,静态代码块详情参考:static的使用原理讲解http://www.cnblogs.com/itcqx/p/5519464.html main函数: java Mai ...

  10. 面试官:兄弟,说说Java的static关键字吧

    读者乙在上一篇我去系列文章里留言说,"我盲猜下一篇标题是,'我去,你竟然不知道 static 关键字'".我只能说乙猜对了一半,像我这么有才华的博主,怎么可能被读者猜中了心思呢,必 ...

随机推荐

  1. .Net Web API 005 Controller上传小文件

    1.附属文件对象定义 一般情况下,系统里面的文件都会附属一个对象存在,例如用户的头像文件,会附属用户对象存在.邮件中的文件会附属邮件存在.所以在系统里面,我们会创建一个附属文件对象,命名为Attach ...

  2. [elasticsearch]部署安装单节点和集群

    单点安装 进入安装目录:cd /usr/local 获取安装包: wget http://172.29.50.31/download/ProgramPackage/elasticsearch/elas ...

  3. Programming abstractions in C阅读笔记: p118-p122

    <Programming Abstractions In C>学习第49天,p118-p122,总结如下: 一.技术总结 1.随机数 (1)seed p119,"The init ...

  4. [ABC284F] ABCBAC

    2023-01-09 题目 题目传送门 翻译 翻译 难度&重要性(1~10):2.5 题目来源 AtCoder 题目算法 Z函数,KMP,字符串Hash 解题思路 对于一个 \(f_S\),我 ...

  5. 行行AI人才直播第17期:无界AI联合创始人马千里《AIGC,比生产力还多》

    谁也没有想到,短短几个月内,AI就在各行各业掀起了一阵狂风暴雨.ChatGPT.Stable Diffusion.Midjourney--AI已经变得十八般武艺样样精通,不仅能够高效率完成很多日常工作 ...

  6. 《SQL与数据库基础》09. 事务

    @ 目录 事务 简介 操作 方式一 方式二 四大特性(ACID) 并发事务问题 事务隔离级别 本文以 MySQL 为例 事务 简介 事务是一组操作的集合,它是一个不可分割的工作单位.事务会把所有的操作 ...

  7. Python图片与Base64相互转换

    import base64 #必须的 pic=open("img.png","rb")#读取本地文件 pic_base=base64.b64encode(pic ...

  8. 图解Spark Graphx基于connectedComponents函数实现连通图底层原理

    原创/朱季谦 第一次写这么长的graphx源码解读,还是比较晦涩,有较多不足之处,争取改进. 一.连通图说明 连通图是指图中的任意两个顶点之间都存在路径相连而组成的一个子图. 用一个图来说明,例如,下 ...

  9. 关闭Google"阻止了登录尝试"方法, 其他设备也能登录Gmail等谷歌服务

    首先登录谷歌账户,  访问 https://www.google.com/settings/security/lesssecureapps 把"不够安全的应用的访问权限" 启用打勾 ...

  10. 了解JAVA内存模型(JMM)

    1.概述 我们常说的JMM指的是Java内存模型(Java Memory Model,JMM),主要用于控制Java程序解决线程间如何通信和数据同步,JMM规范了多线程访问共享内存时的 可见性.有序性 ...