java 基础学习之点滴

系统 1608 0

 

  1. 每个实例拥有一个实例变量;每种类别之下共享一个静态变量。
  2. 编译器会处理除RuntimeException外的所有Exception。
  3. try...catch...finally中,finally无论如何都会被最后执行。即使try & catch 内含有return,程序也会在return前先执行finally
  4. try...catch中,如果有多个同父类(除Exception外)的Exception,catch Exception的顺序从上到下应该是子类->父类。否则父类的Exception处理会掩盖了子类的Exception处理。
  5. 在一个方法中,如果出现Exception,并处理了该Exception后,没有重新throw该Exception,则try...catch...finally外的代码还会继续被执行。这会对程序产生灾难性影响的。
            public static void main(String[] arg) {
    	String key = "yes";
    	
    	try {
    		midlefun(key);
    	} catch (Exception e) {
    		e.printStackTrace();
    	}
    	
    	System.out.println("end of main");
    }
    
    static void midlefun(String key) throws Exception {
    	try {
    		System.out.println("start try");
    		doRisky(key);
    		System.out.println("end try");
    	} catch (Exception e) {
    		System.out.println("Exception from midlefun");
    //			throw new Exception();	//如果注释这一条,"end of midlefun"就会被打印出来
    	} finally {
    		System.out.println("finally");
    	}
    	System.out.println("end of midlefun");
    }
    
    static void doRisky(String key) throws Exception{
    	System.out.println("start risky");
    	if("yes".equals(key)) {
    		throw new Exception();
    	}
    	System.out.println("end risky");
    	return ;
    }
          
     
  6. 方法中的Exception应该要自己处理,如果还需要调用者对该异常也做出反应,则需要再throw出来。
  7. Java 的输入 / 输出 API 带有链接类型的串流,它代表来源与目的地之间的连接,连接串流将串流与其他串流连接起来。例如: PipedOutputStream

    一般来讲,串流要两两连接才能做出有意义的事情 其中一个表示连接,另一个则是要被调用方法的。由于 Java 中有丰富的输入 / 输出流,只要配合起来就可以完成各种任务,达到最大的实用性!

    下面的图是一个演示。保存 java 的对象到一个文件中。

  8.  

  9. 内部类对外部类有特权,可以自由地存取它的内容,就算是私有的内容也一样。内部类可以把外部的方法或变量当作是自己的。例如:
            public class MyOuter {
    	private int x;
    	
    	public int getX() {
    		return x;
    	}
    	
    	class MyInner{
    		void go() {
    			x = 42;	//调用外部类的私有对象
    		}
    	}
    	
    	MyInner inner = new MyInner();	//初始化内部类
    	
    	public void doStuff() {
    		inner.go();
    	}
    	
    	public static void main(String[] arg) {
    		MyOuter outer = new MyOuter();
    		
    		System.out.println(outer.getX());
    		outer.doStuff();
    		
    		System.out.println(outer.getX());
    	}
    }
          
     如果需要在外部类中生成内部类变量,则需要首先生成外部类对象。这是由于内部类对外部类的那个特权决定的。
            public static void main(String[] arg) {
    	MyOuter outer = new MyOuter();
    	
    	System.out.println(outer.getX());
    	MyOuter.MyInner inner = outer.new MyInner();
    	inner.go();
    	
    	System.out.println(outer.getX());
    }
          
     内部类一般是在GUI程序中使用比较多。添加ActionListener的时候。
  10. 线程(Thread)
      ~线程启动需要有一个Runnable对象。
      ~线程有三个状态:1.新建(Thread thread = new Thread(runnable););2.可执行(thread.start(););3.执行中(何时被执行由java虚拟机来管理,你无法干预。并且多线程运行中,多个任务会被交替执行,而不是一个一个的被执行);4.堵塞(因为Thread可能在等待其他程序的回复)。
      ~由于多个Thread由虚拟机来管理交替执行,PS:main函数也是一个Thread,其被执行的顺序都是我们无法预测的。例如下面的代码:
            public static void main( String[] args )
    {
    	System.out.println("start");
    	Thread myThread = new Thread(new Runnable() {
    		@Override
    		public void run() {
    			System.out.println("in thread");				
    		}
    	});
    	
    	myThread.start();
    	
    	System.out.println("back to main");
    }
          
     并不是每次都能够得到下列输出的:
      start
      back to main
      in thread
      有可能得到下面的输出:
      start
      in thread
      back to main
     
      这要看虚拟机开心不开心了。^_^
      ~当某个runnable任务对某个状态敏感,且多个Thread都会操作该状态时,就会产生竞争。这时候可以在 操作该状态的方法 上,增加修饰符synchronized,以达到加锁的目的。
      ~无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
      ~每个对象只有一个锁(lock)与之相关联。
      ~实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。
  11. 待续

java 基础学习之点滴


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论