重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
你可以将
创新互联公司是由多位在大型网络公司、广告设计公司的优秀设计人员和策划人员组成的一个具有丰富经验的团队,其中包括网站策划、网页美工、网站程序员、网页设计师、平面广告设计师、网络营销人员及形象策划。承接:网站建设、成都网站设计、网站改版、网页设计制作、网站建设与维护、网络推广、数据库开发,以高性价比制作企业网站、行业门户平台等全方位的服务。
{
Point p=new Point();
p.x=4;
System.out.println(p.x);
p.y=5;
System.out.println(p.y);
}
代码块,做为非静态代码块,放到Rectangle类或者Main类或者Point类中,编译就能通过了,但是依据题意,还是应该放到Rectangle类或者Main类中为好,因为可以调用它,放到Point类中,没有类调用它这段代码了。完整的Java程序如下
public class Main {
public static void main(String[] args) {
Rectangle rect=new Rectangle();
rect.width=100;
System.out.println(rect.width);
rect.height=200;
System.out.println(rect.height);
Rectangle rect2=new Rectangle();
rect2.width=10;
System.out.println(rect2.width);
rect2.height=20;
System.out.println(rect2.height);
}
}
class Rectangle
{
int width;
int height;
{
Point p=new Point();
p.x=4;
System.out.println(p.x);
p.y=5;
System.out.println(p.y);
}
}
class Point
{
int x;
int y;
}
运行结果
4
5
100
200
4
5
10
20
因为是非静态代码块在Rectangle类中,所以每建一个Rectangle对象,都会执行一次非静态代码块,所以Point类的打印被执行了两次。
由static
关键修饰的内容
为静态
;
反之
,为非静态
静态变量
属于
类
,为所有对象共有
分静态变量
属于
对象
,
每个对象都可以有且属性值可以各异
静态变量优于非静态变量加载,故
静态代码块中不能引用非静态成员,会报错
相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,
一般在代码块中对一些static变量进行赋值。
不同点:静态代码块在非静态代码块之前执行(静态代码块—非静态代码块—构造方法)。
静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new
一次就执行一次。非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。
例:
//普通类
public class PuTong {
public PuTong(){
System.out.print("默认构造方法!--");
}
//非静态代码块
{
System.out.print("非静态代码块!--");
}
//静态代码块
static{
System.out.print("静态代码块!--");
}
public static void test(){
{
System.out.println("普通方法中的代码块!");
}
}
}
//测试类
public class TestClass {
/**
* 区别两次new静态与非静态代码块执行情况
*/
public static void main(String[] args) {
PuTong c1 = new PuTong();
c1.test();
PuTong c2 = new PuTong();
c2.test();
}
}
/*
运行输出结果是:
静态代码块!--非静态代码块!--默认构造方法!--普通方法中的代码块!
非静态代码块!--默认构造方法!--普通方法中的代码块!
*/
静态初始化块:当类第一次加载时执行。
非静态初始化块:非静态初始化块会在构造函数执行时,且在构造函数主体代码执行之前被执行。
区别如下:
1、执行次数不同
静态块只执行一次,初始化块可以执行多次。
2、作用不同
静态初始化块仅能初始化类变量,即static修饰的数据成员。
非静态初始化块可以初始化类的实例变量。
扩展资料:
使用Java静态代码块注意事项:
1、它是随着类的加载而执行,只执行一次,并优先于主函数。具体说,静态代码块是由类调用的。类调用时,先执行静态代码块,然后才执行主函数的。
2、静态代码块其实就是给类初始化的,而构造代码块是给对象初始化的。
3、静态代码块中的变量是局部变量,与普通函数中的局部变量性质没有区别。
4、一个类中可以有多个静态代码块。
5、对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)(变量、初始化块)构造器。
静态代码块是在类加载进jvm时类实例化之前运行的,比如业务场景有这种类初始化时需要加载许多资源,在运行实例化类的时候会影响程序响应时间,所以就在项目启动的时候加载类的时候就初始化了.非静态代码块是在类实例化的时候才会运行,所以静态代码块的执行一定在非静态代码块执行之前执行.至于你上面的第一个问题要看具体业务场景和需求,赋值都可以实现.第二个问题,可能是写那句代码的人要看程序加载后有没有执行那部分代码而加上的,知道了静态代码块和非静态代码块的本质区别,为什么那么做和目的你就应该知道了.