java中类相关注意事项
2017-02-16 13:16
666 查看
下面default类就是默认修饰符的类
1、Java中调用类中属性或方法(不管是否静态属性或方法)都要在类的方法中调用,虽然这个太基础,但今天想在类中调用静态类的静态变量,不能调用;
2、Java调用内部类公共变量:
3、一个.java文件内只能有一个public 类,可以有多个default类(顶级类只有public和default两种修饰符),而且源文件名必须与public类名一致,否则编译报错
如文件JavaA.java内有类public class Test{}
当用javac JavaA.java命令编译时报错:JavaA.java:1: 错误: 类Test是公共的, 应在名为 Test.java 的文件中声明
如文件JavaA.java内有类public class JavaA{}
用命令javac JavaA.java编译成功,会有JavaA.class文件生成
如文件JavaA.java内有类class Test{}
用命令javac JavaA.java编译成功,会有Test.class文件生成
另外:public static void main(String[] args){}方法可以在public类下也可以在default类下
4、内部类才可以被声明为静态类
5、父子类构造器及其静态块执行顺序
先执行父类静态块,再执行子类静态块
执行完静态块后,先执行父类构造方法,再执行子类构造方法
静态块是在定义类对象的时候执行的,构造方法是在new创建的时候执行的
6、父子类构造函数关系
1)、我们都知道,如果一个类里面没有写任何构造函数,那么默认都会有一个无参构造函数;如果一个类写了有参构造函数,没有写无参构造函数,那么默认的无参构造函数也就不存在了
2)、父类存在默认无参构造函数、或者存在有参构造函数及无参构造函数,子类中不使用super函数,不管实例化的是有参还是无参构造函数,都要先执行父类无参构造,如下图
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105320804-363372979.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105335710-869831177.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105418147-358603859.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105504163-1267542237.png)
3)、仍然按照2)中父子类关系,B类有参构造函数使用了super有参数方法,则根据super方法执行父类对应构造函数;super方法在子类构造函数中使用时,只能使用一次,而且必须放在构造函数第一行
修改后的B类及执行结果如下图,第三张图是使用两个super编译错误提示
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904110333788-1544159904.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904110402241-1091314538.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904110830101-525162319.png)
4)、如果A类没有无参构造函数,有一个有参构造函数,那么B类必须使用super指定执行的父类构造函数,可见子类构造函数形式与父类没有必然一致性
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904111523569-1555408023.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904111547616-1770771265.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904111611554-635431275.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904112002632-1278183988.png)
如果B类构造函数没有使用super,编译报错
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904112254351-847392442.png)
5)、如果父类重写了无参构造函数(依然没有参数),子类可以重写构造函数,或者不写构造函数;如果父类写了有参构造函数,没有无参构造函数,那么子类必须要写构造函数,且带有super,如果不写会编译报错父类没有可用构造函数错误
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904113203226-65215673.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904113229476-733439120.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904113307491-584228860.png)
1、Java中调用类中属性或方法(不管是否静态属性或方法)都要在类的方法中调用,虽然这个太基础,但今天想在类中调用静态类的静态变量,不能调用;
2、Java调用内部类公共变量:
public class A { public class AA { public int i = 0; } } public class B { public void method() { int i = new A().new AA().i; } }
3、一个.java文件内只能有一个public 类,可以有多个default类(顶级类只有public和default两种修饰符),而且源文件名必须与public类名一致,否则编译报错
如文件JavaA.java内有类public class Test{}
当用javac JavaA.java命令编译时报错:JavaA.java:1: 错误: 类Test是公共的, 应在名为 Test.java 的文件中声明
如文件JavaA.java内有类public class JavaA{}
用命令javac JavaA.java编译成功,会有JavaA.class文件生成
如文件JavaA.java内有类class Test{}
用命令javac JavaA.java编译成功,会有Test.class文件生成
另外:public static void main(String[] args){}方法可以在public类下也可以在default类下
4、内部类才可以被声明为静态类
5、父子类构造器及其静态块执行顺序
先执行父类静态块,再执行子类静态块
执行完静态块后,先执行父类构造方法,再执行子类构造方法
静态块是在定义类对象的时候执行的,构造方法是在new创建的时候执行的
6、父子类构造函数关系
1)、我们都知道,如果一个类里面没有写任何构造函数,那么默认都会有一个无参构造函数;如果一个类写了有参构造函数,没有写无参构造函数,那么默认的无参构造函数也就不存在了
2)、父类存在默认无参构造函数、或者存在有参构造函数及无参构造函数,子类中不使用super函数,不管实例化的是有参还是无参构造函数,都要先执行父类无参构造,如下图
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105320804-363372979.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105335710-869831177.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105418147-358603859.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904105504163-1267542237.png)
3)、仍然按照2)中父子类关系,B类有参构造函数使用了super有参数方法,则根据super方法执行父类对应构造函数;super方法在子类构造函数中使用时,只能使用一次,而且必须放在构造函数第一行
修改后的B类及执行结果如下图,第三张图是使用两个super编译错误提示
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904110333788-1544159904.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904110402241-1091314538.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904110830101-525162319.png)
4)、如果A类没有无参构造函数,有一个有参构造函数,那么B类必须使用super指定执行的父类构造函数,可见子类构造函数形式与父类没有必然一致性
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904111523569-1555408023.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904111547616-1770771265.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904111611554-635431275.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904112002632-1278183988.png)
如果B类构造函数没有使用super,编译报错
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904112254351-847392442.png)
5)、如果父类重写了无参构造函数(依然没有参数),子类可以重写构造函数,或者不写构造函数;如果父类写了有参构造函数,没有无参构造函数,那么子类必须要写构造函数,且带有super,如果不写会编译报错父类没有可用构造函数错误
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904113203226-65215673.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904113229476-733439120.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904113307491-584228860.png)
![](https://images2017.cnblogs.com/blog/705942/201709/705942-20170904113437757-1841076631.png)
相关文章推荐
- java 数据绑定的几种方式及相关注意事项-持续更新
- Elasticsearch 5.5 SQL语句转Java Client 及相关注意事项(三)
- redis安装 phpredis Jedis 扩展的实现及注意事项,php,java,python相关插件安装实例代码和文档推荐
- JAVA配置相关注意事项和javac不是内部或外部命令的处理办法
- java IO注意事项
- iOS巅峰之iPhone适配的相关内容以及机型适配时的注意事项
- java和C++注意事项
- Java:List remove时候注意事项
- Java控制流(如:标准输入输出)的注意事项
- java split() 注意事项
- Java Split注意事项
- Java高并发程序-Chapter5 锁的优化及注意事项(第三十一讲)ThreadLocal
- Java String的常用方法及使用注意事项
- 函数重载相关注意事项
- HessianPHP_v2.0.3.zip, 在php作客户端,java作服务器端时,使用注意事项:
- Java中可变长参数的使用及注意事项
- 多语言版本软件制作相关注意事项
- java矩阵运算包ujmp中的一些小示例和注意事项
- Java中的String使用及注意事项
- Java常量定义需要注意事项及static作用(复习)