JavaSE 最easy出错的几个简单的问题
案例1.
package cn.itcast.oop; public class ThisDemo {
public static void main(String[] args) {
Student s=new Student();
s.setName("李卫康");
s.setAge(22);
String name=s.getName();
int age=s.getAge();
System.out.println("学生的姓名是:"+name+" 学生的年龄是:"+age);
}
}
class Student{
private String name;
private int age;
public String getName() {
return name;//这里默认省略了this,实际上是this.name
}
public void setName(String name) {
name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
age = age;
}
}
这段代码非常简单,可是非常easy出错!出错的关键点就在于this.
执行结果:
为什么会这样呢?为什么打印结果不是-->学生的姓名是:李卫康 学生的年龄是:22
案例2.
package cn.itcast.oop; public class StudentDemo {
public static void main(String[] args) {
Person s=new Person();
}
}
class Person{
private String name="林青霞";
private int age=27;
public Person(){
name="刘毅";
age=30;
} }
Person s=new Person();做了哪些事情
A:把Student.class文件载入到内存
B:在栈内存中给s变量开辟一个空间
C:在堆内存中为人类对象申请一个空间
D:给成员便令进行默认初始化.null 0
E:给成员变量进行显示 初始化。林青霞,27
F:通过构造方法给成员变量进行初始化 刘毅。30
G:数据初始化完成,然后把堆内存的地址值赋值给栈内存的s变量
3.继承概述
A:java仅仅支持类的单继承不支持类的多继承
B:子类仅仅能继承父类全部非私有的成员(成员方法和成员变量)
C:子类不能继承父类的构造方法,可是能够通过super(立即讲)keyword去訪问父类构造方法。
D:子类中的成员变量和父类中的成员变量名称一样,
在子类方法中訪问一个变量的查找顺序:
a:在子类方法的局部范围找,有就使用
b:在子类的成员范围找,有就使用
c:在父类的成员范围找,有就使用
d:假设还找不到。就报错。
E:this代表本类相应的引用。super代表父类存储空间的标识(能够理解为父类引用,能够操作父类的成员)
F:继承中构造方法的关系
子类中全部的构造方法默认都会訪问父类中空參数的构造方法:由于子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完毕父类数据的初始化。
注意:子类每个构造方法的第一条语句默认都是:super();
G:假设父类没有无參构造方法,那么子类的构造方法会出现什么现象呢?报错。
怎样解决呢?
1):在父类中加一个无參构造方法
2):通过使用superkeyword去显示的调用父类的带參构造方法
3):子类通过this去调用本类的其它构造方法,子类中一定要有一个去訪问了父类的构造方法,否则父类数据就没有初始化。
注意事项:
this(...)或者super(...)必须出如今第一条语句上。
假设不是放在第一条语句上,就可能对父类的数据进行了多次初始化,所以必须放在第一条语句上。
H:继承中成员方法的关系:1):子类中的方法和父类中的方法声明不一样,这个太简单。2):子类中的方法和父类中的方法声明一样,这个该怎么玩呢?
通过子类对象调用方法:
a:先找子类中。看有没有这种方法,有就使用
b:再看父类中,有没有这种方法。有就使用
c:假设没有就报错。
I:方法重写的注意事项
1):父类中私有方法不能被重写-->由于父类私有方法子类根本就无法继承
2):子类重写父类方法时。訪问权限不能更低-->最好就一致
3):父类静态方法,子类也必须通过静态方法进行重写
事实上这个算不上方法重写。可是现象确实如此,至于为什么算不上方法重写,多态中我会讲
子类重写父类方法的时候,最好声明一模一样。
例题:
class Fu {
static {
System.out.println("静态代码块Fu");
} {
System.out.println("构造代码块Fu");
} public Fu() {
System.out.println("构造方法Fu");
}
} class Zi extends Fu {
static {
System.out.println("静态代码块Zi");
} {
System.out.println("构造代码块Zi");
} public Zi() {
System.out.println("构造方法Zi");
}
} class ExtendsTest2 {
public static void main(String[] args) {
Zi z = new Zi();
Zi z2 = new Zi();
}
}
运行结果:
看程序写结果:
A:一个类的静态代码块,构造代码块,构造方法的运行流程
静态代码块 > 构造代码块 > 构造方法
B:静态的内容是随着类的载入而载入
静态代码块的内容会优先运行
C:子类初始化之前先会进行父类的初始化
结果是:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
经典面试题:
class X { X() {
System.out.print("X");
}
Y b = new Y();
} class Y {
Y() {
System.out.print("Y");
}
} public class Z extends X { Z() {
//super
System.out.print("Z");
}
Y y = new Y();
public static void main(String[] args) {
new Z();
}
}
记住一句话:先初始化父类数据,再初始化子类数据
因此运行流程为:依据初始化的顺序:先默认初始化,显示初始化,构造初始化
1.先初始化父类class X:运行成员变量显示初始化Y y=new Y();因此调用Y的构造函数打印Y
2.父类的构造方法初始化,运行构造方法中的代码打印X
3.子类进行初始化Class Z:运行成员变量初始化Y y=new Y()因此调用Y的构造方法打印Y
4.子类的构造方法初始化:运行构造方法中的代码打印Z
结果为:YXYZ
debug模式:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
案例:
package cn.itcast.extend; public class Demo {
public static void main(String[] args) {
Zi z=new Zi();
z.show();
}
}
class Fu{
int num=10;
public void show(){
System.out.println(num);
}
}
class Zi extends Fu{
int num=20;
public void show(){
System.out.println(num);
}
}
结果是毋容置疑的:20
去掉子类的show方法
package cn.itcast.extend; public class Demo {
public static void main(String[] args) {
Zi z=new Zi();
z.show();
}
}
class Fu{
int num=10;
public void show(){
System.out.println(num);
}
}
class Zi extends Fu{
int num=20;
}
答案是:10
为什么呢:由于子类中找方法show()没有找到就去父类中找.
JavaSE 最easy出错的几个简单的问题的更多相关文章
- java几个easy出错的小程序
把基本知识过了一遍,发现了几个自己easy 出错的小程序,记录下来.. .. 1.关于try-catch异常 2,JAVA中的自省机制 3.有继承关系的类中静态函数 1,关于try-catch异常 p ...
- POJ 2826 An Easy Problem?!(线段交点+简单计算)
Description It's raining outside. Farmer Johnson's bull Ben wants some rain to water his flowers. Be ...
- 自己动手写处理器之第一阶段(3)——MIPS32指令集架构简单介绍
将陆续上传本人写的新书<自己动手写处理器>(尚未出版).今天是第四篇.我尽量每周四篇 1.4 MIPS32指令集架构简单介绍 本书设计的处理器遵循MIPS32 Release 1架构,所以 ...
- Sharpui企业版-简单介绍【01】 【QQ群:206378966】
1. 什么是Sharpui Sharpui是居于DUI思想的一套界面引擎,採用纯c++开发,实现完整的消息处理机制.渲染引擎分离以及灵活的控件扩展,是一款c++真正意义上的界面和业务逻 ...
- OpenCV 编程简单介绍(矩阵/图像/视频的基本读写操作)
PS. 因为csdn博客文章长度有限制,本文有部分内容被截掉了.在OpenCV中文站点的wiki上有可读性更好.而且是完整的版本号,欢迎浏览. OpenCV Wiki :<OpenCV 编程简单 ...
- 使用hadoop命令rcc生成Record 一个简单的方法来实现自己的定义writable对象
hadoop 的bin文件夹以下一个rcc命令,网上介绍非常少.看了一下源代码.发现能够用来生成 java和c++的hadoop Record 类代码,比起自己直接实现writable 接口.简单非常 ...
- Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍
Android ImageLoader(Android-Universal-Image-Loader)[1]概述及使用简单介绍 一,前言:为什么要引入Android-Universal-Imag ...
- Auto Layout深入理解,及masonry简单介绍
本篇博客是本人在学习自己主动布局过程中对自己主动布局的理解和整理,分三部分介绍,内容可能会有所反复.见谅. 一.autosizing与Auto Layout对照,及Auto Layout简单介绍 1. ...
- Android 通过反射让SQlite建表如此简单
我们通常使用SQlite的时候,假设我们有10张表,我们要写10个建表语句.而建表语句中仅仅有一些字段的名字须要改而已,这样既费时又费力,还easy出错.我们知道写sql语句的时候常常会写错,假设写错 ...
随机推荐
- NAS与SAN有什么区别?
NAS和SAN字面上相似,并且都是新型数据存储模式,但这二者是完全不同的,针对不同方向的技术,为了能够更好的区分它们,天伟数据恢复整理了以下内容供读者参考(天伟数据恢复建议重要数据多备份,备份很重要以 ...
- AWS S3 对象存储服务
虽然亚马逊云非常牛逼,虽然亚马逊云财大气粗,虽然亚马逊用的人也非常多,可是这个文档我简直无法接受,特别是客服,令人发指的回复速度,瞬间让人无语,可是毕竟牛逼.忍了,躺一次坑而已 1.图片上传 1.1 ...
- Jenkins 打包 java项目时 丢失 配置文件(resource)
使用IDEA开发的spring boot 项目在本地打包运行可以,但是利用Jenkins打包运行提示读取不到配置文件中的变量,打开jar包发现里面没有配置文件.解决方法是在pom中增加如下配置 < ...
- 使用纯 CSS 实现 Google Photos 照片列表布局
文章太长,因为介绍了如何一步一步进化到最后接近完美的效果的,不想读的同学可以直接跳到最后一个大标题之后看代码.demo及原理就好,或者也可以直接看下面这个链接的源代码. 不过还是建议顺序读下去,因为后 ...
- 错误:Camera录制视频(6.0错误),5.1正常,7.1正常 (java.lang.RuntimeException: start failed.at android.media.MediaRecorder.native_start(Native Method))
Process: com.example.mycamera2, PID: 24086 java.lang.RuntimeException: start failed. at android.medi ...
- HDL之Bitwise operation
1 Verilog 1.1 Bitwise operator Bitwise operators perform a bit wise operation on two operands. They ...
- java学习笔记4——返回值
这个简单,返回值就是计算结果. 打个比方:个表格中我只要结果,不要经过,这个返回值就是结果.这个过程就是函数. 另外还有一个函数套用一个函数,被套用的函数的结果作为一个返回值给套用的外层函使用.比如: ...
- python的小数据池和深浅拷贝
小数据池 一种数据缓存机制,也称驻留机制 在同一代码块,相同的值不会开辟新的内存 特殊字符除外 小数据池只针对:在控制台时! 数字 :-5到256间的整数会被缓存 布尔值:都会缓存8 字符串 小于等于 ...
- Linux系统编程@进程管理(一)
课程目标: 构建一个基于主机系统的多客户即时通信/聊天室项目 涉及的理论知识 进程控制:僵尸进程/孤儿进程.进程控制.守护进程... 进程间通信:管道.命名管道.信号... 多线程编程: 锁.信号量. ...
- 自动化构建之bower
官网地址:https://bower.io/ 网站由很多东西组成 - 框架,库,一个大型网站有很多人一块创建,那么因为版本或者其他的原因导致文件重复,或者不是最新的.例如:jq的版本不一样但是都是jq ...