概述
包名命名规范
- 英文字母小写(推荐)
- 域名倒序 + 模块 + 功能
跨包类调用(解决同名文件冲突)
定义包 package 包名
倒入包 import 包名.类名(相对于*,优先级更高)
在程序直接加包名.类名(两个位置)
ctrl + shift + o 快速导入包
alt + / 获取提示菜单
面向对象
创建类
引用类
成员属性默认带有初始值
单一功能原则
有且只有一个引起功能变化的原因
new关键字(对象引用)
声明对象:在内存栈中开辟空空间(null),存放堆地址
实例化对象:在内存堆中开辟空间,初始化
无参(有参)构造方法
赋值错误?
就近原则
this
普通方法和构造方法重名不推荐
构造方法不能被普通方法调用,只能在构造方法之间完成
封装(private)
封装步骤
F10 逐过程
F11 逐语句
逐语句,就是每次执行一行语句,如果碰到函数调用,它就会进入到函数里面。
逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。
跳出,是当你进入到函数内,跳出可以让你直接执行函数内剩余的语句,直到返回到该函数被调用时的后面的语句处。
“逐语句”和“逐过程”的差异仅在于它们处理函数调用的方式不同,这两个命令都指示调试器执行下一行的代码。如果某一行包含函数调用,“逐语句”仅执行调用本身,然后在函数内的第一个代码行出停止,而“逐过程”执行整个函数,然后在函数外的第一行处停止。
如果要查看函数调用的内容,请使用“逐语句”。
若要避免单步执行函数,请使用“逐过程”。
快速生成属性的操作方法(set只写,get只读):右键->Source->Generate Getters and Setters
static静态信息(属性和方法)
两种调用方式
- 类名.成员(推荐)
- 对象名.成员
不同类对象共享。类加载时产生,销毁时释放,生命周期长
静态方法不能直接调用一个类中的非静态成员,只能直接调用静态成员
静态方法不能使用this
只能通过对象实例化后,对象.成员方法的方式访问静态方法
static不能创建方法内的局部对象
在普通成员方法中,可以直接访问类中的静态成员
在定义内部类的时候,可以在其前面加上一个权限修饰符static。
静态代码块(调用一次),普通代码块(定义在方法中),构造代码块(定义在类中)
![这里写图片描述](https://img-blog.csdn.net/20170804184910719?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](https://img-blog.csdn.net/20170804193153521?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)继承
![这里写图片描述](https://img-blog.csdn.net/20170807204552436?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) ![这里写图片描述](https://img-blog.csdn.net/20170804195400670?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzM5MzY0ODE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)is-a(英语:subsumption,包含架构)指的是类的父子继承关系
满足is a的关系就可以形成继承关系
- 代码复用
- 缩短开发周期
单继承实现
子类可以访问父类非私有成员
方法重写(继承:子类重写父类)
- 语法规则(都要与父类继承的方法相同)
- 返回值类型
- 方法名
- 参数类型,顺序,个数
访问修饰符
- 公有的: public
- 私有的: private
- 受保护的: protected
- 默认
super父类对象的引用(重名时)
super.父类对象
- 父类构造方法不允许被继承,不允许被重写,但是会影响子类对象的实例化
- 子类构造默认调用父类无参构造方法
- super(…参数)
-
继承后的初始化顺序
问题:静态成员优于静态代码块先执行?
访问修饰符不影响成员加载顺序,跟书写位置有关
this当前对象,super父类对象
- 不能再静态方法中调用
- this();会优先调用无参构造的方法
- 构造方法中super和this不能并存
Object类(重写)
注意空指针异常
- 例:String类型重写了Object类型的equals方法
- Object equals 判断两个引用在内存地址中是否相同(是否指向同一个对象),相当于==
- String equals 判断传入的字符串是否相等
- 继承Object的toString方法,打印出对象的字符串的表现形式(类型信息 + @ +地址信息)
- 输出对象名时,默认会直接调用类中的toString
final关键字的使用(不允许继承)
- 位置可以和修饰资源符互换 public final class | fnal public class
- 该类没有子类
- final 方法 : 该方法不允许被子类重写,但是可以正常被子类继承使用
- final 方法内局部变量: 只要在具体被使用之前进行赋值即可,一旦赋值不允许被修改
- final 类中成员属性: 赋值过程:1 定义直接初始化 2 构造方法 3 构造代码块。 如果没有进行赋值,报错
注解
@Override
//
子类重写父类
public void eat() {
// TODO Auto-generated method stub
super.eat();
}
设计模式
单例设计模式
饿汉式:创建对象实例直接初始化,空间换时间,线程安全
package com.hanxiao.signleton;
public class SingletonOne {
//
私有构造
private SingletonOne(){
}
//
创建私有静态实例
private static SingletonOne instance
= new SingletonOne();
//
公有静态方法返回静态实例对象
public static SingletonOne getInstance(){
return instance;
}
}
懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用方法时,才能完成初始化操作,时间换空间。线程存在风险
package com.hanxiao.signleton;
public class SingletonTwo {
//
私有构造方法
private SingletonTwo(){
}
//
静态实例对象
private static SingletonTwo instance = null;
//
公有静态方法返回并创建静态实例对象
public static SingletonTwo getInstance(){
if(instance == null)
instance = new SingletonTwo();
return instance;
}
}
- 解决懒汉式线程风险
- 同步锁
- 双重校验锁
- 静态内部类
- 枚举
多态(Polymorphism,最重要)
意味着允许不同类的对象对同一消息做出不同的响应
- 必要条件:
- 满足继承关系
- 父类引用指向子类对象
- 多态分类
- 编译时多态
- 别名:设计时多态
- 通过方法重载实现
- 运行时多态(JAVA)
- 程序运行时动态决定调用哪个方法
- 编译时多态
向上(隐式,自动)转型:子类对象转型为父类对象,父类引用指向子类实例
小类转大类
可以调用子类重写父类的方法以及父类派生的方法
注意:父类中的静态方法无法被重写,所以向上转型之后,只能调用到父类原有的静态方法
无法调用子类独有方法向下(强制类型转换)转型
子类引用指向父类对象,此类必须进行强转
instanceof 判断是否满足对象条件(提高安全性) 判断某对象(父类)是否有该实例的特征
抽象类 abstract
不允许直接实例化,可以通过向上转型,指向子类实例
解决问题:限制子类的设计随意性,无意义父类的实例化
抽象方法
- 不允许包含方法体
- 子类中需要重写父类的抽象方法,否则子类需要变成抽象类
- static, final,private 不能与abstract并存
问题:一个孩子怎么有多个爸爸?
- 大哥大
- 智能手机
- 功能手机
- 游戏手机
- 功能手机
- 智能手表,电脑,怎么并入呢?(相同行为)
解决通过接口进行行为关联,也就是行为继承
- 智能手机
接口(抽象方法和常量)
- 命名规则,以I打头
- implements 接口名称
接口(默认方法和静态方法)
多接口中重名默认方法处理的解决方案
一个类可以实现多接口
新建一个自己的重名默认方法
接口继承
内部类(更好的封装)
成员内部类(最常见,普通内部类)
静态内部类
方法内部类
类对象生命周期仅在方法里有效,在方法执行完毕后销毁
匿名内部类
- 类定义,类创建一起完成
- 匿名内部类没有类型名称,实例对象名称
- 编译后的文件命名:外部类$数字.class
- 无法使用private,public,protected,abstract,static修饰
- 无法编写构造方法,不过可以使用构造代码块
- 不能出现静态成员
- 匿名内部类可以实现接口也可以继承父类,但是不可兼得
最后
以上就是超级白猫为你收集整理的Java入门笔记-(面向对象:封装,多态,继承)的全部内容,希望文章能够帮你解决Java入门笔记-(面向对象:封装,多态,继承)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复