java 类、方法、代码块修饰式关键字总结
super 关键字
this和super的区别
this代表当前对象,super可以理解为父类对象
既然super理解为一个父类对象,那么super应该可以用访问父类的成员
this的主要作用来帮助初始化本类成员(当外界传入的变量名和本类变量名相同的时候)
super的主要作用帮助我们初始化父类继承过来的成员
任何一个本类成员都默认隐含了一个this
任何一个本类的成员同时也可以使用super访问父类的成员
访问成员的区别
成员变量
this.成员变量
super.成员变量
super 不能访问父类私有成员
成员方法
this.成员方法
super.成员方法
构造方法
this(参数列表)
super(参数列表)
任何一个构造方法都默认会在构造方法第一句写上super,访问父类的无参构造方法
Constructor call must be the first statement in a constructor
super和this访问构造方法必须出现在构造方法的第一句
this和super在访问构造方法的时候,二者不能共存
static静态的上下文中不能出现this和super
this关键字
this:代表当前类的对象引用,在内存中,他和普通引用一样也指向堆区的空间,在创建对象的时候,也创建一个this引用指向同一个堆区的空间。
this特点
每个类的每个非静态方法 (没有被static修饰) #00BCD4 都会隐含一个this引用名称,它指向调用这个方法的对象。
当在方法中使用本类的属性时,都会隐含地使用this名称,当然也可以明确指定。
this可以看作是一个变量,它的值就是当前对象的
this使用场景
当局部变量和成员变量同名时使用this关键字
this关键字可以访问本类构造函数
static关键字
static修饰的变量叫做静态变量/ 共享变量 / 类变量
例子
通过静态修饰方法最大的好处? -- 方便调用 例如Math类
开发中经常会看到类似于Math类这样的工具类
以后我们也会编写自己的工具类,以后工具类的包名一般叫做 com.sxt.utils DBUtils NetUtils DBTools
访问权限修饰符
public | protected | default | private | |
---|---|---|---|---|
同一类中 | 是 | 是 | 是 | 是 |
同一包中的子类或其他类 | 是 | 是 | 是 | 否 |
不同包中的子类 | 是 | 是 | 否 | 否 |
不同包中的其他类 | 是 | 否 | 否 | 否 |
特点
1.静态变量属于某个类,而不属于某个具体的对象
2.只有静态才能访问静态,非静态变量不能够出现静态方法中
3.访问静态成员的格式
类名.成员变量
类名.成员方法
4.静态环境下不能够出现this和super关键字
5.static不仅能够修饰成员变量,成员方法,还能够修饰类,修饰类的时候必须内部类(后面讲解)
6.static还可以修饰代码块
7.静态代码块一般都是用来初始化静态成员
8.静态方法无法被重写,所以static关键字不能和abstract抽象方法一起使用(抽象方法必须重写)。
总结:
1.访问权限修饰符有四个
2.访问权限修饰符可以修饰成员变量,成员方法,还可以修饰类(只有public可以)
在这里需要注意,其实protected/private也可以修饰类,但是必须是内部类 #03A9F4
四个修饰符的特点
1.public修饰的成员对一切类可见
2.protected修饰的成员对子类可见
3.default修饰的成员仅对同包下可见
4.private修饰的成员仅对本类可见
访问权限修饰符的宽严关系
public > protected > default > private
Java当中封装就是通过访问权限修饰符来实现的
封装: 就是屏蔽内部的成员,而屏蔽内部的成员是通过访问权限修饰符来控制的
final关键字
final表示最终的,不可以改变的
在java里面修饰词 final修饰过的变量的值是不可以被修改的。在外部声明的变量在这个类一杯调用就初始化了,如果你没有对final修饰过的变量赋值,编译器初始化这个类的时候发现一个不可被修改的变量没有值,编译器必然报错。但是在方法内如果没有调用这个方法,就不会初始化这个变量,编译器就不会报错,在方法里可以先声明后赋值
用法
自定义常量
final修饰的变量表示常量
public static final int GAME_START = 0;
public static final int GAME_END = 1;
public static final int GAME_RUNNING = 2;
自定义常量提高了程序的可读性
常量不能够被二次赋值
final修饰类
final修饰类不能够被子类继承
final修饰成员变量
因为成员变量默认值是0,不能够被二次赋值
因为常量是在常量池中,不在堆区,所以没有默认值
final修饰局部变量
局部变量没有给默认值,所以不能被二次赋值
final修饰成员方法
成员方法不能够被子类重写
java 类、方法、代码块修饰式关键字总结的更多相关文章
- Java 基础 面向对象之关键字内部类代码块修饰符
final final概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承,或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后 ...
- this、static、main方法、静态代码块、final关键字、Runtime类、Cloneable类、类成员的访问控制权限、异常体系
this表示当前对象,用在方法内部,当某对象调用该方法时,该方法中的this就代表调用该方法的对象: static关键字: 修饰类属性后,该属性就成为该类所有实例的公共属性,修改该属性值,所有的实例的 ...
- java 为什么wait(),notify(),notifyAll()必须在同步(Synchronized)方法/代码块中调用?
wait()作用:该方法用来将当前线程置入休眠状态,直到接到通知或被中断为止.条件:在调用wait()之前,线程必须要获得该对象的对象级别锁,即只能在同步方法或同步块中调用wait()方法.进入wai ...
- 千万别在Java类的static块里写会抛异常的代码!
public class Demo{ static{ // 模拟会抛异常的代码 throw new RuntimeException(); } } 如果你在Java类的static块里写这样会抛异常的 ...
- Java之同步代码块处理继承Thread类的线程安全问题
package com.atguigu.java; /** *//** * 使用同步代码块解决继承Thread类的方式的线程安全问题 * * 例子:创建三个窗口卖票,总票数为100张.使用继承Thre ...
- 【Java基础】2、Java中普通代码块,构造代码块,静态代码块区别及代码示例
Java中普通代码块,构造代码块,静态代码块区别及代码示例.Java中普通代码块,构造代码块,静态代码块区别及代码示例 执行顺序:静态代码块>静态方法(main方法)>构造代码块>构 ...
- Java 中静态代码块初始化问题测试
Java 中静态代码块初始化问题测试 原创 情况一:变量是 static final 修饰的"编译期常量",如 public static final String a = &qu ...
- Java的静态代码块是否会在类被加载时自动执行?
JAVA静态代码块会在类被加载时自动执行? 一.先看Java静态方法,静态变量 http://www.cnblogs.com/winterfells/p/7906078.html 静态代码块 在类中, ...
- Java类中代码的执行顺序 静态代码块>构造代码块>构造方法
一:静态代码块 注意是代码块,不是静态函数.函数要调用才执行,代码块加载就执行,一般是静态变量的声明与初始化.被static修饰的代码块(赋值.输出操作等).类中静态语句块仅在类加载时被执行一次 如 ...
随机推荐
- Servlet 文件上传
Servlet 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档. 本文使用到的文件有: 创建一个文件上传表单 下面的 HTML 代码 ...
- css样式兼容各个浏览器时的部分总结
[本文基本是在网络转发过来的,网站就忘记了,这文本都是保存在自己电脑本地的,还有些自己添加了些内容,这内容还会有不断的完善和更行的] 什么是浏览器兼容:当我们使用不同的浏览器(Firefox IE7 ...
- 记录C#中的扩展方法
C#中的扩展方法. 系统自带的类型,我们无法去修改: 修改源代码需要较大的精力,而且可能会带来错误: 我们只是需要一个或者较少的几个方法,修改源代码费时费力: 被扩展的类是sealed的,不能被继承: ...
- css学习_css布局案例
1.中间栏先加载 !!!(若不是这个条件的话 ,那可以用 calc 或者flex布局来实现 中间栏自适应,左右栏定宽) 2.中间栏自适应 width:100% 3.左右栏固定宽 左中右 ...
- 解决 ASP.NET Core 自定义错误页面对 Middleware 异常无效的问题
我们基于 Razor Class Library 实现了自定义错误页面的公用类库(详见之前的随笔),但是在实际使用时发现如果在 middleware 中发生了异常,则不能显示自定义错误页面,而是返回默 ...
- Linux系统的命令应该如何记?
Linux入门篇: 很多刚入门的同学,就像无头的苍蝇一样,到处找视频.书籍.网站帖子之类的学习方式,视频虽然讲得详细,但是时间的投入也是巨大的,播放时间,练习时间,加起来很吓人,其实啊很少有人能坚持把 ...
- Spring Security Session并发控制原理解析
当使用spring security 的标签,如下,其中<sec:session-management>对应的SessionManagementFilter.从名字可以看出,这是一个管理S ...
- OO第一次博客作业--第一单元总结
OO第一单元总结 面向对象设计与构造的第一单元,对“面向对象”的概念还根本不理解不熟悉,只觉得需要“分模块”,但不知道怎么分,分多少模块,怎么根据需要的模块的功能建立类.学习的进度又太慢,根本跟不上出 ...
- SQL的几种连接:内连接、外连接(左连接、右连接、全连接)
表结构见前面博客 1.内连接 1.1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列. 三种写法: select * from t ...
- 线性表->应用->一元多项式
文字描述 在数学上,一个一元多项式可以按升幂写成如下形式. 它由n+1个系数唯一确定.因此,在计算机里,可以用一个线性表P来表示,P中每一项的指数i隐含在其系数pi的序号里. 但是在通常的应用中, ...