A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 康师傅-蛋黄派 中级黑马   /  2014-10-15 08:17  /  1531 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

可以说构造代码块初始化的是共同属性,而static修饰的是共同属性的值吗?

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

11 个回复

倒序浏览
啊啊啊啊啊啊啊啊啊?怎么没人回答
回复 使用道具 举报
我说下我所了解的,不知道对不对:
构造代码块是随类的运行而运行,每个函数都会运行
static是静态,也可以说是共同的,是需要调用才会运行的
回复 使用道具 举报
Eagle 发表于 2014-10-15 10:00
我说下我所了解的,不知道对不对:
构造代码块是随类的运行而运行,每个函数都会运行
static是静态,也可以 ...

楼主也说的差不多吧,构造代码块是初始化,static是修饰。嘿嘿。纯属个人理解,菜鸟一只,不知道对不对。
回复 使用道具 举报
康师傅-蛋黄派 来自手机 中级黑马 2014-10-15 10:26:48
报纸
Eagle 发表于 2014-10-15 10:00 我说下我所了解的,不知道对不对: 构造代码块是随类的运行而运行,每个函数都会运行 static是静态,也可以 ...

static是随着类的加载而加载,构造代码块感觉应该比static后运行,类建立好之后,在堆内存中初始化属性,但都是对象的共同属性,除了存储位置不同,还有什么不同呢?想的我都晕了。
回复 使用道具 举报
构造代码块是每次实例化对象都会执行,static是仅在该类被加载时执行一次,如果两个都存在,先执行static
回复 使用道具 举报
zhappy 中级黑马 2014-10-15 10:43:35
7#
有学了一些

点评

不要相同的帖子去不同板块都发一遍!!这样水帖水回复没好处,只能让我更加关注你。口头警告  发表于 2014-10-15 11:43
回复 使用道具 举报
(づ ̄_3 ̄)づ 发表于 2014-10-15 10:37
构造代码块是每次实例化对象都会执行,static是仅在该类被加载时执行一次,如果两个都存在,先执行static ...

可以认为构造代码块的共同属性的值是变化的,static是不变的吗?
回复 使用道具 举报
本帖最后由 刘树弘 于 2014-10-15 12:19 编辑
  1. public class Static_ extends BS{
  2.         static {
  3.                 new BS(0);
  4.         }        
  5.         static BS bs1= new BS(1);
  6.         {
  7.                 new BS(3);
  8.         }        
  9.         BS bs3 = new BS(4);

  10.         public Static_(Object o){
  11.                 System.out.println("构造 Static_ Object");
  12.         }
  13.         public Static_(String s){
  14.                 System.out.println("构造 Static_ String");
  15.         }
  16.         
  17.         {
  18.                 new BS(5);
  19.         }
  20.         static {
  21.                 new BS(2);
  22.         }
  23.         public static void main(String[] arge){
  24.                 new Static_(null);
  25.                 new Static_(new Object());
  26.         }
  27.         
  28. }
  29. class BS {
  30.         static{
  31.                 System.out.println("BS 静态代码块");
  32.         }
  33.         public BS(int i ){
  34.                 System.out.println("构造B"+i);
  35.         }
  36.         public BS(){
  37.                 this(-1);
  38.         }
  39. }
复制代码

输出:
BS 静态代码块
构造B0
构造B1
构造B2
构造B-1
构造B3
构造B4
构造B5
构造 Static_ String
构造B-1
构造B3
构造B4
构造B5
构造 Static_ Object

结论:
静态赋值语句和静态代码块总是先于构造相关的代码执行。
父类代码先与子类代码执行。
同样是静态的代码,写在前面的代码先于后面的执行。构造的代码相似。
构造赋值语句和构造代码块总是先于构造函数执行。
总是调用参数类型完全一致的构造函数。
静态代码只执行一次。
能用赋值语句解决的就用赋值语句解决。否则用代码块解决(比如初始化某值可能抛异常,或某方法应当调用却没有返回值);
初始化某个类型的对象时,每个对象都要调用的代码放构造赋值语句和构造代码块,否则构造函数。

回复 使用道具 举报
类中static代码块比构造代码块先一步执行
但static代码快只会在内存中新建一次
                Ø 生命周期最长。
                Ø 随着类的加载而加载。
                Ø 随着类的消失而消失。
                Ø 优先于对象存在。
                Ø 被所有对象共享。
                Ø 可以直接被类型所调用。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报 1 0
康师傅-蛋黄派 来自手机 中级黑马 2014-10-15 13:07:45
11#
刘树弘 发表于 2014-10-15 12:09 输出: BS 静态代码块 构造B0

大神,膜拜啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马