3  /  4  页   1234 跳转 查看:13735

标题: 有一起学java的吗?

回复: 有一起学java的吗?

好,有一票了.起码不是无人问津了.
引用
 

回复:有一起学java的吗?

楼主有段时间没发新知识了,加油啊
TestFocus焦点测试网

助力软件测试行业,推动软件测试发展
引用
 

回复:有一起学java的吗?

实在不好意思,这段时间忙自己的事去了,这周末一定发,还要多发点.
奇怪的事,到现在为止,没人提问题,也没人和我邮件联系过.难道大家都没有问题吗?要知道我几年前学java时,可是一大队问题没人可以问.痛苦啊
引用
 

回复:有一起学java的吗?

不是我违背诺言,第一,我好几天上不来这个论坛,听说是服务器有问题.
第二,我家硬盘坏了,这几天我一直在重复开机-关机-重启.很惨!
明天,我要修机器,再发文.
就算没人看,我也要把它发完,也是为了对自己的督促.
引用
 

回复:有一起学java的吗?

对楼主的学习态度表示感谢和钦佩,希望楼主能坚持下去。

楼主什么时候上不来的?我们服务器是没问题的,但用的是网通的线路,偶尔会断,我们在内网有时候发现不了,如果比较频繁的话我们会想办法解决
TestFocus焦点测试网

助力软件测试行业,推动软件测试发展
引用
 

回复: 有一起学java的吗?

6
初始化和清除
初始化和清除是程序设计安全性的二个重要方面。


6.1 定义初始化:在定义一个成员同时可以进行初始化,同时可以调有函数,可以用变量(前面的)。完成于构造函数之前。

初始化块相当于一条定义初始化语句。

class MeasureMent(){

boolean b=true;


char c=’x’;


int i=47;

}
class MeasureMent(){

Depth o = new Depth();

}
可以调用一个方法进行初始化。
class CInit(){

int i = f();

}
这个方法也可以调用参数。
class CInit(){

int i = f();


int k = g(i);
//
按你的写书顺序,后面出现的变量可以使用前面的变量来初始化。

}
但是那些参数不能是尚未初始化的其它数据成员。


6.2 初始化顺序:在一个类里,初始化的顺是由变量在类内的定义顺序决定的。但都在构造函数之前。


3.1
在采取其它任何操作之前,为对象分配的存储空间初始化成二进制。
3.2
调用基础类构造器。
3.3
按照原先声明的顺序调用成员初始化代码。
3.4
调用衍生类构造器的主体。


6.3 静态数据初始化:静态的东西属于类
  静态数据成员只在这个类的第一个对象要创建时初始化。
Class Cups{
Static{

/*
静态初始化块,相当于一条静态初始化语句 */

}
}

静态成员对象-à非静态成员、对象---à构造器


1、
类型为Dog的一个对象首次创建时,或者Dog类的静态方法/数据首次访问时,java解释器必须找到Dog.class
2、
找到Dog.class后,它的所有的静态初始化模块都会运行。因为,静态初始化仅发生一次。

3、
创建一个new Dog()时,new语句首先会在堆内分配一个足够多的空间。
4、
这个空间将会被清除为0,因此Dog中所有数据成员对象都得到缺省值。
5、
执行定义初始化。
6、
执行构造函数。

6.4 带有继承关系的初始化顺序:1、
先装载父类的static成员。
2、
装载子类的static成员。
3、
初始化父类的成员,构造函数。
4、再初始化子类的成员,构造函数。

今天发的不太多,明后天如有时间再补一些。
今天心中很闷,觉得很受打击。很想有人安慰。和开发人员打交道就那么难吗?为什么开发人员会那么轻视测试人员?其实我从开发转过来的,对二边的工作都很理解。测试人员是很想和开发人员打好交道的,往往是开发人员不太理会。唉......

引用
 

回复:有一起学java的吗?

楼主家电脑硬盘磁道坏了,暂时发不成了...
不是我,是风
引用
 

回复: 有一起学java的吗?

硬盘终于修好了,数据也救回来了,庆幸中......

我现在知道备份的重要性了。

昨晚准备继续发帖的,但上不了bbs.听说网又坏了。这该死的网。今晚再发吧。
引用
 

回复: 有一起学java的吗?

今天go on

11异常与出错处理能否正确处理好运行时刻的异常情况是一个程序的健康标志。
1/3 正常语句 + 2/3 异常处理语句

11.1Exception机制使用异常机制,读、写和调试代码变得清晰。它把处理错误的代码和正常的代码分开。

Throw an exception exception的子类)
throw new NullPointerException();
throw new NullPointerException(“HERE”);
异常发生时,你不能解决问题,所以必须扔出一个异常。
1、
一个异常对象建立起来了。
2、
当前运行的路径被停止(throw所在的scope被中止),异常对象被弹出。
3、
异常处理机制接管,开始寻找一个合适的地方来继续执行。

11.2Catch an exceptionJava的异常处理机制的好处就在于它使我们在一个地方将精力集中在要解决的问题上,而在另一个地方处理来自那部分代码的异常情况。
try{
 
}catch(Type1 id1){

}catch(Type2 id2){
}

catch捕捉到异常并处理后,不再返回到try语句,而是执行try-catch后面的语句。
工作情况:
1、
try{

throw new NULLPointerException;

}catch(NULLPointerException e){
}
throw所在的scope被中止,即try{}语句被中止,throw后面的语句不会被执行,要离开这个scope
要离开这个scope,并且这个scopetry,而且tryp后面的catch能捕捉到这个异常,这个异常就会被处理。再接着执行catch后面的语句。
2、
try{


f();

}catch(NULLPointerException e){
}

f(){
throw new NULLPointerException;
….
}
在调用f函数时,f函数执行中抛出了异常,f函数里throw下面的语句不被执行,并且要离开throw所在的scope。现在throw是在f函数中,离开函数就相当于回到调用f函数的地方。就相当于在f();的地方throw了一个exceptionf();函数之后的语句不执行,并且要离开这个scope,并且这个scope是个try,接下来看这个try之后的catch能不能捕捉到这个catch。能捕捉到就执行这个catch之后的语句,并不回到try里面去。
3、
try{


f();

}catch(NULLPointerException e){
}

f(){

if (b){

throw new NULLPointerException;
….
}
}
if(b)里的throw抛出一个异常,抛出后,就要离开这个scope,这个scope并不是try,再往上一层,(离开if(b)….离开f()….
一层一层离开,直到有try的地方。如果一直到main都没有try,就是离开main,程序就中止了。
throw执出的exception一定要踫到一个try才会有意义。

可以有多个catch,意味着一个try可能抛出多个异常。Catch的匹配按书写顺序。一旦有一个catch匹配到了,执行完catch里的语句后,后面的catch就不管了。
如果try里抛出的异常没有catch来匹配,则整个try-catch变成一个throw,继续往外抛。回到上一个scope里去。

try-catch可以嵌套。

11.3try-catch的匹配不是精确匹配有代码如下:

class Annoyance extends Exception{}
class Sneeze extends Annoyance{}

public class Human{

public void static main(string args[]){


try{


throw new Sneeze();


}catch(Annoyance
a){


System.out.println(“catch annoyance”);


}catch(Sneeze s){


System.out.println(“catch sneeze”);


}


}

}

在这里try中抛出的sneeze异常,会被谁捕捉到?当它遇到第一个catch时就被捕获了(因为sneezeannoyance的类型),第二个catch就不再执行了。
可见catch的匹配不是精确匹配,只要满足这个对象是那个类的对象就可以了。
因此,可以写一个捕捉器捕捉到所有的异常,如下:
一个捕捉任何异常的捕捉器是一个捕捉基础类型异常的捕捉器。
Catch(Exception e){
}
如果你的第一个catch就是这个的话,余下的所有catch将不再被执行。

11.4Interface: ThrowableException类实现了一个接口。有以下重要的函数:
String
getMessage();
这个异常对象里的message.(当你new一个异常时可以给它一个message)

String
toString(); java
里所有的对象都有这个方法,给你这个对象的字符串表达。在这里是给出这个异常的全名。

Void printStackTrace(); 这个异常在什么地方被抛出来的。(一直可追踪到main
Void printStackTrace(PrintStream);

Re_throw:
catch中还可以再抛出异常。
Catch(Exception e){

Throw e;

}
有代码如下:
public static void f() throw Exception{

throw new Exception(“throw from f”)

}


public static void g() throw Exception{
try{

f();

}catch(Exception e){

e.printStackTrace();
//
这个异常是由f();抛出的

throw e;
//throw e.fillInStackTrace();
记住当前的stack trace,填入一个stack trace信处。

}
}

public static void main(string args[]) throws Exception{

try{


g();


}catch(Exception e){


e.printStackTrace();


}

}
现在问题是,在main中调用g();之后e.printStackTrace();会打印出什么?异常是从f()抛出的还是g()抛出的?
运行后可知,from f àfrom gàfrom main
若想要改变此信息,可使用fillInStackTrace();

可以抛出一个与接收到的异常不同的异常。

11.5 Announce for exceptin通知客户程序员自己写的方法可能抛出的异常是一种文明的做法。
Void f() throws tooBig,smallBig{}
如果你要从你的程序中抛出某种异常,必须要申明。
(强迫你申明你要抛出的异常,包括调用的其它的函数所抛出的异常。除非你对异常做了处理。)
但是你可以撒谎申明你并不真正抛出的异常。(可以预先做好对异常的处理,以后再来加上异常。)

11.6 override时的异常限制当你override一个方法时,你只能申明和抛出不比它的父类申明的异常多的异常。

Class A extends Exception{ }
Class B extends A{ }

Abstract class I(){

I() throws A;


Void fevent() throws A;


Void gent() throws B;


Void hent();

}

class c extends Exception(){}
class D extends B{}

interface II {

void fevent() throws c;

}

class cc extends I implements II{

cc() throws A,C;
//CC
的构造函数必须申明它的父类所抛出的异常,还可以抛出自己的异常。


hent() throws A; //
这是不对的,子类的方法不能抛出比它父类更多的异常。


Gent() throws D; //
这是对的,因为DB的子类。


Fevent() throws C;
//
这是不对的。子类的fevent有二个来源,I II,它们抛出的异常是AC,作为它们的子类,它所能抛出的异常应该是AC的交集,这里是空集。


}

11.7 finally异常机制中一定会被执行的代码。
Try{
}catch(){
}finally{
}
只要你进了try,不管你是如何离开的,一定会到finally里来执行它的代码。
进入try离开有三种情况:
1、
没有异常发生(finally的代码要执行)
2、
有异常发生并捕捉到了(finally的代码要执行)
3、
有异常发生没有捕捉到。(离开之前要先执行finally里的代码)

11.8 run-time exceptionrun-time exception不需要主动throw
run-time exception不需要申明
如果一个run-time exception被系统throw后没有被catch,会导致程序终止,并printStackTrace().

引用
 

回复:有一起学java的吗?

这个周未不发新帖了,有事。
没有人回帖吗?太伤心了。:'(
引用
 
3  /  4  页   1234 跳转

版权所有 焦点测试网   Sitemap 免责声明

Powered by Discuz!NT 2.0.1115    Copyright © 2001-2009 Comsenz Inc.
Processed in 0.140625 second(s) , 5 queries.
返顶部