初始化、包、访问修饰符
来源:互联网 发布:小米笔记本 pro linux 编辑:程序博客网 时间:2024/05/17 03:51
静态初始化
在使用一个类前,虚拟机需要从外部加载这个类文件,加载完毕后,有一部分代码会自动执行
class T{
static{
//静态初始化代码块,在类加载后执行
}
}
public class T { static{ System.out.println("加载静态代码块"); } public static void main(String[] args){ System.out.println("加载代码块"); }}运行结果:加载静态代码块加载代码块
我们可以在静态代码块中初始化类的静态属性
(因为每个工程一般只会连接到一个数据库,数据库地址跟对象无关,所以这里定义为static类型)
class T{
static int dbURL; //连接数据库的地址
static{
dbURL = … ;
//从文件中读取数据库地址,这样可以在外部改变dbURL,而不用重新编译java代码;
}
}
如果A类依赖于B类,则先加载B类
package test;public class T { static{ System.out.println("加载父类静态代码块"); }}
public class Sub extends T{ static{System.out.println("加载子类代码块"); } public static void main(String[] args){ new T(); }}
运行结果:
加载父类静态代码块
加载子类代码块
在程序的一次运行过程中,类只会被加载一次,所以一个类的静态代码块也不会执行两次
class T{
static{System.out.println(“执行静态代码块”); }
}
new T();
new T();
运行结果:
执行静态代码块
静态初始化
class T{
static{System.out.println(1); }
T(){
System.out.println(2); }
}
}
new T();
//使用T类需要先加载T类,加载后会立刻执行static代码块,创建对象时才会执行构造方法
非静态初始化
在创建对象时除构造方法被执行外还有一段代码会自动执行
class T{
{
//非静态代码块,在执行构造方法内的代码前执行
}
}
new T();
package test;public class T { static{ System.out.println("加载父类静态代码块"); } { System.out.println("执行父类非静态代码块"); } public T(){ System.out.println("执行父类构造方法"); }}
package test;public class Sub extends T{ static{ System.out.println("加载子类代码块"); } { System.out.println("执行子类非静态代码块"); } public static void main(String[] args){ new Sub(); } public Sub(){ System.out.println("执行子类构造方法"); }}
执行结果:
加载父类静态代码块
加载子类代码块
执行父类非静态代码块
执行父类构造方法
执行子类非静态代码块
执行子类构造方法
对象初始化
package test;public class T { //public T(){} public T(int a){ System.out.println("执行父类构造方法"); }}
package test;public class Sub extends T{ public static void main(String[] args){ new Sub(); } public Sub(){ System.out.println("执行子类构造方法"); }}
以上代码父类中加上无参构造方法,程序没错,一旦去掉,就会报错。原因是子类TT继承父类T,由于new Sub()创建了一个子类对象,而这个子类对象是通过调用子类中的构造方法来创建的,又因为凡是子类的构造方法(无论有参还是无参),第一行都会是super(参数)或者super()来调用父类相应的构造方法,又因为父类中如果没有构造方法,会默认调用无参构造方法,如果有有参的构造方法则会将默认的无参构造方法覆盖掉,因此我们常常会在父类中把无参和有参都写上。
对象的初始化顺序:
从顶级父类开始加载,每个类加载后执行其static代码块
从顶级父类的构造方法开始执行,如果某个类有非静态初始化代码块,先执行这个代码块再执行构造方法内的语句。
包
包是类库的组成单元, Java的类库是由各种各样功能包组成的.
Java安装目录jre\lib\rt.jar就是java的类库
类和接口是包的组成元素, 编程人员可以把一组类和接口通过package关键字封装在一个包中,从而实现了Java的命名空间。
声明包
在源文件的开始加上:package 包名(要求全部小写)(反域名制)
package cn.com.sun;
使用包中的类
如使用不同包的类,必须加入import关键字
引用的包必须在classpath环境变量中,如果不在,运行时要用-classpath参数单独指定。
打包及编译-示例
//在net下新建ezhi包,再在ezhi下新建comm包package net.ezhi.comm;public class User { private String name; private String password; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public User(){}}
//在net下新建ezhi包,再在ezhi下新建test包package net.ezhi.test;import net.ezhi.comm.*;//导入User包public class Admin extends User{}
访问修饰符
修饰类
public 可以跨包使用
缺省 只允许在包中使用
修饰成员(属性、方法、内部类(后面讲解))
public
protected
缺省(默认)
private
- 初始化、包、访问修饰符
- 包、访问修饰符
- 包+访问修饰符
- 包与访问修饰符
- 包与访问修饰符
- Java - 包 - 成员访问修饰符
- Java - 包 - 成员访问修饰符
- JAVA中的访问修饰符和包
- JAVA的访问修饰符、内部类、初始化块
- 十四、java的访问控制(包、访问修饰符、修饰符)
- java的访问控制(包、访问修饰符、修饰符)
- 基础加强1到4-构造函数、包、var-arg、变量、访问修饰符、重写/重载、初始化块、返回值规则、instanceof比较
- Java包的概念及访问修饰符
- L3:单例模式、包、访问修饰符、instanceof
- Java学习笔记2016.2.20 访问修饰符、包
- 访问修饰符
- C#访问修饰符
- c#访问修饰符
- 服务器安装Pytorch
- 阿里云CDN HTTPS安全加速解决方案发布,价格下调50%
- BoxLayout布局
- UVA 1575
- UML之时序图详解
- 初始化、包、访问修饰符
- 手机整屏滑动插件-----fullPage.js------使用
- 【Spring Cloud】一、Eureka Server 服务注册中心服务端启动
- Spark中Task,Partition,RDD、节点数、Executor数、core数目的关系
- 用正则表达式匹配邮箱、手机号、密码及用户名的OC
- Python学习笔记
- 在浏览器端对图片进行压缩 & 上传
- 《大话设计模式》java实现之适配器模式
- 金额格式化