邢台建网站找谁,网站开发可能存在的困难,百度首页排名优化平台,企业网站管理系统c*************** Java OOP 基 础 语 法 总 结 ************************* 1,类与对象1),类(class)是相同属性和方法的一组集合。 A,类的组成#xff1a;属性和方法。 B,语法声明#xff1a;使用class关键字#xff0c;eg#xff1a;public class Student{}//类名首字母大写…*************** Java OOP 基 础 语 法 总 结 ************************* 1,类与对象1),类(class)是相同属性和方法的一组集合。 A,类的组成属性和方法。 B,语法声明使用class关键字egpublic class Student{}//类名首字母大写且必须和文件名一致 C,类的实例化使用new关键字egStudent studentnew Student();//声明一个Student类型的变量or实例化一个Student对象 D,类与文件的关系; a一个java文件可以包含多个java类 b,一个java文件最多只能有一个public类 c,java文件的名称必须和其中的public类名一致 E,egpublic class Student{//类(首字母大写) public void getName(){//方法(一般为动词名词动词首字母小写名词首字母大写) String name//属性(数据类型属性名) } }2),对象(object)是一个具体的实体(entity)。 eg某某学生即可作为一个对象 ********************************************************************2,方法1),可以重复执行的代码块对于调用者来说相当于一个“黑盒子”。2),语法声明;访问控制修饰符 返回值类型 方法名 (参数列表){ 方法体 } egpublic void getName(int num){ String name } 3),方法的传参--数据类型A,8种基本数据类型(byte,int,short,long,float,double,char,boolean) B,引用数据类型(eg:Student studentnew Student();中的student就是引用数据类型) 注基本数据类型与引用数据类型的区别 a,存储方式不同基本数据类型存在 栈 中是按值传 引用数控类型存在 堆 中是按址传 b,使用方式不同基本数据类型 无属性和方法 引用数控类型 有属性和方法 ********************************************************************3,构造方法(Constructor)1),是一个特殊的方法该方法的作用是实例化对象会在内存中分配空间且可以对类的属性进行初始化2),语法特征 a,构造方法的名字必须与所在的类一致 b,没有返回值类型注意和没有返回值不是一回事 c,默认情况下有一个隐式的无参构造方法其访问控制修饰与所在的类的访问控制修饰一致 d,如果我们自定义了构造方法则隐式无参构造方法就不存在了3),使用方法使用new关键字调用********************************************************************4,包(package)1),意义解决命名冲突2),命名主要需要知道域名反写,全部字母小写不能以数字开头egcom.baidu.zhidao.azhi0828//合法包名3),如果一个类需要使用另一个包中的类需要使用import关键字导入相应的包其中java.lang无需显式导入 ********************************************************************5,可变长度参数1),是在数据类型后面加上“...”表示当成数组。 egint getTotal(int...num){ 代码块 }2),调用时可以不传参数可以传若干参数传入参数用逗号隔开也可以传入数组。3),一个方法最多只能有一个可变长度参数而且必须放在最后位置 egegint getTotal(int num1int...num2){ 代码块 } ********************************************************************6,命令行参数 ***了 解*** ********************************************************************7,方法重载1),在一个类中具有相同的方法名但是参数列表不同的方法。2),可分为一般方法重载和构造方法重载。 egclass Student{//同一个类 void getInformation(String name){//相同的方法名不同的参数列表 ***; } void getInformation(int age){//相同的方法名不同的参数列表 ***; } } ********************************************************************8,this关键字(1),使用环境方法和构造方法中。(2),使用方法两种 1)this.属性(方法);//this表示当前运行的实列(对象)注意this未运行时不代表任何属性(方法)。 2)this();//只能用在构造方法中。表示调用其他重载形式的构造方法而且必须放在第一行。(3),注意静态方法中不能使用this静态方法属于类不是实列而this代表了当前运行的实列放一起顺序会逻辑混乱main中也不能使用this(4),eg 1 package com.zhi.java.course;2 public class Text{3 Text(int num){//this();只能用在构造方法中4 this.numnum;5 }6 Text(){7 this(100);//无参方法调用有参8 }9 int num1;
10 int getNum(){
11 return num;//此处可以直接放回num
12 }
13 void setNum(int num){//新定义的num不同于成员变量num
14 this.numnum;//此处this不可省
15 }
16 void m1(){
17
18 }
19 void m2(){
20 this.m1();//此处this可以省
21 }
22 static void m3(){
23 System.out.println(this.num);//ErrorCannot use this in a static context
24 }
25 } ********************************************************************9,super关键字对比this关键字(1),使用环境一般的实列方法中和构造方法中 (2),使用方法两种 (1),super.属性(方法);//调用父类的属性(方法) (2),super();//只能用在构造方法中。表示调用父类相应的构造方法而且必须放在第一行。 ********************************************************************10,final关键字(1),final修饰类表示该类不能再被继承 egfinal class Animal(){}//Animal不能再被继承。(2),final修饰变量该变量必须被赋值final修饰后该变量变为常量不能再改变 egfinal int num10;//num不可再改变。(3),final修饰方法该方法不能再被重写 egfinal void m1(){}//方法m1在f父类在子类中final不能再被重写。(4),final修饰属性1),可以直接在声明时赋值 2),可以在代码块中赋值 3),静态的可以在静态代码块中赋值********************************************************************11,继承(1)概念继承是OOP特征之一是子类通过继承获取父类中的部分属性和方法。(2)使用extends关键字 1)符合is-a关系的设计使用继承 2)继承是代码重用的一种方式(3)好处1)做到代码重用 2)系统维护性更好。(4),不能继承的有1)子类不能继承父类的构造方法。 2)子类不能继承父类的私有方法private。 3)子类和父类不在同一包使用默认的访问权限的成员(5),eg: 1 package com.zhi.java.course;2 public class Animal {3 String name;//公共的属性或方法4 int age;5 }6 public class Dog extends Animal {//继承父类的属性一个子类只能继承一个父类(单根继承)7 public static void main(String[] args) {8 Dog dog new Dog();9 dog.name 大黄;
10 dog.age 300;
11 String na 田不易;//也可以有子类的特有属性方法
12 }
13 } ********************************************************************12,类的初始化顺序(从上到下) 父类的静态代码块 子类的静态代码块 父类的代码块 父类的构造方法 子类的代码块 子类的构造方法 注意静态代码块只能执行一次 ********************************************************************13,访问控制修饰符1),概念a:Java提供四种访问控制修饰符(public private 包 ) b:放在方法与变量前部分访问控制修饰符也可以放在类前 c:目的是控制代码的访问权限。2),控制范围(从大到小) public 所有代码都可以访问 protected 本类包及其子类的代码可以访问 包 本类同一个包中访问 private 私有的它修饰的属性方法或内部类只能本类使用********************************************************************14,方法重写1),概念在子类中对父类的方法重新实现一遍即在子类中对父类中某方法的默认逻辑进行修改。2),语法a,方法名一样 b,方法的参数一样 c,子类重写的方法返回值类型要与父类返回值类型一样或者是其子类 d,子类访问控制修饰符的范围不能比父类不能小 e,子类抛出的异常不能比父类抛出的异常多或范围更大3),以下方法不能重写 a,private方法 b,构造方法(Constructor) c,static方法 d,final方法 ********************************************************************15,Object类(1),java是单根继承在java中不允许多根继承。(2),Object是所有类的最终父类所有类或者是数组都可以直接或间接继承Object类。(3),Object类来自java.lang包。(4),可以将所有的引用类型值赋给Object类型声明的变量包括null。(5),Object提供9中可用方法所有的子类都都可以使用其中 getClass()notiFy()notiFyall()wait()不可以被子类重写 toString()equals()hashCode()clone()finalize()可以被子类重写(6),toString()方法 1),自动调用toString()方法的场景字符串拼接和控制台输出如下列 1 package com.zhi.java.course;2 public class Dog {3 String name;4 int age;5 public String getName() {6 return name;7 }8 public void setName(String name) {9 this.name name;
10 }
11 public int getAge() {
12 return age;
13 }
14 public void setAge(int age) {
15 this.age age;
16 }
17 public static void main(String[] args) {
18 Dog dog new Dog();
19 dog.setName(大黄);
20 dog.setAge(300);
21 System.out.println(dog);//等同于System.out.println(dog.toString());会自动调用toString方法故有以下结果
22 }
23 } 运行结果 com.zhi.java.course.Dog2a139a55 //默认实现输出格式全限定类名哈希码的16进制 2),重写toString()方法 1 package com.zhi.java.course;2 public class Dog {3 String name;4 int age;5 public String getName() {6 return name;7 }8 public void setName(String name) {9 this.name name;
10 }
11 public int getAge() {
12 return age;
13 }
14 public void setAge(int age) {
15 this.age age;
16 }
17 Override//重写注解可判断是否重写
18 public String toString() {
19 return 名字name\n年龄age; //重写获得需要的值
20 }
21 public static void main(String[] args) {
22 Dog dog new Dog();
23 dog.setName(大黄);
24 dog.setAge(300);
25 System.out.println(dog);//等同于System.out.println(dog.toString());已经重写toString()方法
26 }
27 } 运行结果名字大黄 年龄300 (7),equals()方法重写1),当类有逻辑上的等同意义而不仅是对象意义上的等同时 需要重写equals()方法。2),以下情况不能重写 a,每个类实列本质上是唯一的。 b,不关心类是否提供了“逻辑意义上的等同”测试。 c,超类已经重新了equals该方法也适合子类。3),回顾 比较基本数据类型的值是否相等(按值比较)比较引用数据类型是否是同一个对象(按址比较)。 equals默认与相同重写可自定义比较规则。4),未重写时结果如下 1 package com.zhi.java.course;2 class Game {3 private String name;4 private int age;5 public String getName() {6 return name;7 }8 public void setName(String name) {9 this.name name;
10 }
11 public int getAge() {
12 return age;
13 }
14 public void setAge(int age) {
15 this.age age;
16 }
17 }
18 public class EqualsJob {
19 public static void main(String[] args) {
20 Game g1 new Game();
21 g1.setName(LOL);
22 g1.setAge(6);
23 Game g2 new Game();
24 g2.setName(LOL);
25 g2.setAge(6);
26 System.out.println(g1.equals(g2));// 用equals直接比较两个相同的引用类型,等同System.out.println(g1g2);
27 }
28 } 运行结果false 5),重写equals()后如下 1 package com.zhi.java.course;2 class Game {3 private String name;4 private int age;5 public String getName() {6 return name;7 }8 public void setName(String name) {9 this.name name;
10 }
11 public int getAge() {
12 return age;
13 }
14 public void setAge(int age) {
15 this.age age;
16 }
17 Override
18 public boolean equals(Object obj) {
19 if (this obj) {
20 return true;
21 }
22 if (obj instanceof Game) {//向下转型需要通过instanceof判断obj和Game是否同一类型
23 Game g (Game) obj;//类型一致则强转类型向下转型
24 return g.getAge() age g.getName().equals(name);//自定义比较规则
25 }
26 return false;
27 }
28 }
29 public class EqualsJob {
30 public static void main(String[] args) {
31 Game g1 new Game();
32 g1.setName(LOL);
33 g1.setAge(6);
34 Game g2 new Game();
35 g2.setName(LOL);
36 g2.setAge(6);
37 System.out.println(g1.equals(g2));// 使用equals直接比较两个相同的引用类型
38 }
39 } 运行结果true 6),equals()重写约定 a,自反性 b,对称性 c,传递性 d,一致性 e,任何非空x,x.equals(null)总是false f,重写equals方法时永远要重载hashCode方法********************************************************************16,向上转型与向下转型(1),向上转型子类的实例可以自动转换为父类的类型(2),向下转型父类型需要强制转化为子类型前提是该对象本身就是子类型的对象使用instanceof做判断 ********************************************************************17,抽象类 (public abstract class shape{}就是一个抽象类)(1),使用abstract声明抽象类或抽象方法(2),抽象类可以有抽象方法也可以没有抽象方法但是抽象方法必须在抽象类中(3),抽象类不能实例化(4),抽象类可以有构造方法抽象方法(public sbstract void sss();就是一个抽象方法)(1),没有实现体(2),不能被finalprivatestatic修饰(3),主要给子类来重写的 如果抽象类的子类是一个具体的类该具体类必须实现父类的所有抽象方法 如果子类也是抽象类子类既可以实训父类的抽象方法也可以不实现 ********************************************************************18,接口 (1),概念它是一个纯粹的抽象类其它的方法全部都是抽象方法。它是一种约定一种能力 (2),声明语法使用interface关键字egpublic interface Swimable{} 1),可以声明属性该属性默认是public static final修饰的必须赋初始值 2),可以有方法全部是抽象方法 3),接口不能直接实例化(接口是一个纯粹的抽象类)(3),接口成员-常量属性 1),接口中所有的属性都是public static final修饰的 2)常量可以是基本数据类型也可以是引用数据类型(4),注意1),常量的命名规范是全部字母大写egpublic static final int NUM10; 2),接口的修饰符可能是包级访问级别的所以public常量有可能访问不到 3),推荐使用枚举保存一组相关的值(至少java5)(5),继承接口 1),接口可以使用extends关键字继承另一个接口 2),可以继承抽象方法和默认方法常量属性嵌套类型 3),不能继承静态方法(6),实现接口 1),实现接口的具体类需要使用implements关键字并且需要重写接口中所有的抽象方法。egpublic class Fish implements Swimable{} 2),实现接口的抽象类可以重写接口中的部分抽象方法。 3),一个类可以实现多个接口但是只能继承一个类而且应先继承后实现。 4),接口可以作为数据类型用来声明变量。 5),接口也可以继承接口。 ********************************************************************19,面向对象的三大特征封装继承多态(1),封装将实现的代码或属性放在一个类或方法中不让外部代码随意访问。 好处安全。 使用访问控制修饰符 private(2),继承子类会将父类的部分属性或方法继承下来。 好处做到代码重用提高系统的维护性能 使用关键字extends(3),多态在不同的场景下类或方法有不同的指向。 好处代码量可以减少 体现1),方法上的多态重写和重载 2),类的多态类作为方法的参数或返回值类型 ********************************************************************20,接口与抽象类的区别 1),语法上接口是使用interface声明使用implements实现 抽象类是使用abstract声明使用extends继承。 2),特定,接口不能有具体的方法属性都是静态常量 抽象类可以有构造方法、抽象方法、普通方法还有属性。 3),设计上表达某种能力使用接口********************************************************************21,方法重写与重载的区别? 方法重写是在子类中对父类的方法重新实现一遍即在子类中对父类中某方法的默认逻辑进行修改。方法名和参数列表都相同。 方法重载是在一个类中具有相同的方法名但是参数列表不同的方法。 为了这个东西从早上10点弄到现在除了中午下午吃饭时间一直没间断好累... A_zhi 2016/8/28/22/50 ******************** 持 续 修 改、补 充... *************************** 转载于:https://www.cnblogs.com/a-zhi/p/5816256.html