用花生壳做网站,酷炫网站欣赏,下载正品官方网站,射阳建设网站哪家好一、IDEA
#xff08;一#xff09;常用的快捷键
#xff08;二#xff09;模版/自定义模版
二、包
#xff08;一#xff09;包的命名
#xff08;二#xff09;常用的包
#xff08;三#xff09;如何引入#xff08;导入#xff09;包
#xff08;四一常用的快捷键
二模版/自定义模版
二、包
一包的命名
二常用的包
三如何引入导入包
四注意事项和使用细节
三、访问修饰符
四、OOP三大特征
一封装
二继承
继承的细节问题
继承的本质
三多态
多态的具体体现
多态的注意事项和细节1
1、多态的向上转型
2、多态的向下转型
多态的注意事项和细节2
java的动态绑定机制重要
多态的应用
五、Super关键字
super和this的比较
六、方法重写/覆盖overwrite
方法重写和方法重载的比较
七、Object类详解 一equals方法
二hashCode方法 三toString方法
三finalize方法 八、断点调试debug
一、IDEA 一常用的快捷键
自己配置 1、删除当前行ctrl d
2、复制当前行ctrl alt 向下光标
3、补全代码 alt /
4、添加注释和取消注释 ctrl /
5、导入该行需要的类先配置auto import然后使用alt enter即可
6、快速格式化代码 ctrl alt L
7、快速运行程序 alt R
8、生成构造方法等 alt insert 提高开发效率
9、查看一个类的层级关系 ctrl H 学习继承后非常有用
10、将光标放在一个方法上ctrl B可以选择定位到哪个类的方法 学习继承后非常有用
11、自动的分配变量名通过在后面.var
二模版/自定义模版 二、包 包的三大作用
1、区分相同名字的类
2、当类很多时可以很好的管理类看Java API文档
3、控制访问范围
包基本语法
package com.hspedu;
包的本质分析实际上就是创建不同的文件夹来保存类文件 包的快速入门 一包的命名
1、命名规则
只能包含数字、字母、下划线、小圆点但不能使用数字开头不能是关键字或保留字
demo.class.exec1 ×class是关键字
demo.12a ×12a是数字开头的
demo.ab12.oa √
2、命名规范
一般是小写字母小圆点一般是
com.公司名.项目名.业务模块名
比如com.hspedu.oa.model; com.hspedu.oa.controller;
举例com.sina.crm.user //用户模块 com.sina.crm.order //订单模块 com.sina.crm.utils //工具类
二常用的包
一个包下包含很多的类java中常用的包有
java.lang.* //lang包是基本包默认引入不需要再引入比如使用Math.abs()
java.util.* //util包系统提供的工具包工具类比如使用Scanner
java.net.* //网络包网络开发
java.awt.* //是做java的界面开发GUI
三如何引入导入包
语法 import 包;
引入一个包的主要目的是要使用该包下的类比如import java.util.Scanner;就只是引入一个类Scanner。import java.util.*表示将java.util包所有都引入但建议需要使用什么类就导入什么类
package com.hspedu.pkg;import java.util.Arrays;
import java.util.Scanner;
//import java.util.*;
public class Import01 {public static void main(String[] args) {int arr[] {-1, 20, 2, 13, 3};Arrays.sort(arr);for (int i 0; i arr.length; i) {System.out.print(arr[i] \t);}}
}四注意事项和使用细节
1、package的作用是声明当前类所在的包需要放在class的最上面一个类中最多只有一句package。
2、import指令位置放在package的下面在类的定义前面可以有多句且没有顺序要求。 三、访问修饰符
java提供四种访问控制修饰符号用于控制方法和属性成员变量的访问权限范围
1、公开级别用public修饰对外公开
2、受保护级别用protected修饰对子类和同一个包中的类公开
3、默认级别没有修饰符号向同一个包的类公开
4、私有级别用private修饰只有类本身可以访问不对外公开 使用的注意事项
1、修饰符可以用来修饰类中的属性成员方法以及类
2、只有默认的和public才能修饰类并且遵循上述访问权限的特点
四、OOP三大特征
面向对象编程有三大特征封装、继承和多态
一封装
封装encapsulation就是把抽象出的数据[属性]和对数据的操作[方法]封装在一起数据被保护在内部程序的其他部分只有通过被授权的操作[方法]才能对数据进行操作。
封装的理解和好处
1、隐藏实现细节 方法---调用传入参数
2、可以对数据进行验证保证安全合理
封装的实现步骤
1、将属性进行私有化不能直接修改属性
2、提供一个公共的set方法用于对属性判断并赋值
public void setXxx(类型 参数名) { // 加入数据验证的业务逻辑 属性 参数名;
}
3、提供一个公共的get方法用于获取属性的值
public XX getXxx() { //权限判断 return xx;
}
快速入门案例-不能随便查看人的年龄工资等隐私并对设置的年龄进行合理的验证。年龄合理就设置否则给默认。年龄必须在1-120name的长度在2-6字符。
package com.hspedu.encap;public class Encapsulation01 {public static void main(String[] args) {Person person new Person();person.setName(jack);person.setAge(20);person.setSalary(30000);System.out.println(person.info());//如果使用构造器指定属性Person smith new Person(smith, 80, 50000);System.out.println(smith信息);System.out.println(smith.info());}
}
class Person {public String name;private int age;private double salary;public Person() {}public Person(String name, int age, double salary) {
// this.name name;
// this.age age;
// this.salary salary;// 可以将set方法写在构造器中这样仍然可以验证this.setName(name);this.setAge(age);this.setSalary(salary);}public String getName() {return name;}public void setName(String name) {// 加入对数据的校验if(name.length() 2 name.length() 6){this.name name;} else {System.out.println(名字长度不对需要(2-6)个字符给默认名字);this.name 无名;}}public int getAge() {return age;}public void setAge(int age) {// 加入对数据的校验if(age 1 age 120){this.age age;} else {System.out.println(你设置的年龄不对需要在(1-120)给默认年龄为18);this.age 18;}}public double getSalary() {// 这里可以增加对当前对象的权限判断return salary;}public void setSalary(double salary) {this.salary salary;}public String info() {return 信息为 name name age age salary salary;}
} 二继承
编写了两个类一个是Pupil类小学生一个是Graduate大学毕业。问题两个类的属性和方法很多是相同的怎么办继承代码复用性
介绍继承可以解决代码复用让编程更加靠近人类思维。当多个类存在相同的属性变量和方法时可以从这些类中抽象出父类在父类中定义这些相同的属性和方法所有的子类不需要重新定义这些属性和方法只需要通过extends来声明继承父类即可。
基本语法
class 子类 extends 父类 {
}
1、子类就会自动拥有父类定义的属性和方法
2、父类又叫超类、基类
3、子类又叫派生类 快速入门
package com.hspedu.extend_;public class Student {public String name;public int age;private double score;public void setScore(double score) {this.score score;}public void showInfo() {System.out.println(学生名 name 年龄 age 成绩 score);}
}package com.hspedu.extend_;public class Pupil extends Student{public void testing() {System.out.println(小学生 name 正在考小学数学...);}
}package com.hspedu.extend_;public class Graduate extends Student{public void testing() {System.out.println(大学生 name 正在考大学数学...);}
}package com.hspedu.extend_;public class Extends01 {public static void main(String[] args) {Pupil pupil new Pupil();pupil.name 小红;pupil.age 10;pupil.testing();pupil.setScore(60);pupil.showInfo();System.out.println();Graduate graduate new Graduate();graduate.name 大红;graduate.age 20;graduate.testing();graduate.setScore(100);graduate.showInfo();}
} 继承给编程带来了便利
1、代码复用性提高了
2、代码的扩展性和可维护性提高了
继承的细节问题
1、子类继承了所有的属性和方法非私有的属性和方法可以直接在子类直接访问但是私有属性和方法不能在子类直接访问要通过父类提供公共的方法去访问。
2、子类必须调用父类的构造器完成父类的初始化。
3、当创建子类对象时不管使用子类的哪个构造器默认情况下总会去调用父类的无参构造器如果父类没有提供无参构造器则必须在子类的构造器中用super去指定使用父类的哪个构造器完成对父类的初始化工作否则编译不会通过。
4、如果希望指定去调用父类的某个构造器则显式的调用一下super(参数列表)。
5、super在使用时必须放在构造器第一行。
6、super()和this()都只能放在构造器的第一行因此这两个方法不能共存在一个构造器中。
7、java所有类都是Object类的子类Object是所有类的基类。
8、父类构造器的调用不限于直接父类将一直往上追溯直到Object类顶级父类。
9、子类最多只能继承一个父类指直接继承即java中是单继承机制。
10、不能滥用继承子类和父类之间必须满足is-a的逻辑关系。
继承的本质
分析当子类继承父类创建子类对象时内存中到底发生了什么当子类对象创建好后建立查找的关系。 练习 三多态 传统方法解决代码复用性不高而且不利于代码维护引出多态 多态的基本介绍方法或对象具有多种形态。是面向对象的第三大特征多态是建立在封装和继承基础之上的。
多态的具体体现
1、方法的多态重载和重写就体现多态
2、对象的多态核心
1一个对象的编译类型和运行类型可以不一致
2编译类型在定义对象时就确定了不能改变
3运行类型是可以变化的
4编译类型看定义时号的左边运行类型看号的右边
Animal animal new Dog(); animal编译类型是Animal运行类型是Dog
animal new Cat(); animal的运行类型变成了Cat编译类型仍然是Animal
快速入门
package com.hspedu.poly_;public class Master {private String name;public Master(String name) {this.name name;}public String getName() {return name;}public void setName(String name) {this.name name;}public void feed(Animal animal, Food food) {System.out.println(主人 name 给 animal.getName() 吃 food.getName());}
}package com.hspedu.poly_;public class PolyObject {public static void main(String[] args) {Master master new Master(汤姆);Dog dog new Dog(大黄);Cat cat new Cat(小花);Bone bone new Bone(大骨头);Fish fish new Fish(小鱼干);master.feed(cat, fish);}
}多态的注意事项和细节1
多态的前提是两个对象类存在继承关系
1、多态的向上转型
1本质父类的引用指向了子类对象
2语法父类类型 引用名 new 子类类型();
3特点编译类型看左边运行类型看右边。
4向上转型调用方法的规则可以调用父类中的所有成员需遵守访问权限但是不能调用子类中特有成员。最终运行效果看子类的具体体现即调用方法时按照子类开始查找方法和前面的方法调用规则一致。
也就是在编译阶段能调用哪些成员是由编译类型来决定的但最终的运行效果看运行类型。 2、多态的向下转型
1语法子类类型 引用名 (子类类型) 父类引用;
2只能强转父类的引用不能强转父类的对象
3要求父类的引用必须指向的是当前目标类型的对象
4当向下转型后就可以调用子类类型中所有的成员 多态的注意事项和细节2
1、属性没有重写之说属性的值看编译类型 2、instance of比较操作符用于判断对象的运行类型是否为XX类型或XX类型的子类型 java的动态绑定机制重要
1、当调用对象方法的时候该方法会和该对象的内存地址/运行类型绑定
2、当调用对象属性时没有动态绑定机制哪里声明哪里使用 多态的应用
1、多态数组数组的定义类型为父类类型里面保存的实际元素为子类类型 应用实例现有一个继承结构如下要求创建1个Person对象、2个Student对象和2个Teacher对象统一放在数组中并调用每个对象的say方法
应用实例升级如何调用子类特有的方法比如Teacher有一个teachStudent有一个study
package com.hspedu.poly_.ployarr;public class PolyArray {public static void main(String[] args) {Person persons[] new Person[5];persons[0] new Person(jack,20);persons[1] new Student(smith,18,100);persons[2] new Student(linda,19,90);persons[3] new Teacher(king,60,20000);persons[4] new Teacher(amy,40,15000);for (int i 0; i persons.length; i) {//动态绑定机制 编译类型Person运行类型是根据根据实际情况由JVM来判断System.out.println(persons[i].say());}System.out.println();for (int i 0; i persons.length; i) {if(persons[i] instanceof Student) {Student student (Student) persons[i];student.study();}else if(persons[i] instanceof Teacher) {Teacher teacher (Teacher) persons[i];teacher.teach();}else if(persons[i] instanceof Person){}else {System.out.println(类型有误);}}}
}2、多态参数方法定义的形参类型为父类类型实参类型允许为子类类型
应用实例1前面的主人喂食物
应用实例2定义员工类Employee包含姓名和月工资以及计算年工资getAnnual的方法。普通员工和经理继承了员工经理类多了奖金bonus属性和管理manage方法普通员工多了work方法普通员工和经理类要求分别重写getAnnual方法。测试类中添加一个方法showEmpAnnual(Employee e实现获取任何员工对象的年工资并在main中调用该方法。测试类中添加一个方法testWork如果是普通员工则调用work方法如果是经理则调用manage方法。
package com.hspedu.poly_.polyparameter;public class PolyParameter {public static void main(String[] args) {Worker tom new Worker(tom,2500);Manager milan new Manager(milan,5000,20000);PolyParameter polyParameter new PolyParameter();polyParameter.showEmpAnnual(tom);polyParameter.showEmpAnnual(milan);polyParameter.testWork(tom);polyParameter.testWork(milan);}public void showEmpAnnual(Employee e) {System.out.println(e.getAnnual());}public void testWork(Employee e) {if(e instanceof Worker) {((Worker) e).work(); //有向下转型操作} else if(e instanceof Manager) {((Manager) e).manage();}else {System.out.println(不做处理...);}}
}五、Super关键字
介绍super代表父类的引用用于访问父类的属性、方法、构造器
基本语法
1、访问父类的属性但不能访问父类private属性 super.属性名;
2、访问父类的方法但不能访问父类private方法 super.方法名(参数列表);
3、访问父类的构造器super(参数列表);只能放在构造器的第一句只能出现一句
super带来的便利/细节
1、调用父类构造器的好处分工明确父类的属性由父类初始化子类的属性由子类初始化
2、当子类中有和父类中的成员属性和方法重名时为了访问父类的成员必须通过super。如果没有重名使用super、this、直接访问是一样的效果。
this.say()等价于say()从本类开始查找
super.say()直接从父类开始查找
3、super的访问不限于直接父类如果爷爷类和本类中有同名的成员也可以使用super去访问爷爷类的成员如果多个基类上级类中都有同名的成员使用super访问遵循就近原则。A-B-C super和this的比较 六、方法重写/覆盖overwrite
简单的说方法覆盖重写就是子类有一个方法和父类的某个方法的名称、返回类型、参数一样那么就说子类的这个方法覆盖了父类的那个方法。不只是一层的关系
注意事项和细节
1、子类方法的形参列表、名称要和父类父类方法的形参列表、名称完全一样
2、子类方法的返回类型要和父类方法的返回类型一样或者是父类返回类型的子类 3、子类方法不能缩小父类方法的访问权限可以放大 public protected 默认 private
方法重写和方法重载的比较 七、Object类详解 一equals方法
和equals对比
1、是一个比较运算符既可以判断基本类型又可以判断引用类型。
如果判断基本类型判断的是值是否相等 实例int i 10; double d 10.0;如果判断引用类型判断的是地址是否相等即判定是不是同一个对象。 2、equals是Object类中的方法只能判断引用类型。默认判断的是地址是否相等子类中往往重写该方法用于判断内容是否相等。比如Integer,String。
String类的equals方法把Object类的equals方法重写了变成了比较两个字符串值是否相同。 举例 应用实例判断两个Person对象的内容是否相等如果两个Person对象的各个属性值都一样则返回true反之false。
package com.hspedu.object_;public class Person {private String name;private int age;private char gender;// 重写Object的equals方法public boolean equals(Object obj) {// 如果比较两个对象是同一个对象则直接返回trueif(this obj) {return true;}// 类型判断if(obj instanceof Person) {// 进行向下转型因为需要得到obj的各个属性Person p (Person)obj;return this.name.equals(p.name) this.age p.age this.gender p.gender;}return false;}public Person(String name, int age, char gender) {this.name name;this.age age;this.gender gender;}public String getName() {return name;}public void setName(String name) {this.name name;}public int getAge() {return age;}public void setAge(int age) {this.age age;}public char getGender() {return gender;}public void setGender(char gender) {this.gender gender;}
}二hashCode方法 1、提高具有哈希结构的容器的效率
2、两个引用如果指向的是同一个对象则哈希值肯定是一样的
3、两个引用如果指向的是不同对象则哈希值是不一样的
4、哈希值主要根据地址号来的但不能将哈希值等价于地址
5、后面在集合中hashCode需要的话也会重写 三toString方法 默认返回全类名哈希值的十六进制
子类往往重写toString方法用于返回对象的属性信息当直接输出一个对象时toString方法会被默认调用
重写前 重写
package com.hspedu.object_;public class Monster {private String name;private String job;private double salary;public Monster(String name, String job, double salary) {this.name name;this.job job;this.salary salary;}// 重写toString方法输出对象属性Overridepublic String toString() {return Monster{ name name \ , job job \ , salary salary };}
}package com.hspedu.object_;public class ToString_ {public static void main(String[] args) {Monster monster new Monster(妖怪, 巡山, 1000);System.out.println(monster.toString());System.out.println(monster);}
}三finalize方法 1、当对象被回收时系统自动调用该对象的finalize方法。子类可以重写该方法做一些释放资源的操作。
2、什么时候被回收当某个对象没有任何引用时则jvm就认为这个对象是一个垃圾对象就会使用垃圾回收机制来销毁该对象在销毁该对象前会先调用finalize方法。
3、垃圾回收机制的调用 是由系统来决定即有自己的GC算法也可以通过System.gc()主动触发垃圾回收机制。
4、实际开发中几乎不会用到finalize方法
package com.hspedu.object_;public class Car {private String name;public Car(String name) {this.name name;}Overrideprotected void finalize() throws Throwable {System.out.println(我们销毁汽车 name);System.out.println(释放了某些资源);}
}package com.hspedu.object_;public class Finalize_ {public static void main(String[] args) {Car car new Car(宝马);// 这时car对象就是一个垃圾垃圾回收器就会销毁对象在销毁对象前会调用该对象的finalize方法// 程序员就可以在finalize中写自己的业务逻辑代码比如释放资源数据库连接、打开文件...// 如果程序员不重写finalize那么就会调用Object类的finalize即默认处理car null;System.gc(); //主动调用垃圾回收器System.out.println(程序退出了...);}
}八、断点调试debug
1、在断点调试过程中是运行状态是以对象的运行类型来执行的
2、断点调试的快捷键
F7跳入跳入方法内
F8跳过 逐行执行代码
shiftF8跳出 跳出方法
F9resume执行到下一个断点 演示1 演示2 文章转载自: http://www.morning.bmncq.cn.gov.cn.bmncq.cn http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.mmsf.cn.gov.cn.mmsf.cn http://www.morning.sfhjx.cn.gov.cn.sfhjx.cn http://www.morning.kdfqx.cn.gov.cn.kdfqx.cn http://www.morning.cpljq.cn.gov.cn.cpljq.cn http://www.morning.ybgyz.cn.gov.cn.ybgyz.cn http://www.morning.zpyh.cn.gov.cn.zpyh.cn http://www.morning.ryxdf.cn.gov.cn.ryxdf.cn http://www.morning.kjkml.cn.gov.cn.kjkml.cn http://www.morning.wkmyt.cn.gov.cn.wkmyt.cn http://www.morning.jpnw.cn.gov.cn.jpnw.cn http://www.morning.wynqg.cn.gov.cn.wynqg.cn http://www.morning.nqfxq.cn.gov.cn.nqfxq.cn http://www.morning.zcsyz.cn.gov.cn.zcsyz.cn http://www.morning.qkxt.cn.gov.cn.qkxt.cn http://www.morning.wkknm.cn.gov.cn.wkknm.cn http://www.morning.tdxnz.cn.gov.cn.tdxnz.cn http://www.morning.kstgt.cn.gov.cn.kstgt.cn http://www.morning.jjzrh.cn.gov.cn.jjzrh.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.gkmwk.cn.gov.cn.gkmwk.cn http://www.morning.fcxt.cn.gov.cn.fcxt.cn http://www.morning.lbggk.cn.gov.cn.lbggk.cn http://www.morning.ktrh.cn.gov.cn.ktrh.cn http://www.morning.cjmmt.cn.gov.cn.cjmmt.cn http://www.morning.jkpnm.cn.gov.cn.jkpnm.cn http://www.morning.yrccw.cn.gov.cn.yrccw.cn http://www.morning.nfpct.cn.gov.cn.nfpct.cn http://www.morning.bksbx.cn.gov.cn.bksbx.cn http://www.morning.jqjnx.cn.gov.cn.jqjnx.cn http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn http://www.morning.kcbml.cn.gov.cn.kcbml.cn http://www.morning.ryxdr.cn.gov.cn.ryxdr.cn http://www.morning.sjbpg.cn.gov.cn.sjbpg.cn http://www.morning.lpyjq.cn.gov.cn.lpyjq.cn http://www.morning.junmap.com.gov.cn.junmap.com http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com http://www.morning.rdnjc.cn.gov.cn.rdnjc.cn http://www.morning.yfddl.cn.gov.cn.yfddl.cn http://www.morning.xlpdm.cn.gov.cn.xlpdm.cn http://www.morning.srrrz.cn.gov.cn.srrrz.cn http://www.morning.pswqx.cn.gov.cn.pswqx.cn http://www.morning.plkrl.cn.gov.cn.plkrl.cn http://www.morning.blfll.cn.gov.cn.blfll.cn http://www.morning.wsxxq.cn.gov.cn.wsxxq.cn http://www.morning.nnhrp.cn.gov.cn.nnhrp.cn http://www.morning.nshhf.cn.gov.cn.nshhf.cn http://www.morning.wckrl.cn.gov.cn.wckrl.cn http://www.morning.kabaifu.com.gov.cn.kabaifu.com http://www.morning.wkmrl.cn.gov.cn.wkmrl.cn http://www.morning.tqpds.cn.gov.cn.tqpds.cn http://www.morning.bssjz.cn.gov.cn.bssjz.cn http://www.morning.mzhhr.cn.gov.cn.mzhhr.cn http://www.morning.mnqz.cn.gov.cn.mnqz.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.gdgylp.com.gov.cn.gdgylp.com http://www.morning.mrcpy.cn.gov.cn.mrcpy.cn http://www.morning.rrpsw.cn.gov.cn.rrpsw.cn http://www.morning.lgmty.cn.gov.cn.lgmty.cn http://www.morning.ybgcn.cn.gov.cn.ybgcn.cn http://www.morning.jmbfx.cn.gov.cn.jmbfx.cn http://www.morning.hqjtp.cn.gov.cn.hqjtp.cn http://www.morning.dmwbs.cn.gov.cn.dmwbs.cn http://www.morning.mhfbp.cn.gov.cn.mhfbp.cn http://www.morning.kqglp.cn.gov.cn.kqglp.cn http://www.morning.cczrw.cn.gov.cn.cczrw.cn http://www.morning.xpqsk.cn.gov.cn.xpqsk.cn http://www.morning.kgnnc.cn.gov.cn.kgnnc.cn http://www.morning.btblm.cn.gov.cn.btblm.cn http://www.morning.kdgcx.cn.gov.cn.kdgcx.cn http://www.morning.hctgn.cn.gov.cn.hctgn.cn http://www.morning.xjnw.cn.gov.cn.xjnw.cn http://www.morning.yqsr.cn.gov.cn.yqsr.cn http://www.morning.gagapp.cn.gov.cn.gagapp.cn http://www.morning.tsqpd.cn.gov.cn.tsqpd.cn http://www.morning.hhxwr.cn.gov.cn.hhxwr.cn http://www.morning.lydtr.cn.gov.cn.lydtr.cn http://www.morning.dhyqg.cn.gov.cn.dhyqg.cn http://www.morning.wtnwf.cn.gov.cn.wtnwf.cn