static:①可修饰变量(属性);②可修饰方法;③可修饰代码块。 Static int data语句说明data为类变量,为一个类的共享变量,属于整个类。 Int data为实例变量。 例: static int data; ml.data=0; ml.data++的结果为1,此时m2.data的结果也为1。 Static定义的是一块为整个类共有的一块存储区域,其发生变化时访问到的数据都时经过变化的。 其变量可以通过类名去访问:类名变量名。与通过访问对象的编译时类型访问类变量为等价的。 Public static void printData( 表明此类方法为类方法(静态方法) 静态方法不需要有对象,可以使用类名调用。 静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象 的概念。This.data是不可用的。 一般情况下,主方法是静态方法,所以可调用静态方法,主方法为静态方法是因为它是整个软件系统的 入口,而进入入口时系统中没有任何对象,只能使用类调用。 覆盖不适用于静态方法。 静态方法不可被覆盖。(允许在子类中定义同名静态方法,但是没有多态,严格的讲,方法间没有多态 就不能称为覆盖) 当static修饰代码块时(注:此代码块要在此类的任何一个方法之外),那么这个代码块在代码被装载进 虚拟机生成对象的时候可被装载一次,以后再也不执行了。 一般静态代码块被用来初始化静态成员。 Static通常用于Singleton模式开发: Singleton是一种设计模式,高于语法,可以保证一个类在整个系统中仅有一个对象。 11.30 final可以修饰类、属性、方法。 当用final修饰类的时候,此类不可被继承,即final类没有子类。这样可以用final保证用户调用时动作 的一致性,可以防止子类覆盖情况的发生。 当利用fnal修饰一个属性(变量)的时候,此时的属性成为常量。 JAVA利用final定义常量(注意在JAVA命名规范中常量需要全部字母都大写): Final int AGE=10; 常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。 Final可以配合static使用。? Static final int age=10; 在JAVA中利用public static final的组合方式对常量进行标识(固定格式)。 对于在构造方法中利用al进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效。 达内java学习笔记 6
达内 java 学习笔记 6 static:①可修饰变量(属性);②可修饰方法;③可修饰代码块。 Static int data 语句说明 data 为类变量,为一个类的共享变量,属于整个类。 Int data 为实例变量。 例: static int data; m1.data=0; m1.data++的结果为 1,此时 m2.data 的结果也为 1。 Static 定义的是一块为整个类共有的一块存储区域,其发生变化时访问到的数据都时经过变化的。 其变量可以通过类名去访问:类名.变量名。与通过访问对象的编译时类型访问类变量为等价的。 Public static void printData(){} 表明此类方法为类方法(静态方法) 静态方法不需要有对象,可以使用类名调用。 静态方法中不允许访问类的非静态成员,包括成员的变量和方法,因为此时是通过类调用的,没有对象 的概念。This.data 是不可用的。 一般情况下,主方法是静态方法,所以可调用静态方法,主方法为静态方法是因为它是整个软件系统的 入口,而进入入口时系统中没有任何对象,只能使用类调用。 覆盖不适用于静态方法。 静态方法不可被覆盖。(允许在子类中定义同名静态方法,但是没有多态,严格的讲,方法间没有多态 就不能称为覆盖) 当 static 修饰代码块时(注:此代码块要在此类的任何一个方法之外),那么这个代码块在代码被装载进 虚拟机生成对象的时候可被装载一次,以后再也不执行了。 一般静态代码块被用来初始化静态成员。 Static 通常用于 Singleton 模式开发: Singleton 是一种设计模式,高于语法,可以保证一个类在整个系统中仅有一个对象。 11.30 final 可以修饰类、属性、方法。 当用 final 修饰类的时候,此类不可被继承,即 final 类没有子类。这样可以用 final 保证用户调用时动作 的一致性,可以防止子类覆盖情况的发生。 当利用 final 修饰一个属性(变量)的时候,此时的属性成为常量。 JAVA 利用 final 定义常量(注意在 JAVA 命名规范中常量需要全部字母都大写): Final int AGE=10; 常量的地址不可改变,但在地址中保存的值(即对象的属性)是可以改变的。 Final 可以配合 static 使用。 ? Static final int age=10; 在 JAVA 中利用 public static final 的组合方式对常量进行标识(固定格式)。 对于在构造方法中利用 final 进行赋值的时候,此时在构造之前系统设置的默认值相对于构造方法失效
常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值。Final int=3; ②在构造的时候赋值。 局部变量可以随时赋值。 利用final定义方法:这样的方法为一个不可覆盖的方法。 Public final void print(){}; 为了保证方法的一致性(即不被改变),可将方法用final定义。 如果在父类中有final定义的方法,那么在子类中继承同一个方法。 如果一个方法前有修饰词private或static,.则系统会自动在前面加上final。即private和static 方法默认均为final方法。 注:final并不涉及继承,继承取决于类的修饰符是否为private、default、protected还是public。 也就是说,是否继承取决于这个方法对于子类是否可见。 Abstract(抽象)可以修饰类、方法 如果将一个类设置为abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。 Abstract可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。 Abstract虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。 Final和abstract永远不会同时出现。 当abstract用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子 类覆盖该方法之后方法才能够生效。 注意比较: private void print(;此语句表示方法的空实现。 Abstract void print();此语句表示方法的抽象,无实现。 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。 反之,如果一个类为抽象类,那么其中可能有非抽象的方法。 如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一 个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须 为抽象类,这与此类为非抽象冲突,所以报错。 所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。 只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握! 为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成abstract 类。如果没有定义抽象的父类,那么编译会出现错误。 Abstract和static不能放在一起,否则便会出现错误。(这是因为static不可被覆盖,而abstract为了生 效必须被覆盖。) 例:(本例已存在1 CODING\abstract\TestClass..java文件中) public class TestClass{ public static void main(String args){ 达内java学习笔记
达内 java 学习笔记 7 常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值。Final int x=3; ②在构造的时候赋值。 局部变量可以随时赋值。 利用 final 定义方法:这样的方法为一个不可覆盖的方法。 Public final void print(){}; 为了保证方法的一致性(即不被改变),可将方法用 final 定义。 如果在父类中有 final 定义的方法,那么在子类中继承同一个方法。 如果一个方法前有修饰词 private 或 static,则系统会自动在前面加上 final。即 private 和 static 方法默认均为 final 方法。 注:final 并不涉及继承,继承取决于类的修饰符是否为 private、default、protected 还是 public。 也就是说,是否继承取决于这个方法对于子类是否可见。 Abstract(抽象)可以修饰类、方法 如果将一个类设置为 abstract,则此类必须被继承使用。此类不可生成对象,必须被继承使用。 Abstract 可以将子类的共性最大限度的抽取出来,放在父类中,以提高程序的简洁性。 Abstract 虽然不能生成对象,但是可以声明,作为编译时类型,但不能作为运行时类型。 Final 和 abstract 永远不会同时出现。 当 abstract 用于修饰方法时,此时该方法为抽象方法,此时方法不需要实现,实现留给子类覆盖,子 类覆盖该方法之后方法才能够生效。 注意比较: private void print(){};此语句表示方法的空实现。 Abstract void print(); 此语句表示方法的抽象,无实现。 如果一个类中有一个抽象方法,那么这个类一定为一个抽象类。 反之,如果一个类为抽象类,那么其中可能有非抽象的方法。 如果让一个非抽象类继承一个含抽象方法的抽象类,则编译时会发生错误。因为当一个非抽象类继承一 个抽象方法的时候,本着只有一个类中有一个抽象方法,那么这个类必须为抽象类的原则。这个类必须 为抽象类,这与此类为非抽象冲突,所以报错。 所以子类的方法必须覆盖父类的抽象方法。方法才能够起作用。 只有将理论被熟练运用在实际的程序设计的过程中之后,才能说理论被完全掌握! 为了实现多态,那么父类必须有定义。而父类并不实现,留给子类去实现。此时可将父类定义成 abstract 类。如果没有定义抽象的父类,那么编译会出现错误。 Abstract 和 static 不能放在一起,否则便会出现错误。(这是因为 static 不可被覆盖,而 abstract 为了生 效必须被覆盖。) 例:(本例已存在\CODING\abstract\TestClass.java 文件中) public class TestClass{ public static void main(String[] args){
SuperClass sc=new SubClass(; Sc.printO); Abstract class SuperClass{ Abstract void print();} class SubClass extends SuperClassO{ void printo){ System.out.println(“print'”)i} JAVA的核心概念:接口(interface) 接口与类属于同一层次,实际上,接口是一种特殊的抽象类。 如: interface IA public interface:公开接口 与类相似,一个文件只能有一个public接口,且与文件名相同。 在一个文件中不可同时定义一个public接口和一个public类。 一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。 一个类实现一个接口的格式: class IAImple implements IA{ ; 一个类实现接口,相当于它继承一个抽象类。 类必须实现接口中的方法,否则其为一抽象类。 实现中接口和类相同。 接口中可不写public,但在子类中实现接口的过程中public不可省。 (如果剩去public则在编译的时候提示出错:对象无法从接口中实现方法。) 注: ①一个类除继承另外一个类,还可以实现接口; class IAImpl extends java.util.Arrylist implement IA{} 继承类 实现接口 这样可以实现变相的多继承。 ②一个类只能继承另外一个类,但是它可以继承多个接口,中间用“,”隔开。 Implements IA,IB 所谓实现一个接口,就是指实现接口中的方法。 ③接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。 例:interface IC extends IA,IB{U; 接口也可以用于定义对象 IA I=new IAImpl(); 实现的类从父类和接口继承的都可做运行时类型。 IAImple extends A implement IA,IB IB I=new IAImple(; 达内java学习笔记
达内 java 学习笔记 8 SuperClass sc=new SubClass(); Sc.print(); } Abstract class SuperClass{ Abstract void print();} } class SubClass extends SuperClass(){ void print(){ System.out.println(“print”);} } JAVA 的核心概念:接口(interface) 接口与类属于同一层次,实际上,接口是一种特殊的抽象类。 如: interface IA{ } public interface:公开接口 与类相似,一个文件只能有一个 public 接口,且与文件名相同。 在一个文件中不可同时定义一个 public 接口和一个 public 类。 一个接口中,所有方法为公开、抽象方法;所有的属性都是公开、静态、常量。 一个类实现一个接口的格式: class IAImple implements IA{ };一个类实现接口,相当于它继承一个抽象类。 类必须实现接口中的方法,否则其为一抽象类。 实现中接口和类相同。 接口中可不写 public,但在子类中实现接口的过程中 public 不可省。 (如果剩去 public 则在编译的时候提示出错:对象无法从接口中实现方法。) 注: 1 一个类除继承另外一个类,还可以实现接口; class IAImpl extends java.util.Arrylist implement IA{} 继承类 实现接口 这样可以实现变相的多继承。 2 一个类只能继承另外一个类,但是它可以继承多个接口,中间用“,”隔开。 Implements IA,IB 所谓实现一个接口,就是指实现接口中的方法。 3 接口和接口之间可以定义继承关系,并且接口之间允许实现多继承。 例:interface IC extends IA,IB{}; 接口也可以用于定义对象 IA I=new IAImpl(); 实现的类从父类和接口继承的都可做运行时类型。 IAImple extends A implement IA,IB IB I=new IAImple();
I instance of IAImple; I instance of A; I instance of IA; I instance of IB; 返回的结果均为true. 接口和多态都为JAVA技术的核心。 接口往往被我们定义成一类XX的东西。 接口实际上是定义一个规范、标准。 ①通过接口可以实现不同层次、不同体系对象的共同属性; 通过接口实现write once as anywhere. 以JAVA数据库连接为例子:JDBC制定标准;数据厂商实现标准;用户使用标准。 接口通常用来屏蔽底层的差异。 ②接口也因为上述原因被用来保持架构的稳定性。 JAVA中有一个特殊的类:Object。它是JAVA体系中所有类的父类(直接父类或者间接父类)。 此类中的方法可以使所的类均继承。 以下介绍的三种方法属于Object: (I)finalize方法:当一个对象被垃圾回收的时候调用的方法。 (2)toString0:是利用字符串来表示对象。 当我们直接打印定义的对象的时候,隐含的是打印toString(的返回值。 可以通过子类作为一个toString0来覆盖父类的toString(0。 以取得我们想得到的表现形式,即当我们想利用一个自定义的方式描述对象的时候,我们应该覆盖 toStringO (3)equal 首先试比较下例: String A=new String("hello"); String A=new String("hello"); A=B(此时程序返回为FALSE) 因为此时AB中存的是地址,因为创建了新的对象,所以存放的是不同的地址。 附加知识: 字符串类为JAVA中的特殊类,String中为final类,一个字符串的值不可重复。因此在JAVA VM(虚 拟机)中有一个字符串池,专门用来存储字符串。如果遇到String a=”hello”时(注意没有NEW,不是 创建新串),系统在字符串池中寻找是否有”helo”,此时字符串池中没有”helo”,那么系统将此字符串 存到字符串池中,然后将”helo”在字符串池中的地址返回a。如果系统再遇到String b=”hello'”,此时系 统可以在字符串池中找到“helo”。则会把地址返回b,此时a与b为相同。 String a=”hello'”; System.out.println(a=="hello"); 系统的返回值为true。 故如果要比较两个字符串是否相同(而不是他们的地址是否相同)。可以对a调用equa: System.out.println(a.equal(b)); 达内java学习笔记 9
达内 java 学习笔记 9 I instance of IAImple; I instance of A; I instance of IA; I instance of IB; 返回的结果均为 true. 接口和多态都为 JAVA 技术的核心。 接口往往被我们定义成一类 XX 的东西。 接口实际上是定义一个规范、标准。 1 通过接口可以实现不同层次、不同体系对象的共同属性; 通过接口实现 write once as anywhere. 以 JAVA 数据库连接为例子:JDBC 制定标准;数据厂商实现标准;用户使用标准。 接口通常用来屏蔽底层的差异。 ②接口也因为上述原因被用来保持架构的稳定性。 JAVA 中有一个特殊的类: Object。它是 JAVA 体系中所有类的父类(直接父类或者间接父类)。 此类中的方法可以使所的类均继承。 以下介绍的三种方法属于 Object: (1) finalize 方法:当一个对象被垃圾回收的时候调用的方法。 (2) toString():是利用字符串来表示对象。 当我们直接打印定义的对象的时候,隐含的是打印 toString()的返回值。 可以通过子类作为一个 toString()来覆盖父类的 toString()。 以取得我们想得到的表现形式,即当我们想利用一个自定义的方式描述对象的时候,我们应该覆盖 toString()。 (3)equal 首先试比较下例: String A=new String(“hello”); String A=new String(“hello”); A==B(此时程序返回为 FALSE) 因为此时 AB 中存的是地址,因为创建了新的对象,所以存放的是不同的地址。 附加知识: 字符串类为 JAVA 中的特殊类,String 中为 final 类,一个字符串的值不可重复。因此在 JAVA VM(虚 拟机)中有一个字符串池,专门用来存储字符串。如果遇到 String a=”hello”时(注意没有 NEW,不是 创建新串),系统在字符串池中寻找是否有”hello”,此时字符串池中没有”hello”,那么系统将此字符串 存到字符串池中,然后将”hello”在字符串池中的地址返回 a。如果系统再遇到 String b=”hello”,此时系 统可以在字符串池中找到 “hello”。则会把地址返回 b,此时 a 与 b 为相同。 String a=”hello”; System.out.println(a==”hello”); 系统的返回值为 true。 故如果要比较两个字符串是否相同(而不是他们的地址是否相同)。可以对 a 调用 equal: System.out.println(a.equal(b));
q明理*当领个对象中字符串的顺序。 a.equal(b)是手b的值的比较。 注意下面程序: student a=new student("LUCY",20); student b=new student(“LUCY”,20); System.out.println(a==b); System.out.println(a.equal(b)); 此时返回的结果均为false。 以下为定义equal(加上这个定义,返回ture或false) public boolean equals(Object o){ student s=(student)o; if (s.name.equals(this.name)&&s.age==this.age) else return false; }如果equals0返回的值为 以下为实现标准equals的流程: public boolean equals(Object o){ if(this==o)return trun;/此时两者相同 if (o==null)return false; if(o instanceof strudent)return false;/不同类 studeng s=(student)o;/强制转换 if (s.name.equals(this.name)&&s.age==this.age)return true; else return false; 以上过程为实现equals的标准过程。 练习:建立一个employee类,有String name,int id,double salary.运用get和set方法,使用toString, 使用equals。 封装类: JAVA为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被Object来装载。 除了int和char,其余类型首字母大写即成封装类。 转换字符的方式: int I=10; String s=l+””; String s1=String.valueOf(i); Int I=10; Interger I class=new integer(D); 看javadoc的帮助文档。 附加内容: “一”在任何时候都是比较地址,这种比较永远不会被覆盖。 达内java学习笔记 10
达内 java 学习笔记 10 equal 用来比较两个对象中字符串的顺序。 a.equal(b)是 a 与 b 的值的比较。 注意下面程序: student a=new student(“LUCY”,20); student b=new student(“LUCY”,20); System.out.println(a==b); System.out.println(a.equal(b)); 此时返回的结果均为 false。 以下为定义 equal(加上这个定义,返回 ture 或 false) public boolean equals(Object o){ student s=(student)o; if (s.name.equals(this.name)&&s.age==this.age) else return false; }如果 equals()返回的值为 以下为实现标准 equals 的流程: public boolean equals(Object o){ if (this==o) return trun; //此时两者相同 if (o==null) return false; if (! o instanceof strudent) return false; //不同类 studeng s=(student)o; //强制转换 if (s.name.equals(this.name)&&s.age==this.age) return true; else return false; } 以上过程为实现 equals 的标准过程。 练习:建立一个 employee 类,有 String name,int id,double salary.运用 get 和 set 方法,使用 toString, 使用 equals。 封装类: JAVA 为每一个简单数据类型提供了一个封装类,使每个简单数据类型可以被 Object 来装载。 除了 int 和 char,其余类型首字母大写即成封装类。 转换字符的方式: int I=10; String s=I+” ”; String s1=String.valueOf(i); Int I=10; Interger I_class=new integer(I); 看 javadoc 的帮助文档。 附加内容: “==”在任何时候都是比较地址,这种比较永远不会被覆盖