⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 day08.txt

📁 达内科技上课的 java学习笔记 分为18天学完
💻 TXT
字号:
                   CoreJava(day08) 2007-12-12   --- 李艳

如何更好的去重写hashCode和equals方法? 
	 public boolean equals(Object o){
	  if(o==null){
		  return false;
	  }else if(this.getClass()==o.getClass()){
		  Person p = (Person)o;
		  return this.id==p.id;
	  }else{
		  return false;
	  }
  }			
	  			
	 public int hashCode(){
	  int temp = this.getClass().hashCode();
	  return temp+this.id*43;
  }
	      
	      
一道面试题:(课堂代码:day08.TestNull.java)
    
    
异常:
		异常不等同于错误。
		异常就是在程序中由于某些特定的因素(内在或外在)导致程序无法继续执行,但不能影响虚拟机正常运行。
		java异常机制:
		    coding---->出现了异常
							    1、先生成一个异常对象(由虚拟机或程序员生成)
							    2、异常对象逐层上抛
    							3、当有处理代码时,调用处理代码(通常放在catch语句中)同时异常不再上抛。
    							4、当main方法也不处理的时候,代码到此执行完毕,即虚拟机终止了此程序。
    异常的分类:
        java.lang.Throwable有两个子类:Error和Exception。
        Exception中的方法:
            public void printStackTrace(); 异常对象大百科,处理时必调的方法。
            public String getMessage();  用来说明异常的信息。
            public Throwable getCause();   用的非常少
        
        							Throwable
                          |
                  -----------------------
                  |                 		|
              	Error            	 	Exception
             		错误		    						|
	  					非常严重                  |                    
       程序员不能处理,没办法      			|
       														 -----------------------------
             				               |             		   					|
              (运行时异常)RuntimeException        				非Runtime异常               				
                      				未检查异常             					已检查异常
                     			由于程序员疏忽造成的       					不可避免的
                       				可避免的                				必须处理,强制处理
                   可处理,可不处理,允许不处理
                   不处理在编译的时候可以通过,但运行时仍会有问题
                   
                   
   几种普通的运行时异常:       
       java.lang.ArithmeticException:算术异常,由于数学运算发生的异常
       java.lang.NullPointerException(常见) :空指针异常,发生这种异常,肯定是用null.了,这个是最常见的。 
			 java.lang.ArrayIndexoutofBoundsException(常见):数组下标越界异常,超出数组长度发生的异常,这是正的超出,比如定义了10个,访问第11个时发生的异常
       java.lang.SecurityException:安全异常
       java.lang.NegativeArraySizeException:也是数组下标越界异常,这是负的超出,比如访问下标为-1

		异常的处理:(课堂代码:FirstException.java,TestStack.java,TestFinally.java)
					try{
					
							可能出错语句
							正常语句   //若发生异常,此语句便不会执行。
							   
					}catch(异常类 e){  
							对异常的处理代码
							
					}finally{
					
							必须执行的语句		
					}
					
				允许try--->catch,try--->finally,try---->catch---->finally。只有try块就会报错了。
		
				可以有多个catch语句块,但catch中异常对象的顺序,次序由小到大,子类必须放在父类的前面
				
				try语句不一定能全部执行,try块中声明的变量在catch语句块中是不能访问的。
				
				finally中写的代码是肯定会被执行的。				
				
		一个面试题,三个单词的区别:	
				final---->修饰符,最终的类,最终的方法,最终的变量
				fianlly---->异常处理中必然要执行的语句块关键字
				finalize--->Object的一个方法,配合gc,垃圾回收
				
				异常的try{}catch处理是很消耗内存的,尽可能不用。
				所以对于RuntimeException最好用if-else判断,取代try{}catch
				
				当调用Integer.parseInt(s),若s的值是abc的话就不能转化为整数了,会出现数字格式异常(java.lang.NumberFormatException)。
				
				throw与throws的区别: (课堂代码: TestThrows.java)
						throw:后跟的是异常对象,代表抛出对象,出现在方法内
						throws:后跟异常类型,出现在方法的参数列表后面。在方法的()和{}之间,代表本方法不处理异常,只抛出。
						
						throw与throws没有必然的联系,不是一定要一起出现的,throws可能抛也可能不抛,而throw是一定会抛的。
						注意:方法的调用者不能抛出比被调用的方法更小的异常种类	
							
			  throws与try{}catch的区别:
			  		throws:是抛出,没有真正的处理,通常叫做异常的转移
			  		try{}catch: 是真正的处理异常,解决异常,中止抛出。
			  
			方法重写时异常的抛出:(课堂代码: SuperA.java,Sub.java)
			    方法的重写中,如果子类的方法抛出的异常是父类方法抛出的异常的父类型,那么编译就会出错:子类无法覆盖父类。  
					结论:子类方法不能比父类方法抛出更大的异常类型。子类抛出的异常或者与父类抛出的异常一致,或者是父类抛出异常的子类型。或者不抛出异常。
								如果父类型无throws时,子类型也不允许出现throws。此时只能使用try catch。
								
					IOException必须要处理,处理方式可以用throws和try{}catch
					
			自定义异常:(课堂代码: AgeException.java,Person.java)
			    1、继承Exception
			    2、写构造器(2个)一个无参,一个有参
					 
		异常总结:
				异常的处理有两种方式:
				    1、try{}catch{}finally{}   真正的处理
				    2、throws 转移
				调试异常:
						1、记忆
						2、留心
				
				
1.4添加的断言:		  								
				断言关键字:assert
				格式:assert 布尔表达式:String;
							如果布尔表达式为false,String会显示。
				
				断言默认是关闭的,需要用-ea 开启  ,用-da关闭
				assert用于调试。不能继承性的打开
				-ea是全部打开,-ea:类名   可以单独打开一个类。
		
第八章:图形用户界面(GUI)   (课堂代码:TestJFrame.java)
		
AWT
		java.awt.* 	
		组件:Component 和 MenuComponent   是根
		容器:Container      存放其它组件的组件,也是组件的子类
		布局管理器:LayoutManager   控制组件在容器中的位置和大小
		
		例:计算器中的窗口就是容器,菜单是菜单组件,文本框是组件,按钮也是组件。
		
		AWT的包结构:
				java.awt.Component(组件类)
						常用的:
								Button(按钮)	TestField(文本框--单行)   TextArea(多行文本) Label(标签---显示文本)
								Panel(面板,不可独立的容器)  Frame(窗口)   Dialog(对话框)								
			
				java.awt.MenuComponent(菜单组件)
						常用的:
								MenuBar(菜单条)		Menu(菜单)			MenuItem(菜单项)
								
				窗口是独立存在的,面板不能独立存在,是要依附于窗口而存在的。
				
				Frame是一个窗体,Dialog是对话框
				
Swing:java.swing.*

		Swing的结构:
		
					Swing是AWT的增强版,5.0加大了Swing的能力。Swing是AWT的子类。
					
					JTable (表格)
 					JTree (树状结构)
					JComboBox   (选项卡)
					
					Swing组件多,组件功能强,支持AWT的功能--事件
									
					AWT学习用
					Swing商用
					
					AWT不是百分百跨平台的,Swing是纯java写的,百分百跨平台,是轻量级组件,不依赖于操作系统。
		
		
		AWT的好处			
					AWT的速度比Swing较快,1.4时体现明显
					Applet小应用程序。用这个做动态。不需要插件
					AWT更接近于操作系统的显示效果
		AWT的坏处:
					非纯JAVA,不能很好的跨平台
					Applet很少应用
					支持它的组件较少
		Swing的好处:
					纯JAVA
					跨平台
					支持更多的功能
					得到了很多公司的支持
		Swing的坏处:
					不支持Applet,需要插件
					消耗内存,速度慢
					Bug多
					与操作系统相比感观上不太好。					
		
		构造图形界面的步骤
				1、选择一个容器   JFrame
				2、设置容器的布局管理器
				3、向容器添加组件
				4、事件的监听	
					
		布局管理器:对于任何一个容器类中都有setLayout()方法,用容器对象调用这个方法,来设置容器的布局管理器(LayoutManager这是一个接口,所有布局管理器都实现了这个接口)。

			可用的布局管理器:
						所有的布局管理器实现了一个接口java.awt.LayoutManager
						
				FlowLayout:  (课堂代码:TestFlow.java)
				
								流式布局管理器。不会改变每一个组件原有大小,即窗口的大小改变时,组件的大小不会随之改变
								特点:组件大小不变,顺序从左到右,对齐方式(左对齐,右对齐,居中),自动换行
								默认的对齐方式是居中。
								FlowLayout(int align);设置对齐方式
								FlowLayout(int align,int hgap,int vgap); hgap是水平间距,vgap是垂直间距。
										
    						Panel系列的默认布局管理就是FlowLayout。
 								后来的组件会挡住前面的组件。
 								
				BorderLayout:(课堂代码:TestBorder.java)
								方位布局管理器。
								JFrame的默认布局管理器
								后来的组件会挡住前面的组件。
								只允许水平扩展。
								
								默认加载在中间(Middle),每个部分只能放一个组件
    								
				GridLayout:(课堂代码:TestGrid.java)
				
								网格布局,通过行列,间距,来用网格分割,把组件放入如网格中,先行后列摆放组件。可以保证每个组件的大小都是一样的,但忽略了组件原来的尺寸。
    						jf.setLayout(new GirdLayout(3,2));  //把容器平均的分为3行2列,先左后右,先上到下的顺序排列

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -