天津做网站制作,临清轴承网站建设,广东品牌网站设计专家,封面上的网站怎么做特点:1:将复杂的事情简单化。2:面向对象将以前的过程中的执行者#xff0c;变成了指挥者。3:面向对象这种思想是符合现在人们思考习惯的一种思想。过程和对象在我们的程序中是如何体现的呢#xff1f;过程其实就是函数#xff1b;对象是将函数等一些内容进行了封装。匿名对象…特点:1:将复杂的事情简单化。2:面向对象将以前的过程中的执行者变成了指挥者。3:面向对象这种思想是符合现在人们思考习惯的一种思想。过程和对象在我们的程序中是如何体现的呢过程其实就是函数对象是将函数等一些内容进行了封装。匿名对象使用场景:1:当对方法只进行一次调用的时候可以使用匿名对象。2:当对象对成员进行多次调用时不能使用匿名对象。必须给对象起名字。在类中定义其实都称之为成员。成员有两种1:成员变量其实对应的就是事物的属性。2:成员函数其实对应的就是事物的行为。所以其实定义类就是在定义成员变量和成员函数。但是在定义前必须先要对事物进行属性和行为的分析才可以用代码来体现。private int age;//私有的访问权限最低只有在本类中的访问有效。注意:私有仅仅是封装的一种体现形式而已。私有的成员:其他类不能直接创建对象访问所以只有通过本类对外提供具体的访问方式来完成对私有的访问可以通过对外提供函数的形式对其进行访问。好处:可以在函数中加入逻辑判断等操作对数据进行判断等操作。总结:开发时记住属性是用于存储数据的直接被访问容易出现安全隐患所以类中的属性通常被私有化并对外提供公共的访问方法。这个方法一般有两个规范写法对于属性 xxx可以使用setXXX(),getXXX()对其进行操作。类中怎么没有定义主函数呢注意:主函数的存在仅为该类是否需要独立运行如果不需要主函数是不用定义的。主函数的解释:保证所在类的独立运行是程序的入口被jvm调用。成员变量和局部变量的区别:1:成员变量直接定义在类中。局部变量定义在方法中参数上语句中。2:成员变量在这个类中有效。局部变量只在自己所属的大括号内有效大括号结束局部变量失去作用域。3:成员变量存在于堆内存中随着对象的产生而存在消失而消失。局部变量存在于栈内存中随着所属区域的运行而存在结束而释放。构造函数:用于给对象进行初始化是给与之对应的对象进行初始化它具有针对性函数中的一种。特点1该函数的名称和所在类的名称相同。2不需要定义返回值类型。3该函数没有具体的返回值。记住:所有对象创建时都需要初始化才可以使用。注意事项一个类在定义时如果没有定义过构造函数那么该类中会自动生成一个空参数的构造函数为了方便该类创建对象完成初始化。如果在类中自定义了构造函数那么默认的构造函数就没有了。一个类中可以有多个构造函数因为它们的函数名称都相同所以只能通过参数列表来区分。所以一个类中如果出现多个构造函数。它们的存在是以重载体现的。构造函数和一般函数有什么区别呢1:两个函数定义格式不同。2:构造函数是在对象创建时就被调用用于初始化而且初始化动作只执行一次。一般函数是对象创建后需要调用才执行可以被调用多次。什么时候使用构造函数呢分析事物时发现具体事物一出现就具备了一些特征那就将这些特征定义到构造函数内。构造代码块和构造函数有什么区别构造代码块:是给所有的对象进行初始化也就是说所有的对象都会调用一个代码块。只要对象一建立。就会调用这个代码块。构造函数:是给与之对应的对象进行初始化。它具有针对性。Person p new Person();创建一个对象都在内存中做了什么事情1:先将硬盘上指定位置的Person.class文件加载进内存。2:执行main方法时在栈内存中开辟了main方法的空间(压栈—进栈)然后在main方法的栈区分配了一个变量p。3:在堆内存中开辟一个实体空间分配了一个内存首地址值。new4:在该实体空间中进行属性的空间分配并进行了默认初始化。5:对空间中的属性进行显示初始化。6:进行实体的构造代码块初始化。7:调用该实体对应的构造函数进行构造函数初始化。()8:将首地址赋值给p p变量就引用了该实体。(指向了该对象)封 装(面向对象特征之一):是指隐藏对象的属性和实现细节仅对外提供公共访问方式。好处:将变化隔离便于使用提高重用性安全性。封装原则:将不需要对外提供的内容都隐藏起来把属性都隐藏提供公共方法对其访问。this:代表对象。就是所在函数所属对象的引用。this到底代表什么呢哪个对象调用了this所在的函数this就代表哪个对象就是哪个对象的引用。开发时什么时候使用this呢在定义功能时如果该功能内部使用到了调用该功能的对象这时就用this来表示这个对象。this 还可以用于构造函数间的调用。调用格式this(实际参数):this对象后面跟上 . 调用的是成员属性和成员方法(一般方法)this对象后面跟上 () 调用的是本类中的对应参数的构造函数。注意用this调用构造函数必须定义在构造函数的第一行。因为构造函数是用于初始化的所以初始化动作一定要执行。否则编译失败。static: 关键字是一个修饰符用于修饰成员(成员变量和成员函数)。特点1:想要实现对象中的共性数据的对象共享。可以将这个数据进行静态修饰。2:被静态修饰的成员可以直接被类名所调用。也就是说静态的成员多了一种调用方式。类名.静态方式。3:静态随着类的加载而加载。而且优先于对象存在。弊端:1:有些数据是对象特有的数据是不可以被静态修饰的。因为那样的话特有数据会变成对象的共享数据。这样对事物的描述就出了问题。所以在定义静态时必须要明确这个数据是否是被对象所共享的。2:静态方法只能访问静态成员不可以访问非静态成员。因为静态方法加载时优先于对象存在所以没有办法访问对象中的成员。3:静态方法中不能使用thissuper关键字。因为this代表对象而静态在时有可能没有对象所以this无法使用。4:主函数是静态的。什么时候定义静态成员呢或者说:定义成员时到底需不需要被静态修饰呢成员分两种:1:成员变量。(数据共享时静态化)该成员变量的数据是否是所有对象都一样:如果是那么该变量需要被静态修饰因为是共享的数据。如果不是那么就说这是对象的特有数据要存储到对象中。2:成员函数。(方法中没有调用特有数据时就定义成静态)如果判断成员函数是否需要被静态修饰呢只要参考该函数内是否访问了对象中的特有数据如果有访问特有数据那方法不能被静态修饰。如果没有访问过特有数据那么这个方法需要被静态修饰。成员变量和静态变量的区别:1:成员变量所属于对象。所以也称为实例变量。静态变量所属于类。所以也称为类变量。2:成员变量存在于堆内存中。静态变量存在于方法区中。3:成员变量随着对象创建而存在。随着对象被回收而消失。静态变量随着类的加载而存在。随着类的消失而消失。4:成员变量只能被对象所调用 。静态变量可以被对象调用也可以被类名调用。所以成员变量可以称为对象的特有数据静态变量称为对象的共享数据。静态的注意:静态的生命周期很长。静态代码块:就是一个有静态关键字标示的一个代码块区域。定义在类中。作用:可以完成类的初始化。静态代码块随着类的加载而执行而且只执行一次(new 多个对象就只执行一次)。如果和主函数在同一类中优先于主函数执行。Public:访问权限最大。static:不需要对象直接类名即可。void:主函数没有返回值。Main:主函数特定的名称。(String[] args):主函数的参数是一个字符串数组类型的参数jvm调用main方法时传递的实际参数是 new String[0]。jvm默认传递的是长度为0的字符串数组我们在运行该类时也可以指定具体的参数进行传递。可以在控制台运行该类时在后面加入参数。参数之间通过空格隔开。jvm会自动将这些字符串参数作为args数组中的元素进行存储。静态代码块、构造代码块、构造函数同时存在时的执行顺序静态代码块 ——— 构造代码块 ——— 构造函数生成Java帮助文档命令格式javadoc –d 文件夹名 –auther –version *.java//格式/***类描述*author 作者名*version 版本号*//***方法描述*param 参数描述*return 返回值描述*/继 承(面向对象特征之一)好处1:提高了代码的复用性。2:让类与类之间产生了关系提供了另一个特征多态的前提。父类的由来其实是由多个类不断向上抽取共性内容而来的。java中对于继承java只支持单继承。java虽然不直接支持多继承但是保留了这种多继承机制进行改良。单继承:一个类只能有一个父类。多继承:一个类可以有多个父类。为什么不支持多继承呢因为当一个类同时继承两个父类时两个父类中有相同的功能那么子类对象调用该功能时运行哪一个呢因为父类中的方法中存在方法体。但是java支持多重继承。A继承B B继承C C继承D。多重继承的出现就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。所以一个体系要想被使用直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时需要建立对象。建议建立最子类对象因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。简单说对于一个继承体系的使用查阅顶层父类中的内容创建最底层子类的对象。子父类出现后类中的成员都有了哪些特点1:成员变量。当子父类中出现一样的属性时子类类型的对象调用该属性值是子类的属性值。如果想要调用父类中的属性值需要使用一个关键字superThis:代表是本类类型的对象引用。Super:代表是子类所属的父类中的内存空间引用。注意:子父类中通常是不会出现同名成员变量的因为父类中只要定义了子类就不用在定义了直接继承过来用就可以了。2:成员函数。当子父类中出现了一模一样的方法时建立子类对象会运行子类中的方法。好像父类中的方法被覆盖掉一样。所以这种情况是函数的另一个特性覆盖(复写重写)什么时候使用覆盖呢当一个类的功能内容需要修改时可以通过覆盖来实现。3:构造函数。发现子类构造函数运行时先运行了父类的构造函数。为什么呢?原因:子类的所有构造函数中的第一行其实都有一条隐身的语句super();super(): 表示父类的构造函数并会调用于参数相对应的父类中的构造函数。而super():是在调用父类中空参数的构造函数。为什么子类对象初始化时都需要调用父类中的函数(为什么要在子类构造函数的第一行加入这个super()?)因为子类继承父类会继承到父类中的数据必须要看父类是如何对自己的数据进行初始化的。所以子类在进行对象初始化时先调用父类的构造函数这就是子类的实例化过程。注意:子类中所有的构造函数都会默认访问父类中的空参数的构造函数因为每一个子类构造内第一行都有默认的语句super();如果父类中没有空参数的构造函数那么子类的构造函数内必须通过super语句指定要访问的父类中的构造函数。如果子类构造函数中用this来指定调用子类自己的构造函数那么被调用的构造函数也一样会访问父类中的构造函数。问题:super()和this()是否可以同时出现的构造函数中。两个语句只能有一个定义在第一行所以只能出现其中一个。super()或者this():为什么一定要定义在第一行因为super()或者this()都是调用构造函数构造函数用于初始化所以初始化的动作要先完成。继承的细节什么时候使用继承呢当类与类之间存在着所属关系时才具备了继承的前提。a是b中的一种。a继承b。狼是犬科中的一种。英文书中所属关系 is a 注意:不要仅仅为了获取其他类中的已有成员进行继承。所以判断所属关系可以简单看如果继承后被继承的类中的功能都可以被该子类所具备那么继承成立。如果不是不可以继承。细节二:在方法覆盖时注意两点:1:子类覆盖父类时必须要保证子类方法的权限必须大于等于父类方法权限可以实现继承。否则编译失败。2:覆盖时要么都静态要么都不静态。 (静态只能覆盖静态或者被静态覆盖)继承的一个弊端:打破了封装性。对于一些类或者类中功能是需要被继承或者复写的。这时如何解决问题呢介绍一个关键字final:最终。final特点:1:这个关键字是一个修饰符可以修饰类方法变量。2:被final修饰的类是一个最终类不可以被继承。3:被final修饰的方法是一个最终方法不可以被覆盖。4:被final修饰的变量是一个常量只能赋值一次。其实这样的原因的就是给一些固定的数据起个阅读性较强的名称。不加final修饰不是也可以使用吗那么这个值是一个变量是可以更改的。加了final程序更为严谨。常量名称定义时有规范所有字母都大写如果由多个单词组成中间用 _ 连接。抽象类:abstract抽象:不具体看不明白。抽象类表象体现。在不断抽取过程中将共性内容中的方法声明抽取但是方法不一样没有抽取这时抽取到的方法并不具体需要被指定关键字abstract所标示声明为抽象方法。抽象方法所在类一定要标示为抽象类也就是说该类需要被abstract关键字所修饰。抽象类的特点:1:抽象方法只能定义在抽象类中抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法不可以描述变量)。2:抽象方法只定义方法声明并不定义方法实现。3:抽象类不可以被创建对象(实例化)。4:只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后该子类才可以实例化。否则该子类还是一个抽象类。抽象类的细节:1:抽象类中是否有构造函数有用于给子类对象进行初始化。2:抽象类中是否可以定义非抽象方法可以。其实抽象类和一般类没有太大的区别都是在描述事物只不过抽象类在描述事物时有些功能不具体。所以抽象类和一般类在定义上都是需要定义属性和行为的。只不过比一般类多了一个抽象函数。而且比一般类少了一个创建对象的部分。3:抽象关键字abstract和哪些不可以共存final , private , static4:抽象类中可不可以不定义抽象方法可以。抽象方法目的仅仅为了不让该类创建对象。接 口:1是用关键字interface定义的。2接口中包含的成员最常见的有全局常量、抽象方法。注意接口中的成员都有固定的修饰符。成员变量public static final成员方法public abstractinterface Inter{public static final int x 3;public abstract void show();}3接口中有抽象方法说明接口不可以实例化。接口的子类必须实现了接口中所有的抽象方法后该子类才可以实例化。否则该子类还是一个抽象类。4类与类之间存在着继承关系类与接口中间存在的是实现关系。继承用extends 实现用implements 5接口和类不一样的地方就是接口可以被多实现这就是多继承改良后的结果。java将多继承机制通过多现实来体现。6一个类在继承另一个类的同时还可以实现多个接口。所以接口的出现避免了单继承的局限性。还可以将类进行功能的扩展。7其实java中是有多继承的。接口与接口之间存在着继承关系接口可以多继承接口。接口都用于设计上设计上的特点(可以理解主板上提供的接口)1接口是对外提供的规则。2接口是功能的扩展。3接口的出现降低了耦合性。抽象类与接口抽象类一般用于描述一个体系单元将一组共性内容进行抽取特点可以在类中定义抽象内容让子类实现可以定义非抽象内容让子类直接使用。它里面定义的都是一些体系中的基本内容。接口一般用于定义对象的扩展功能是在继承之外还需这个对象具备的一些功能。抽象类和接口的共性:都是不断向上抽取的结果。抽象类和接口的区别:1:抽象类只能被继承而且只能单继承。接口需要被实现而且可以多实现。2:抽象类中可以定义非抽象方法子类可以直接继承使用。接口中都有抽象方法需要子类去实现。3:抽象类使用的是 is a 关系。接口使用的 like a 关系。4:抽象类的成员修饰符可以自定义。接口中的成员修饰符是固定的,全都是public的。在开发之前先定义规则A和B分别开发A负责实现这个规则B负责使用这个规则。至于A是如何对规则具体实现的B是不需要知道的。这样这个接口的出现就降低了A和B直接耦合性。多 态(面向对象特征之一):函数本身就具备多态性某一种事物有不同的具体的体现。体现:父类引用或者接口的引用指向了自己的子类对象。//Animal a new Cat();多态的好处:提高了程序的扩展性。多态的弊端:当父类引用指向子类对象时虽然提高了扩展性但是只能访问父类中具备的方法不可以访问子类中特有的方法。(前期不能使用后期产生的功能即访问的局限性)多态的前提:1:必须要有关系比如继承、或者实现。2:通常会有覆盖操作。多态的出现思想上也做着变化:以前是创建对象并指挥对象做事情。有了多态以后我们可以找到对象的共性类型直接操作共性类型做事情即可这样可以指挥一批对象做事情即通过操作父类或接口实现。——————————————————————————————————————————————————————class 毕姥爷{void 讲课(){System.out.println(企业管理);}void 钓鱼(){System.out.println(钓鱼);}}class 毕老师 extends 毕姥爷{void 讲课(){System.out.println(JAVA);}void 看电影(){System.out.println(看电影);}}class {public static void main(String[] args) {毕姥爷 x new 毕老师(); **//毕老师对象被提升为了毕姥爷类型。**// x.讲课();// x.看电影(); **//错误.**毕老师 y (毕老师)x; **//将毕姥爷类型强制转换成毕老师类型。**y.看电影();//在多态中自始自终都是子类对象在做着类型的变化。}}——————————————————————————————————————————————————————如果想用子类对象的特有方法如何判断对象是哪个具体的子类类型呢可以可以通过一个关键字 instanceof ;//判断对象是否实现了指定的接口或继承了指定的类格式: 判断一个对象是否所属于指定的类型。Student instanceof Person true;//student继承了person类多态在子父类中的成员上的体现的特点:1:成员变量在多态中子父类成员变量同名。在编译时期:参考的是引用型变量所属的类中是否有调用的成员。(编译时不产生对象只检查语法错误)运行时期:也是参考引用型变量所属的类中是否有调用的成员。简单一句话:无论编译和运行成员变量参考的都是引用变量所属的类中的成员变量。再说的更容易记忆一些:成员变量 ——— 编译运行都看 左边。2:成员函数。编译时期:参考引用型变量所属的类中是否有调用的方法。运行事情:参考的是对象所属的类中是否有调用的方法。为什么是这样的呢因为在子父类中对于一模一样的成员函数有一个特性:覆盖。简单一句:成员函数编译看引用型变量所属的类运行看对象所属的类。更简单:成员函数 ——— 编译看 左边运行看 右边。3:静态函数。编译时期:参考的是引用型变量所属的类中是否有调用的成员。运行时期:也是参考引用型变量所属的类中是否有调用的成员。为什么是这样的呢因为静态方法其实不所属于对象而是所属于该方法所在的类。调用静态的方法引用是哪个类的引用调用的就是哪个类中的静态方法。简单说:静态函数 ——— 编译运行都看 左边。——————java.lang.ObjectObject:所有类的直接或者间接父类Java认为所有的对象都具备一些基本的共性内容这些内容可以不断的向上抽取最终就抽取到了一个最顶层的类中的该类中定义的就是所有对象都具备的功能。具体方法:1:boolean equals(Object obj):用于比较两个对象是否相等其实内部比较的就是两个对象地址。而根据对象的属性不同判断对象是否相同的具体内容也不一样。所以在定义类时一般都会复写equals方法建立本类特有的判断对象是否相同的依据。public boolean equals(Object obj){if(!(obj instanceof Person))return false;Person p (Person)obj;return this.age p.age;}2:String toString():将对象变成字符串默认返回的格式类名哈希值 getClass().getName() Integer.toHexString(hashCode())为了对象对应的字符串内容有意义可以通过复写建立该类对象自己特有的字符串表现形式。public String toString(){return person : age;}3:Class getClass():获取任意对象运行时的所属字节码文件对象。4:int hashCode():返回该对象的哈希码值。支持此方法是为了提高哈希表的性能。通常equalstoStringhashCode在应用中都会被复写建立具体对象的特有的内容。内部类如果A类需要直接访问B类中的成员而B类又需要建立A类的对象。这时,为了方便设计和访问直接将A类定义在B类中。就可以了。A类就称为内部类。内部类可以直接访问外部类中的成员。而外部类想要访问内部类必须要建立内部类的对象。class Outer{int num 4;class Inner {void show(){System.out.println(inner show run num);}}public void method(){Inner in new Inner();//创建内部类的对象。in.show();//调用内部类的方法。}}当内部类定义在外部类中的成员位置上可以使用一些成员修饰符修饰 private、static。1:默认修饰符。直接访问内部类格式:外部类名.内部类名 变量名 外部类对象.内部类对象;Outer.Inner in new Outer.new Inner();//这种形式很少用。但是这种应用不多见因为内部类之所以定义在内部就是为了封装。想要获取内部类对象通常都通过外部类的方法来获取。这样可以对内部类对象进行控制。2:私有修饰符。通常内部类被封装都会被私有化因为封装性不让其他程序直接访问。3:静态修饰符。如果内部类被静态修饰相当于外部类会出现访问局限性只能访问外部类中的静态成员。注意如果内部类中定义了静态成员那么该内部类必须是静态的。内部类编译后的文件名为:“外部类名$内部类名.java”为什么内部类可以直接访问外部类中的成员呢那是因为内部中都持有一个外部类的引用。这个是引用是 外部类名.this内部类可以定义在外部类中的成员位置上也可以定义在外部类中的局部位置上。当内部类被定义在局部位置上只能访问局部中被final修饰的局部变量。匿名内部类没有名字的内部类。就是内部类的简化形式。一般只用一次就可以用这种形式。匿名内部类其实就是一个匿名子类对象。想要定义匿名内部类需要前提内部类必须继承一个类或者实现接口。匿名内部类的格式new 父类名接口名(){ 定义子类成员或者覆盖父类方法 }.方法。匿名内部类的使用场景:当函数的参数是接口类型引用时如果接口中的方法不超过3个。可以通过匿名内部类来完成参数的传递。其实就是在创建匿名内部类时该类中的封装的方法不要过多最好两个或者两个以内。//E.G:**//1**new Object(){void show(){System.out.println(show run);}}**.show();****//2**Object obj new Object(){void show(){System.out.println(show run);}};obj.show();1和2的写法正确吗有区别吗说出原因。写法是正确1和2都是在通过匿名内部类建立一个Object类的子类对象。区别第一个可是编译通过并运行。第二个编译失败因为匿名内部类是一个子类对象当用Object的obj引用指向时就被提升为了Object类型而编译时检查Object类中是否有show方法所以编译失败。class InnerClassDemo6 {**(static)**class Inner{void show(){}}public void method(){**this.**new Inner().show();//可以}public static void main(String[] args) {//static不允许thisThis.new Inner().show();//错误Inner类需要定义成static}}interface Inter{void show();}class Outer{//通过匿名内部类补足Outer类中的代码。public static Inter method(){return new Inter(){public void show(){}};}}class InnerClassDemo7 {public static void main(String[] args) {**Outer.method().show();**/*Outer.method():意思是Outer中有一个名称为method的方法而且这个方法是静态的。Outer.method().show():当Outer类调用静态的method方法运算结束后的结果又调用了show方法意味着method()方法运算完一个是对象而且这个对象是Inter类型的。*/function (new Inter(){public void show(){}}); //匿名内部类作为方法的参数进行传递。}public static void function(Inter in){in.show();}}