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

📄 day05.txt

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

复习:static,final的区别(课堂代码:Sin1.java)

抽象类:(课堂代码:Sin1.java)(课堂代码:Temple.java , DAcount.java)

	比如银行帐户:有定期,活期,外汇,但有共同的特征就是有这两个属性(本金,id),这种情况就可以采取继承的方式
	    	      但定期,活期,外汇又都有各自的不同之处,可以用多态来实现。

	abstract:抽象的关键字,abstract可以修饰类,修饰方法。抽象类只定义框架,不予实现

	抽象类不能用构造器创建获得一个对象,也就是自身不能直接被实例化,由了类来传递参数。抽象类可以声明引用。
	抽象类可以有构造方法(要被子类调用),可以有静态方法,也可以有主方法

	抽象方法:只有定义没有实现
		  例:public abstract class Account{  //抽象类
        		public abstract String getName();   //抽象方法
		    } 

	注意:如果一个类中有抽象方法,这个类必须是抽象类,为了避免new对象后没有实例。

	      如果某个类没有任何抽象方法,这个类也可以定义为抽象类,即抽象类中不一定有抽象方法,可以有非抽象方法。

	      抽象方法是留给子类实现的,子类必须实现抽象方法,否则也不能new对象,并且也要声明为抽象方法,所在的类要声明为抽象类
	     
	     abstract 与 final  不能同时出现
	     abstract 与 static 也不能同时出现
	     abstract 与 private 也不能同时出现   

接口:

	为解决多继承的问题引入接口,面向接口编程

	定义接口---interface关键字

	接口可以理解为是一个特殊的抽象类,但在语法上和类有区别。

	属性:接口中的所有属性都是公开静态常量(public static final)
	方法:接口中所有方法都是公开抽象方法(public abstract)
	构造方法:接口没有构造方法

	implements 实现的关键字,变相的继承
	
	接口与接口之间可以有继承关系,允许多继承。
	一个类在继承另一个类的同时可以实现接口,并且可实现多个接口
	
	类和接口之间可以定义实现关系,逻辑上相当于接口是实现类的父类型,
	当我们用类去实现接口时,如果不希望实现类是抽象类的话,那么就要实现接口中定义的所有的方法

	接口和多态配合使用,接口不能构造对象,可以作为引用类型(编译时类型),只能调用接口中定义的方法,运行时找接口实现类中实现的方法
	
	如果对接口类型的引用调用方法,调用的一定是接口实现中的方法
	
	所谓接口对象指的是接口实现类的对象

	子             父

	      继承
	类 -----------类(单个)
	    extends

	     实现
	类------------接口(多个) (课堂代码:Interface1.java) 
	    implements
	
	      多继承
	接口----------接口(多个) (课堂代码:Interface1.java)
	     extends

      若是类与类多继承就会形成网状结构,而java里只允许单继承,使类与类形成树状结构。接口解决了多继承的问题,属性都是常量,方法没有实现,故不会形成网状结构。

      接口的使用:1、功能模块 2、标准,一个接口就是一个标准,把制定标准、使用标准、和实现标准分开,标准的使用者和标准的实现者通过标准间接发生联系。
	
封装类:
	
	引用类型更强大

	基本类型的包装类,为了提高效率
	
	JAVA为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被Object来装载。
	除了int(Integer)和char(Character),其余类型首字母大写即成封装类类型名。参考API的java.lang包下的类

	1.4通过构造器转化,5.0可以自动转化

	Integer i2=127;//5.0的新特性,自动封箱
	Integer i5=127; //byte大小的数字自动装箱只有一次
	System.out.println(i5==i2);   这条语句的结果为true,若i2和i5是128或更大时,这条语句的结果就是false了

	转换字符的方式:
	int I=10;
	String s=I+” ”;
	String s1=String.valueOf(i);

	Int I=10;
	Interger I_class=new integer(I);

	封装类.字符串.基本类型


	三种类型六种转换

	       new Integer() 或Integer.valueOf()
	int--------------------------------------->Integer

	             i.intValue() 
	Integer----------------------------------->int

		  Integer.toString(...) 或  String s=100+" "
	int--------------------------------------------------->String

		  Integer.parseInt("...")
	String---------------------------------->int

		    i.toString()
	Integer-------------------------------->String

		Integer.valueOf("...") 或new Integer("...")
	String------------------------------------------------>Integer


Object类中的clone()方法、equals()方法、hashCode()方法和toString()方法:
	
	protected Object clone() throws CloneNotSupportedException:实现Cloneable接口(课堂代码:TestClone.java) 
	
	       类可以被clone,浅clone不需要重写,深clone需要重写

	public boolean equals(Object obj): (课堂代码:Student.java)
	
	public int hashCode():   equals为true,hashCode相同,但hashCode相同,内存地址不一定相同
	
	public String toString(): 返回一个字符串,直接输出一个对象时,会自动调用对象的toString()方法,输出toString()的返回值
     				  当没有覆盖toString()方法时,会输出 :对象名@对象哈希码的无符号十六进制表示组成

String类:

	1、String是一个不变模式:不变模式:一个对象一旦产生就不可能再修改(string就是典型的不变模式);通过不变模式可以做到对象共享;
	
	2、如果用Stirng str = “abc”来创建一个对象时,则系统会先在串池中寻找有没有“abc”这个字符串。
		如果有则直接将对象指向串池中对应的地址,如果没有则在串池中创建一个“abc”字符串。
		所以:String str1 = “abc”;
     			String str2 = “abc”;
     			Str1 = = str2 返回值是ture;他们的地址是一样的。
		也就是说str1和str2都指向了代码空间中相同的一个地址,而这个地址空间保存就是是字符串”abc”;

	如果用String str = new String(“abc”)则直接在堆空间开辟一块存储空间用来存放”abc”这个字符串。
		所以:String str1 = new String(“abc”);
     			String str2 = new String(“abc”);
     			Str1 = = str2 返回值是false;他们的地址是不一样的。
		也就是说str1和str2分别指向了堆空间中不同的两个地址,而这两个地址空间保存的都是字符串”abc”;

	3、java.lang下的StringBuffer类。
		对于字符串连接
		String str=”1”+”2”+”3”+”4”;
		产生:
    			12
    			123
    			1234
		会在串池中产生多余对象,而真正我们需要的只有最后一个对象,用这种方式进行字符串连接时,不管在时间上还是在空间上都会造成相当大的浪费。
		所以我们应该使用 StringBuffer(线程安全的) 或者 StringBuilder(线程不安全的)
		解决方案:
		String s;
		StringBuffer sb = new StringBuffer(“1”);
		ss.append(“2”);
		ss.append(“3”);
		ss.append(“4”);
		S = ss.toString();
		解决后的方案比解决前在运行的时间上相差2个数量级。

	注意:8大包装类及String类不用再去重写equals()和hashCode()方法,因为已经重写过了。
	
	
	String类常用方法:(课堂代码:TestString.java)
		
		indexOf():查找字符符,返回类型int,参数有很多种,>=0代表有,==-1代表无
		
		split():分拆字符串,按照正则表达式,用传递的参数来分,返回String数组
		
		length():返回int类型,代有字符串长度。
	
		getBytes():能够转码,解决中文的乱码问题
		
		subString():求子串

			public String substring(int beginIndex)
			public String substring(int beginIndex,int endIndex)
	
			有以上两种方式,其中beginIndex - 开始处的索引(包括)。endIndex - 结束处的索引(不包括)。 

		replace:是字符的替换,replace All是字符串的替换。
		matches():匹配正则,输入验证

		调用任何String的方法,不会改变自身,除非重新赋值
		
		
	作业:
		班级CLASSROOM,学生(88/其他数字)个、老师1个、机器管理员1个
		学生人数要在构造CLASSROOM的时候强制限定,不可以再改变管理员每天都只有一个,但是可能不同(所有CLASSROOM共享)
		老师、学生、管理员共性怎么处理
		
		(面向对象的思想、封装、继承、多态、静态、final、抽象)
		

⌨️ 快捷键说明

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