- 浏览: 496123 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (502)
- Java (70)
- Linux (10)
- 数据库 (38)
- 网络 (10)
- WEB (13)
- JSP (4)
- 互联网 (71)
- JavaScript (30)
- Spring MVC (19)
- HTML (13)
- CSS (3)
- AngularJS (18)
- Redis (5)
- Bootstrap CSS (1)
- ZooKeeper (4)
- kafka (6)
- 服务器缓存 (4)
- Storm (1)
- MongoDB (9)
- Spring boot (16)
- log4j (2)
- maven (3)
- nginx (5)
- Tomcat (2)
- Eclipse (4)
- Swagger (2)
- Netty (5)
- Dubbo (1)
- Docker (7)
- Hadoop (12)
- OAuth (1)
- webSocket (4)
- 服务器性能 (7)
- Session共享 (1)
- tieye修改 (1)
- 工作 (1)
- 有用的语录 (0)
- https (2)
- common (5)
- 产品开发管理 (1)
- CDN 工作原理 (1)
- APNS、GCM (1)
- 架构图 (3)
- 功能实现分析 (1)
- JMX (1)
- 服务器相关操作命令 (1)
- img02 (0)
- 服务器环境搭建 (9)
- goodMenuBook (1)
- CEInstantPot (0)
- 有用数据 (1)
- 百度地图WEB API (2)
- 正则表达式 (1)
- 样式例子 (2)
- staticRecipePressureCooker.zip (1)
- jCanvas (1)
- 网站攻击方法原理 (1)
- 架构设计 (3)
- 物联网相关 (3)
- 研发管理 (7)
- 技术需求点 (1)
- 计划 (1)
- spring cloud (11)
- 服务器开发的一些实用工具和方法 (1)
- 每天学到的技术点 (4)
- Guava (1)
- ERP 技术注意要点 (2)
- 微信小程序 (1)
- FineRepor (1)
- 收藏夹 (1)
- temp (5)
- 服务架构 (4)
- 任职资格方案 (0)
- osno_test (1)
- jquery相关 (3)
- mybatis (4)
- ueditor (1)
- VueJS (7)
- python (10)
- Spring EL (1)
- shiro (1)
- 前端开发原理与使用 (7)
- YARN (1)
- Spark (1)
- Hbase (2)
- Pig (2)
- 机器学习 (30)
- matplotlib (1)
- OpenCV (17)
- Hystrix (1)
- 公司 (1)
- miniui (4)
- 前端功能实现 (3)
- 前端插件 (1)
- 钉钉开发 (2)
- Jenkins (1)
- elasticSearch使用 (2)
- 技术规范 (4)
- 技术实现原理 (0)
最新评论
java 运行顺序、注意事项总结、基础概念
注意事项总结:
1.静态变量是属于整个类的变量而不是属于某个对象的。
2.注意不能把任何方法体内的变量声明为静态(方法体内定义静态变量会报错)
3.在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次
4.在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。
5.静态变量和静态语名块都在类加载的时候完成,而不是生成对象时完成
6.访问静态常量,如果编译器可以计算出常量的值,则不会加载类。即如果A类的静态常量值是通过B类的静态常量赋值,则不加载,否则需要加载A类。
7.访问静态常量,如果编译器可以计算出常量的值(就是值不会变化的),则不会加载类,否则会加载类
8.创建对象引用不加载类.(一个类里面定义另一个类的引用),引用就是定义变量
9.静态方法和静态语名块不能调用非静态变量和非静态方法
10.类的构造器实际上也是静态方法,即使没有显示地声明为static
11.变量不能被重写(覆盖),如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法
12.使用父类类型的引用子类对象时(只能调用父类的方法和变量,子类的新方法和变量就不行了),该引用调用的是父类中定义的方法和变量
对象生成:
类加载->初始化static成员变量->执行static语句块->初始化对象的成员变量->执行非静态语句块->执行构造器生成对象
父类static成员变量->父类static语句块->子类static成员变量->子类static语句块->
父类非静态成员变量->父类非静态语句块->父类构造器->子类非静态成员变量->子类非静态语句块->子类构造器
父类初始化->父类构造器->子类初始化->子类构造器
对象初始化:
1)对于 char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false);
2)对于引用类型的变量,会默认初始化为null。String 默认值为null
3)如果没有显示地定义构造器,则编译器会自动创建一个无参构造器,但是要记住一点,如果显式地定义了构造器,编译器就不会自动添加构造器。
java类加载顺序
1.首先加载类,执行static变量初始化,接下来执行对象的创建
2.java虚拟机要求所有的静态变量必须在对象创建之前完成
3.java常量放在内存中常量池,它的机制与变量是不同的,编译时,加载常量是不需要加载类的
初始化顺序:
需要生成某个类的对象,Java执行引擎会先检查是否加载了这个类,如果没有加载,
则先执行类的加载再生成对象,如果已经加载,则直接生成对象。
类的加载过程中,类的static成员变量会被初始化,如果类中有static语句块,则会
执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。
子类调用父类的静态方法时
(1)当子类没有覆盖父类的静态方法时,只加载父类,不加载子类
(2)当子类有覆盖父类的静态方法时,既加载父类,又加载子类
static{}语句块的执行次序
(1)当一个类中有多个static{}的时候,按照static{}的定义顺序,从前往后执行;(编写顺序执行)
(2)先执行完static{}语句块的内容,才会执行主调用语句;
继承:
子类继承父类的方法(静态的、非静态的)
子类继承父类的成员变量(静态的、非静态的)
子类不继承构造器
隐藏:
子类继承父类的成员变量,不能够继承父类的private成员变量,子类中出现了同名称的成员变量,则会发生隐藏现象
即子类的成员变量会屏蔽掉父类的同名成员变量,如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
静态方法和静态变量都会进行隐藏
覆盖:
子类继承父类的方法,不能够继承父类的private成员方法,子类中出现了同名称的成员方法,则称为覆盖,
即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
隐藏与覆盖的理解:
隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的(所以成员变量(静态、非静态)和静
态方法是调用你的引用变量类型的)
覆盖只针对非静态方法,也就是说只有覆盖方法才会进行动态绑定,而隐藏是不会发生动态绑定的。
在Java中,除了static方法和final方法,其他所有的方法都是动态绑定
this、super不能用到静态方法中:
this、super不能用到静态方法中,this是对当前对象的引用,super是指父类对象的引用。
如果静态方法中有this和super那么当静态方法被加载到内存中,其中的this和super也被加载到内存中,
但是对象还没创建this和super还没被初始化,所以加载时会报错。
构造器:
如果父类的构造器都是带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表
如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,
系统会自动调用父类的无参构造器。
重写(Overriding)与重载(Overloading)的理解:
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型但同时参数列表也得不同。
接口与抽象类:
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,
一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
抽象类是据有一个或多个抽象方法的类,必须声明为抽象类。抽象类的特点是,不能创建实例。
方法调用的优先级:
优先级由高到低依次为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
先在本类中找有没有,再到父类中找,找到再看本类有没有重写,都没有再看参数变为父类(一级一级向上父类)找有没有
符合的方法,再参数变为父类到父类中找有没有(这样的顺序进行处理的)
注意事项总结:
1.静态变量是属于整个类的变量而不是属于某个对象的。
2.注意不能把任何方法体内的变量声明为静态(方法体内定义静态变量会报错)
3.在Java中,类是按需加载,只有当需要用到这个类的时候,才会加载这个类,并且只会加载一次
4.在生成对象的过程中,会先初始化对象的成员变量,然后再执行构造器。
5.静态变量和静态语名块都在类加载的时候完成,而不是生成对象时完成
6.访问静态常量,如果编译器可以计算出常量的值,则不会加载类。即如果A类的静态常量值是通过B类的静态常量赋值,则不加载,否则需要加载A类。
7.访问静态常量,如果编译器可以计算出常量的值(就是值不会变化的),则不会加载类,否则会加载类
8.创建对象引用不加载类.(一个类里面定义另一个类的引用),引用就是定义变量
9.静态方法和静态语名块不能调用非静态变量和非静态方法
10.类的构造器实际上也是静态方法,即使没有显示地声明为static
11.变量不能被重写(覆盖),如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法
12.使用父类类型的引用子类对象时(只能调用父类的方法和变量,子类的新方法和变量就不行了),该引用调用的是父类中定义的方法和变量
对象生成:
类加载->初始化static成员变量->执行static语句块->初始化对象的成员变量->执行非静态语句块->执行构造器生成对象
父类static成员变量->父类static语句块->子类static成员变量->子类static语句块->
父类非静态成员变量->父类非静态语句块->父类构造器->子类非静态成员变量->子类非静态语句块->子类构造器
父类初始化->父类构造器->子类初始化->子类构造器
对象初始化:
1)对于 char、short、byte、int、long、float、double等基本数据类型的变量来说会默认初始化为0(boolean变量默认会被初始化为false);
2)对于引用类型的变量,会默认初始化为null。String 默认值为null
3)如果没有显示地定义构造器,则编译器会自动创建一个无参构造器,但是要记住一点,如果显式地定义了构造器,编译器就不会自动添加构造器。
java类加载顺序
1.首先加载类,执行static变量初始化,接下来执行对象的创建
2.java虚拟机要求所有的静态变量必须在对象创建之前完成
3.java常量放在内存中常量池,它的机制与变量是不同的,编译时,加载常量是不需要加载类的
初始化顺序:
需要生成某个类的对象,Java执行引擎会先检查是否加载了这个类,如果没有加载,
则先执行类的加载再生成对象,如果已经加载,则直接生成对象。
类的加载过程中,类的static成员变量会被初始化,如果类中有static语句块,则会
执行static语句块。static成员变量和static语句块的执行顺序同代码中的顺序一致。
子类调用父类的静态方法时
(1)当子类没有覆盖父类的静态方法时,只加载父类,不加载子类
(2)当子类有覆盖父类的静态方法时,既加载父类,又加载子类
static{}语句块的执行次序
(1)当一个类中有多个static{}的时候,按照static{}的定义顺序,从前往后执行;(编写顺序执行)
(2)先执行完static{}语句块的内容,才会执行主调用语句;
继承:
子类继承父类的方法(静态的、非静态的)
子类继承父类的成员变量(静态的、非静态的)
子类不继承构造器
隐藏:
子类继承父类的成员变量,不能够继承父类的private成员变量,子类中出现了同名称的成员变量,则会发生隐藏现象
即子类的成员变量会屏蔽掉父类的同名成员变量,如果要在子类中访问父类中同名成员变量,需要使用super关键字来进行引用。
静态方法和静态变量都会进行隐藏
覆盖:
子类继承父类的方法,不能够继承父类的private成员方法,子类中出现了同名称的成员方法,则称为覆盖,
即子类的成员方法会覆盖掉父类的同名成员方法。如果要在子类中访问父类中同名成员方法,需要使用super关键字来进行引用。
隐藏与覆盖的理解:
隐藏是针对成员变量和静态方法的,而覆盖是针对普通方法的(所以成员变量(静态、非静态)和静
态方法是调用你的引用变量类型的)
覆盖只针对非静态方法,也就是说只有覆盖方法才会进行动态绑定,而隐藏是不会发生动态绑定的。
在Java中,除了static方法和final方法,其他所有的方法都是动态绑定
this、super不能用到静态方法中:
this、super不能用到静态方法中,this是对当前对象的引用,super是指父类对象的引用。
如果静态方法中有this和super那么当静态方法被加载到内存中,其中的this和super也被加载到内存中,
但是对象还没创建this和super还没被初始化,所以加载时会报错。
构造器:
如果父类的构造器都是带有参数的,则必须在子类的构造器中显式地通过super关键字调用父类的构造器并配以适当的参数列表
如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,
系统会自动调用父类的无参构造器。
重写(Overriding)与重载(Overloading)的理解:
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。
Overloaded的方法是可以改变返回值的类型但同时参数列表也得不同。
接口与抽象类:
接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,
实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,
一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。
抽象类是据有一个或多个抽象方法的类,必须声明为抽象类。抽象类的特点是,不能创建实例。
方法调用的优先级:
优先级由高到低依次为:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。
先在本类中找有没有,再到父类中找,找到再看本类有没有重写,都没有再看参数变为父类(一级一级向上父类)找有没有
符合的方法,再参数变为父类到父类中找有没有(这样的顺序进行处理的)
发表评论
-
elasticSearch使用
2022-04-27 08:42 416ElasticSearch 基于Apache Lucene构建 ... -
IDEA 快捷键
2022-03-02 16:55 245大小写转换快捷键 ctr+shift+u IDEA ... -
每天学到的技术点3
2022-02-21 20:01 2451.TEXT与BLOB的区别,二者 ... -
zookeeper dubbo 安装
2021-12-04 19:27 315docker-machine ssh default d ... -
JVM 调优与测试
2021-05-22 22:24 580VisualVM 能够监控线程,内存情况,查看方法的CPU ... -
百度人脸识别
2021-05-21 16:11 363package com.gaojinsoft.htwy.y20 ... -
springboot tomcat 参数配置与数据库连接池多少的性能分析
2021-05-12 22:15 560参数配置与数据库连接池多少的性能分析 tomcat线程数 ... -
log4j2应用
2020-07-23 14:16 363https://blog.csdn.net/giventian ... -
文件上传下载
2020-07-06 13:16 4201.文件ID,名字(源,目标),大小,路径(/aa/bb/s. ... -
base64与file 相互转换
2019-10-23 18:19 775base64与file 相互转换 import org. ... -
百度身份证识别
2019-10-18 18:19 673package com.gaojinsoft.htwy.y20 ... -
JAVA 实用方法
2019-05-16 09:50 353//得到xml文件中的sql文本 public St ... -
导出内容到excel文件方法
2019-05-15 10:52 511@SuppressWarnings("rawtype ... -
要求fsss
2019-09-21 21:30 304/* */ package com.midea.com ... -
反射、类信息、动态代理、CGLIB动态代理原理与测试
2019-01-29 21:04 485package com.midea.common.classT ... -
JVM 监控工具
2019-01-21 18:04 381JVM 监控工具 //========== ... -
java 线程池线程复用原理
2019-01-15 17:10 1160java 线程池线程复用原理 其实就一个大run()把其 ... -
LockSupport原理
2019-01-11 18:01 700LockSupport原理 在Java语言中,每一个对象有 ... -
runnable与thread 区别
2019-01-11 14:49 681runnable与thread 区别 在java中可有两种 ... -
Java的Future模式
2019-01-11 10:08 444Java的Future模式 runnable与thread ...
相关推荐
#### 二、Java运行环境的基本概念 1. **JDK (Java Development Kit)**:JDK是Java开发工具包,包含了Java编译器、文档生成工具、打包工具等,是开发Java应用程序的基础。 2. **JRE (Java Runtime Environment)**:...
这份"java学习资料及注意事项"集合了多种资源,旨在帮助初学者快速掌握Java编程的基础知识和最佳实践。 首先,"Java开发者需坚守的十大基本准则.txt"可能是对Java开发人员至关重要的指导原则。这些准则可能包括但不...
为了使用Java进行开发,需要安装Java Development Kit (JDK),它包含了Java运行环境 (JRE) 和开发工具。JRE包括Java虚拟机 (JVM) 和必要的类库,用于运行Java程序。开发人员需配置环境变量,以便在任何目录下运行JDK...
7. **学习Java注意事项**:学习Java时应注重基础,理解面向对象编程的概念,同时关注异常处理、内存管理和多线程等关键特性。 8. **Java语法格式**:Java遵循严格的语法规则,包括类定义、方法声明、访问修饰符等。...
A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...
在深入理解Servlet运行原理和注意事项之前,我们先简单回顾一下Servlet的基本概念。 Servlet生命周期分为四个阶段:加载与实例化、初始化、服务和销毁。当web服务器接收到请求时,会根据请求URL查找对应的Servlet,...
- 注意事项:该方法对对象数组有效,但不支持基本数据类型的数组直接转换。 #### 六、枚举类 - **基本使用** - 枚举是一种特殊的类,用于定义一组固定的实例。 - 示例:定义性别枚举,如 `public enum Gender {...
2.16 Java基础其他注意事项:学习过程中需要注意的其他事项,例如代码规范、性能优化建议等。 面向对象知识点: 3.1 类:类是Java语言中定义对象的模板或蓝图。 3.2 对象:对象是类的实例。 3.3 包:包是一种管理类...
- **注意事项**:当在Windows环境下开发时,如果Windows用户名与启动sqoopserver的用户不同,则不能直接在Eclipse中运行程序。这是因为sqoopserver与客户端之间存在认证机制,需确保认证一致。 通过本文档的学习,...
Java 是一种广泛使用的编程语言,本资源摘要提供了 Java 学习笔记的关键要点,涵盖了 Java 主函数解析、Java 学习注意事项、JDK 和 JRE 的区别、变量、运算符、控制结构、数组、排序、面向对象编程、继承、多态、...
本篇总结了Java异常的基本概念、分类及处理方式等内容,对于从事Java开发的技术人员具有重要的参考价值。 #### 二、Java异常处理机制详解 1. **异常处理的关键字:** Java中的异常处理主要通过`try`、`catch`、`...
A.5.6 固有方法与程序片的注意事项 A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和 A.6.4 比较CORBA与 A.7 总结 附录B 对比C++和 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 寻找瓶颈 D.2.1 安插自己的...
**14.6 使用互斥锁的注意事项** 使用synchronized关键字或Lock接口提供的显式锁来控制对共享资源的访问。 #### 十四、标准I/O流与文件 **15.1 对文件的操作** 使用File类和相关的输入输出流类来操作文件。 **...
A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...
A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...
- **注意事项**:在修改环境变量时,需要注意保持原有路径的完整性,避免删除原有的环境变量路径,同时确保新添加的路径顺序正确。 3. **验证安装** - 打开命令提示符窗口(可以通过搜索框输入“cmd”打开),...
一、Java合软基础概念 1. Java:Java是一种跨平台的编程语言,广泛应用于移动设备,特别是早期的非智能手机。Java ME(Micro Edition)是专门为嵌入式设备和移动设备设计的Java版本。 2. S40平台:诺基亚S40系列是...
A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...
- **CLASSPATH**:指定Java运行时需要加载的类文件的位置。通常情况下,除了标准的类库外,还可能需要加载第三方库或其他自定义类库。 - **PATH**:包含JDK的bin目录,这样可以直接在命令行中调用Java相关的工具,如...
A.5.6 固有方法与程序片的注意事项 A.6 CORBA A.6.1 CORBA基础 A.6.2 一个例子 A.6.3 Java程序片和CORBA A.6.4 比较CORBA与RMI A.7 总结 附录B 对比C++和Java 附录C Java编程规则 附录D 性能 D.1 基本方法 D.2 ...