黑马程序员----【javaSE基础】个人总结--代码块

------- android培训java培训、期待与您交流! ----------



1,局部代码块

局部代码块(定义在方法里)

作用:控制变量的生命周期;

在程序中,当我们已经使用完 x 后,并且在接下来的代码中,不会再用到x,那么就没必要让x 在内存中占用空间了,这用情况下,可以使用 局部代码块,将x及其所设计到的区域封装为局部代码块,他们在程序执行中顺序不变,只是在执行完成后消失。

public voidmethod(){

      {

           int x = 4;

           System.out.println("x="+x);

      }

}

这种写法开发并不常见,但是面试可能会出现,它的作用就是可以限定变量的生命周期.

2,构造代码块:(初始化块)

作用:它可以给所有对象进行初始化

存在于:类中。

定义在类里

{

      System.out.println("我是初始化块")

}

括号里的是初始化块,这里面的代码在创建java对象时执行,而且在构造器之前执行!

其实初始化块就是构造器的补充,初始化块是不能接收任何参数的,定义的一些所有对象共有的属性、方法等内容时就可以用初始化块了初始化!!

好处是可以提高初始化块的复用,提高整个应用的可维护性。

当类中的构造方法以重载的形式存在时,并且有共同成员变量或共同的方法时,可以通过构造代码块对其进行初始化;这样可以减少代码的重复!

3,静态代码块:

作用:给类进行初始化。

当类中的方法都被静态了化,并且构造方法被private了,这时我们不能,在将这个类实例化,然而又想让类增加一些属性,就可以使用静态代码块

格式:

            static{

                  静态代码块中的执行语句

            }

特点:随着类的加载而执行,只执行一次并优先于主函数。 用于给类进行初始化。

Persong   p  =new  Person("XX",XX);

这句话执行了:(对象初始化过程)

   <1> 因为new用到了Person.class,所以会先找到Persong.class文件并加载到内存中

   <2> 执行该类中的static代码块,如果有的话,给Person.class类进行初始化

   <3> p定义函数中,那么在栈内存中开辟一个变量空间p。

   <4> 在堆内存中给对象分配空间,并分配内存地址值

   <5> 在堆内存中建立对象特有属性,并进行默认初始化

   <6> 给对象中的属性进行显示初始化。

   <7> 调用构造代码块对对象进行初始化。(执行类中的构造代码块)(6,7是和源码的顺序有关)

   <8> 调用对应的构造函数进行对象初始化。对象初始化完毕。

   <9> 将内存地址赋给栈内存中的p变量。让p变量指向该对象。

静态代码块和构造代码块的异同:

相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,

不同点:静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。

  静态代码块只在第一次new执行一次,之后不再执行,而构造代码块在每new一次就执行一次。

  非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。

------- android培训java培训、期待与您交流! ----------

1.方法中的内部类能不能访问方法中的局部变量,为什么? 2.分析运行结果,说明原理。(没有分析结果不得分) import java.util.ArrayList; class Data { int val; } public class Test { public static void main(String args[]) { Data data = new Data(); ArrayList list = new ArrayList(); for (int i = 100; i < 103; i++) { data.val = i; list.add(data); } for (Data d : list) { System.out.println(d.val); } } } 3.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 4.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 5.定义一个文件输入流,调用read(byte[] b)方法将exercise.txt * 文件中的所有内容打印出来(byte数组的大小限制为5)。 6.存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串 www.itheima.com int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 7.有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常, * 在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。 * 在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。 * 完成这个例子,请说出java中针对异常的处理机制。 8.编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 9.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, * 然后打印出这个十进制整数对应的二进制形式。 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况, * 并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。 * 提示:十进制数转二进制数的方式是用这个数除以2, * 余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2, * 这次得到的余数就是次低位,如此循环,直到被除数为0为止。 * 其实,只要明白了打印出一个十进制数的每一位的方式 * (不断除以10,得到的余数就分别是个位,十位,百位), * 就很容易理解十进制数转二进制数的这种方式。 10.有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。 * 问:最后剩下的是100人中的第几个人
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值