Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类
文章目录
- Eclipse工具中java项目的工程结构
- 静态代码块的书写格式
- 静态代码块,构造代码块,构造方法的优先级
- static关键字的特点
- 封装的概念
- private关键字的特点
- 面向对象思想特点
- Eclipse中一些常用的快捷键
- 继承的概念
- 继承的好处
- 继承的格式
- Java中的开发原则
- 继承的特点
- 继承中的注意事项
- 继承中变量名相同的访问问题
- 继承中子类构造方法访问父类构造方法的问题
- this和super的区别
- 代码块的优先级问题
- 有关方法重写和方法重载的区别
- 多态的概念
- 多态的前提条件:
- 多态的成员访问特点:
- 多态的好处:
- 多态的弊端:
- 多态的向下转型使用不当,程序出现异常:
- 有关final关键字的特点:
- final修饰基本类型的变量和引用类型的区别
- 冒泡排序思想
- 冒泡排序核心代码
- 选择排序思想
- 选择排序核心代码
- 抽象类的概念
- 抽象类中抽象方法格式
- 抽象类注意事项
- 抽象类的本质
- 抽象类的特点:
- abstract关键字不能和哪些关键字共存
- 接口的概念
- 接口的基本注意事项:
- 接口的特点:
- 抽象类和接口的区别:
- 包的编译和运行
- 同一个包下
- 不同包下
- 方法的形式参数问题:(引用类型)
- 内部类的概念
- 内部类注意事项
- 内部类的分类:
- 成员内部类的访问方法
- 成员内部类中的修饰符:
- 权限修饰符
- 方法返回值问题(引用类型)
- 成员内部类中的修饰符:
- 权限修饰符
- 方法返回值问题(引用类型)
Eclipse工具中java项目的工程结构
静态代码块的书写格式
static{
//代码块内容
}
静态代码块,构造代码块,构造方法的优先级
静态代码块>构造代码块>构造方法
***注意: 静态代码块只执行一次
static关键字的特点
1)被static修饰的,随着类的加载而加载
2)优先于对象存在
3)可以多个对象共享,共用
4)访问方式: 类名直接访问
**被static修饰的变量推荐访问方式: 类名.变量名
**被static修饰的方法推荐访问方式: 类名.方法名
封装的概念
将类的属性或者方法私有化,保证数据的安全性,对外提供公共的访问方法
private关键字的特点
private可以修饰变量,也可以修饰方法,只能在本类中访问
但是可以间接的通过公共的方法来访问
面向对象思想特点
1)更符合生活中思想行为习惯
2)将复杂的问题简单化
3)从执行者变为指挥者
Eclipse中一些常用的快捷键
alt+/:eclipse中神键 :通过缩写或者特定的单词可以提示代码
alt+sift+s–>c :创建无参构造方法
alt+shift+s–>o :创建有参构造方法
alt+shift+s–>r :提供公共的访问方法:setXXX(Xx xx)/getXXX
ctlr+d:删除某一行代码
ctrl+shift+o: 导包的快捷键
在创建对象的时候,new 类名() ; 使用ctrl+1/ctlr+2+l(字母),自动补全代码
继承的概念
将一些类的共性抽取出来,定义到一个独立的类中,让这个独立的类和这些类产生一种关系(extends 继承关系)
继承的好处
1)提高代码的复用性
2)提高代码的维护性
3)类与类产生的继承关系是多态的前提条件
继承的格式
class 父类名{}
class 子类名 extends 父类名{}
Java中的开发原则
低耦合,高内聚
耦合:类与类之间的关系,关系越少越好(在开发中:降低程序间的耦合性---->Spring框架:IOC思想:控制反转)
内聚:完成某个事情的能力,在一个类中能完成的,尽量在一个类中完成(执行力)
继承的特点
1)java中类与类的继承,只支持单继承,不支持多继承
2)支持多层继承
继承中的注意事项
1)子类继承父类,不能继承父类的私有成员(成员变量和成员方法)
因为被private修饰的外界访问不到,只能在本类中访问,但是可以通过公共的访问方法进行访问
2)子类继承父类,不能继承父类的构造方法,但是可以通过super关键字访问父类的构造方法
继承中变量名相同的访问问题
遵循"就近原则",从方法中最近的局部变量找起,如果没有从子类成员变量找,如果没有再从父类成员变量中寻找
继承中子类构造方法访问父类构造方法的问题
子类中的构造方法默认访问父类的无参构造方法,由于存在继承关系,创建子类对象,初始化子类的时候,可能用到父类的数据,因此需要先对父类初始化(执行父类构造方法),父类初始化完毕后,才是子类初始化,也就是分层初始化
**注意: 子类中的构造方法第一句话默认存在super();
super代表父类空间标识
注意事项:
子类的构造方法默认访问父类的无参,
那么如果父类中没有提供无参构造方法?会怎么办
会编译报错,因为父类有存在有参构造方法,系统不会提供无参的,又由于子类的所有构造
方法默认访问父类的无参,所以报错了!
如何解决呢?
1)手动给出父类的无参构造方法
2)可以让子类的所有构造方法,默认访问父类的有参
在子类的构造方法的第一句话:super(xxx)
子类中所有构造方法的一个只要能够让父类初始化即可!
3)通过子类的有参构造方法,访问this()本类的无参构造方法,在通过本类的无参构造方法
访问父类的有参构造(让父类先进行初始化)
this和super的区别
this:代表当前类的对象地址值引用
super:代表父类的空间标识(父类对象的地址值引用)
访问的区别
this.成员变量;访问的当前类的成员变量
super.成员变量;访问的父类的成员变量
this.成员方法名() ;访问的是否当前类的成员方法
super.成员方法名() ;访问的是父类的成员方法
this() :访问的是本类无参构造方法
this(xxx):访问的本类的有参构造方法
super():访问的是父类的无参构造方法
super(xxx):访问的父类的有参构造方法
代码块的优先级问题
静态代码块只执行一次,> 构造代码块 > 构造方法
运行程序的时候,jvm检查语法结构,有父子关系,先加载父类,再是子类,跟static相关 先进内存
2)继承中:分层初始化
优先让父类初始化(执行父类的构造方法)---->子类可能用到父类的数据,所以父类先初始化,
然后子类初始化(执行子类的构造方法)
有关方法重写和方法重载的区别
方法重写:
子类继承父类,子类出现了和父类一摸一样的方法,称为方法覆盖,复写/重写… (Override)
方法重载:
定义方法的时候,方法名相同,参数列表不同,与返回值无关 (Overload)
有的时候,为了保证数据的安全性,不想让子类将父类的方法覆盖掉—?
如何解决呢?
针对这种情况:Java提供一个关键字:final 表示最终的,终态的,无法更改的!
子类是不能覆盖父类的final修饰的方法
多态的概念
一个事物在不同时刻显示出的不同状态(在堆内存中的变化)
多态的前提条件:
1)必须存在继承关系 (继承的好处第三点)
2)要有方法重写 :
举例:动物的吃和睡的功能,只要看到具体的动物类:才能知道吃和睡的功能
3)需要存在:父类引用指向子类对象 (向上转型:使用的父类的东西,必须编译看左边!)
格式:父类名 对象名 = new 子类名() ;
多态的成员访问特点:
父类名 对象名 = new 子类名() ;
1)成员变量: 编译看左,运行看左边
2)成员方法:(非静态的):编译看左边,运行看右(因为存在子类覆盖父类的方法:方法重写)
3)静态的成员方法:编译看左,运行看左
(子类出现了和父类一摸一样的静态方法,静态方法跟类相关,不存在重写!,访问方式:类名.方法名())
4)构造方法:
由于存在继承关系,还需要分层初始化!
方法重写:指的是非静态方法!
多态的好处:
1)提高了代码的扩展性(由多态)
2)提高了代码的复用性,维护性(由继承关系保证)
多态的弊端:
不能够访问子类的特有功能!
如何解决呢?
方式1:可以创建子类具体类对象 :子类名 对象名 = new 子类名() ;
对象名.访问子类的自己的功能;
但是,不好,从内存角度考虑,在堆内存中产生一个内存空间(比较消耗内存空间!)
方式2:
多态的第三个条件:父类引用指向子类对象 (向上转型)
Fu f = new Zi() ;
想办法:将父类的引用强制转换为子类的引用(向下转型)
Zi z = (Zi)f;
好处:不需要重新new对象,在堆内存是比较节省内存空间的!
前提条件:要使用向下转型,必须先使用向上转型!
多态的向下转型使用不当,程序出现异常:
注意事项:
产生一个ClassCastException:运行时期异常(RuntimeException)的一种
使用向下转型的时候类型不匹配导致的!
有关final关键字的特点:
表示:最终的,无法更改(状态修饰符)
final修饰类,该类不能被继承!
final可以修饰成员变量,该变量此时是一个常量(常驻内存!)
自定义常量的时候:public static final 数据类型 变量名 = 初始化;
final可以修饰成员方法,该方法不能被重写
final修饰的变量:只能被赋值一次(它的值不能再被更改了!)
常量的分类:
字面值常量
自定义常量(final修饰的)
final修饰基本类型的变量和引用类型的区别
final修饰的基本数据类型
基本数据类型的变量:它的数据值不能再改变了(具体的数据值)
final修饰的引用数据类型,它的地址值不能再改变了(但是成员变量的值不影响!)
冒泡排序思想
从数组的第一个元素开始,两两比较,小的在前,大的在后,第一次比较结束,数组最大值出现在最大索引处
第一次有0个元素不进行比较
第二次有1个元素不进行比较
.
.
.
总共比较数组长度-1次
冒泡排序核心代码
for(int i=0;i<arr.length-1;i++){for(int j=0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}} }
选择排序思想
用数组角标值为0的元素依次与后面的元素进行比较,将较小的值放在前面,较大的值放在后面,第一次比较完毕,数组最小值出现在了最小索引处,依次这样比较,就可以得到一个排序好的数组.
比较次数: 数组长度-1次
选择排序核心代码
for(int i=0;i<arr.length-1;i++){for(int j=i+1;j<arr.length;j++){if(arr[i]>arr[j]){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}
}
抽象类的概念
在一个类中,将某个功能给出声明(抽象方法),那么这个类就是抽象类
抽象类中抽象方法格式
抽象方法:
权限修饰符(public) abstract 返回值类型 方法名() ;
抽象类注意事项
1)如果一个类中,有抽象方法,那么该类一定是抽象类;抽象类中一定是抽象方法吗?,也可以有非抽象方法
2)抽象类如何实例化呢? 抽象类如何创建对象
抽象类不能直接实例化! ,通过具体的子类进行实例化
格式:
父类名 对象名 =new 子类名() ; 抽象类多态
3)抽象类的子类:
子类要么具体类,要么抽象类
子类是具体类,直接可以抽象类多态的形式实例化!
子类是抽象类,应该还要提供更最具体的子类,否则都无法实例化(没有意义!)
4)在抽象类中定义抽象方法的时候,那么抽象方法必须带上修饰符:abstract,不能省略!
抽象类的本质
强制子类必须完成的事情!
抽象类的特点:
1)成员变量:
既可以定义常量,也可以定义变量
2)成员方法:
即可定义抽象方法(必须要有abstract),也可以定义非抽象方法
3)构造方法:
还是继承关系,构造方法:对数据进行初始化---->分层初始化!
面试题:
有抽象方法的类一定是抽象类,
那么如果一个类中没有抽象方法,这个类可以不可以定义为抽象类呢?
可以,意义是什么?
意义:就是让当前类不能够直接实例化(实例化:创建对象)
那么如何实例化呢?
它会提供一个静态功能,返回值就是该类本身! (Java中一种设计模式)
举例:
Calendar:常用类 ---日历类 是一个抽象类 (Java提供一个日历类)
在当前类提供了一个静态功能
public static Calendar getInstance()
abstract关键字不能和哪些关键字共存
- 不能和final一块使用:
final修饰成员方法:方法不能被重写,但是abstract修饰的方法,强制类完成的事情!
- 不能和private一块使用: private只能在类中访问!
- 被static修饰的方法直接使用类名调用,---->但是抽象方法又需要让子类重写(静态方法算不上方法重写)
- 方法重写注意事项:
子类继承父类,子类重写父类的方法必须保证访问权限足够大,使用public修饰(要么跟父类的修饰符保持一致)
接口的概念
描述一个事物的额外功能,本身不具备的
接口的基本注意事项:
Java提供接口来定义:
interface 接口名{
...
}
接口中的方法只能是抽象方法,不能有方法体
接口的命名规则:多个单词---->遵循"大驼峰命名法"
接口的实现类和接口是一种:implements 实现关系
将接口的实现类--->称为"接口的子实现类"
- 接口如何实例化呢?
接口不能直接实例化 ,
- 格式:
接口名 对象名 =new 子实现类名() ; //接口多态
接口的特点:
1)成员变量 只能有常量,用public static final 修饰,只能赋值一次
2)成员方法 只能有抽象方法,public abstract 返回值类型 方法名(); public abstract 可以省略
3)构造方法 没有构造方法
抽象类和接口的区别:
1)成员的区别
抽象类: 成员变量既可以是变量也可以是常量
成员方法既可以是抽象方法,也可以是非抽象方法
抽象类有构造方法,进行初始化
接口: 成员变量只能有常量 public static final修饰 只能赋值一次
成员方法必须是抽象方法
没有构造方法
2)关系的区别
类与类: 继承关系,只支持单继承,可以多层继承
类与接口: 实现关系,一个类继承一个父类的同时可以实现(implements)多个接口
接口与接口: 继承关系,可以单继承,也可以多继承
3)设计模式的区别
抽象类: 继承保证代码复用性,多态保证代码扩展性,是一种"is a"的关系
接口: 是一种额外的功能,体现的是一种"like a"的关系
包的编译和运行
同一个包下
手动方式
1)先进入到HelloWorld.java文件所在目录中,使用javac 对这个java源文件进行编译,会产生
HelloWorld.class文件
2)手动方式创建对应包的目录
com
qianfeng
3)将1)---->编译后后HelloWorld.class文件放在2)中的子文件夹中4)运行:带上包进行运行java com.qianfeng.类名
自动方式:
1)针对源文件进行编译
javac -d(跟上参数) . java源文件 — >将class文件存储到指定包的下面
2)直接运行即可
java 包名.类名 —>回车
不同包下
在不同包下的编译和运行:
1)将当前被导入的类:进行编译
进入到当前目录下面:
javac -d . Demo.java---->com.cn
Demo.class
2)进入到当目录下面javac -d . Test.java---->com.qianfengTest.class3)java com.qianfeng.Test; 运行 java 包名.类名
方法的形式参数问题:(引用类型)
如果方法的形式参数是一个引用类型
如果是具体类,需要传递该具体类的对象!
如果是抽象类类型,实际参数需要该抽象类的子类对象!
如果是接口,实际参数需要该接口子实现类对象!
内部类的概念
在一个类中定义了另一个类
在A类中定义一个B类,就B类称为A类的内部类;将A类称为B类外部类
内部类注意事项
内部类的成员直接可以访问外部类的成员包括私有!
外部类的成员访问成员内部类的成员的时候,不能直接访问,而要通过内部类对象访问
内部类的分类:
1)成员内部类:
在类 的成员位置定义的类
2)局部内部类:
在方法定义中定义的类(局部位置)
成员内部类的访问方法
1)当成员内部类的修饰符不是private的时候:
创建内部类对象的格式: 外部类名.内部类名 对象名=new 外部类名().new 内部类名();
2)当成员内部类的修饰符是private的时候
不能创建内部类对象,需要在外部类的成员方法中创建内部类对象,调用内部类的属性和功能,在测试类中创建
外部类对象,调用此方法,即可实现访问内部类
3)当成员内部类被static修饰的时候
创建内部类对象的格式: 外部类名.内部类名 对象名=new 外部类名.内部类名();
或者可以用 外部类名.内部类名.方法名() 的方式调用内部类的静态方法
成员内部类中的修饰符:
private:保证的数据安全性
static修饰: 有什么特点?
将静态的成员内部类看成是外部类的静态成员!
静态的成员内部类的成员方法(静态的还是非静态),只能访问外部类的静态成员!
权限修饰符
private 只能在本类中访问
默认修饰符 可以在本类中,同包的子类或者无关类中访问
protected 可以在本类,同包子类,无关类,不同包的子类中访问(不同包的无关类不可以访问)
public 均可以访问
方法返回值问题(引用类型)
方法返回值
是一个具体类类型:需要返回return 该具体类对象!
如果方法返回值是一个引用类型:
如果引用类型是一个抽象类:该方法需要返回该抽象类的子类对象!
如果方法返回是一个引用类型:
外部类对象,调用此方法,即可实现访问内部类
3)当成员内部类被static修饰的时候
创建内部类对象的格式: 外部类名.内部类名 对象名=new 外部类名.内部类名();
或者可以用 外部类名.内部类名.方法名() 的方式调用内部类的静态方法
成员内部类中的修饰符:
private:保证的数据安全性
static修饰: 有什么特点?
将静态的成员内部类看成是外部类的静态成员!
静态的成员内部类的成员方法(静态的还是非静态),只能访问外部类的静态成员!
权限修饰符
private 只能在本类中访问
默认修饰符 可以在本类中,同包的子类或者无关类中访问
protected 可以在本类,同包子类,无关类,不同包的子类中访问(不同包的无关类不可以访问)
public 均可以访问
方法返回值问题(引用类型)
- 方法返回值
是一个具体类类型:需要返回return 该具体类对象!
- 如果方法返回值是一个引用类型:
如果引用类型是一个抽象类:该方法需要返回该抽象类的子类对象!
- 如果方法返回是一个引用类型:
引用类型是一个接口类型:需要返回该接口的子实现类对象!
Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类相关推荐
- Java基础【之】面向对象编程(封装、继承(extends、方法重写、super)、多态(动态绑定、重载/重写)、代码实现)
Java基础[之]面向对象编程(封装.继承.多态.代码实现) 1.封装 2.继承 2.1.extends 2.2.方法重写 2.3.super 3.多态 3.1.对象的多态.方法的多态 3.2.动态绑 ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- Java学习第十二天<封装详解><继承><super详解><方法重写><多态>
封装详解 //类 public class Student {//名字 学号 性别 属性私有(new 以后不能赋值)private String name;private int id;private ...
- 第三周 Java语法总结__static关键字__代码块__继承__this和super的区别__重写__final关键字__多态__抽象__接口__形参问题__包__权限修饰符__内部类
文章目录 6.static关键字 1)静态static关键字的特点: 2)关于static关键字的使用注意事项 3)什么时候将变量定义为成员变量: 7.文档说明书: 8.代码块 9.继承 1)继承的概 ...
- java基础2:this、static、final、abstract关键字、代码块、生成API工具包、继承、多态、方法重载和重写,抽象类、接口、常见异常、java权限修饰符、选择排序思想和程序和内部类
1.this关键字 this表示当前类对象的地址空间值的引用.就是说,this代表了new出来的对象 其最大作用就是解决了构造器中局部变量隐藏成员变量.即用this.变量名 = 变量名 区分. 2.s ...
- Java SE_封装、继承、object类、super-this关键字、方法重写、多态、instanceof、类型转换
封装 该露的露,该藏的藏 我们程序设计要追求"高内聚,低耦合".高内聚:类的内部数据操作细节自己完成,不允许外部干涉:低耦合:仅暴露少量的方法给外部使用. 封装(数据的隐藏) 通常 ...
- java写一个外网访问的接口_【JAVA基础】一个案例搞懂类、对象、重载、封装、继承、多态、覆盖、抽象和接口概念及区别(中篇)...
0 前言 初学JAVA时,总会对一些概念一知半解,相互混淆,不明其设计的用意,如类.对象.重载.封装.继承.多态.覆盖.抽象类.接口概念.为便于理解和巩固,本文将基于一个案例及其变形,展现各个概念的定 ...
- 继承extends ,this super final 关键字,abstract抽象类,override方法重写
继承extends 私有成员不能被继承 总结:子类方法中,使用变量的原则是:就近原则 1 package review06; 2 /* 3 私有成员不能被继承 4 子类和父类有同名的成员变量:在子类 ...
- JAVA 重写重载/多态/抽象类/封装/接口/包
重写&重载 重写(override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重载(overloading) 是在一个类里面,方法名 ...
最新文章
- java.util.concurrent包详细分析--转
- Spring Cloud 爆高危漏洞!!!
- 爬虫爬取在线小说阅读网站详解
- 深度学习总结:pytorch构建RNN和LSTM,对比原理图加深理解
- split逗号分割中文出现乱码java_Java中URL传中文时乱码的问题解决方案
- html图片拼接出现留白,关于img标签周围留白的问题
- python 添加图例_Python | 在图例标签中添加Sigma
- linux网站宝塔无法访问ipv6,centos7宝塔面板服务器开启纯IPV6访问
- html目录清华,清华大学HTML、《网页设计与制作》讲义.ppt
- 威联通_AMD YES!威联通高性价比9盘位TS-963N 5GbE NAS体验
- Perhaps JAVA_HOME does not point to the JDK的解决方法
- 测试使用bytes.buffer()的单线程与多线程的写效率
- 【经验教程】google谷歌Gmail邮箱帐号被停用怎么恢复Gmail邮箱google谷歌账号?
- Matlab 中 residuez函数的使用
- linux服务器如何查看mac地址,linux如何查看mac地址_查看mac地址 linux_linux查看mac地址...
- webpack serve 配置问题TypeError: Class constructor ServeCommand cannot be invoked without ‘new‘
- 通过命令行使用bandizip压缩与解压
- ubuntu20.04如何录制屏幕
- 横扫阿里、滴滴、美团后,3年经验的Java后端妹子整理出这份厚厚的面经!
- 鲁宾逊无穷小微积分教材在中国高校分布地图
热门文章
- KWin in KDE4
- 九章算法-面试题总结(算法、强化算法、系统设计高清视频观看)
- 2021年保护JavaScript的7个步骤
- 扫地机器人不取出水箱可以吗_扫地机器人值不值得买?优缺点全面分析。
- 博客园背景特效(粒子线条,彩带,滴墨水)
- bzoj4184-shallot
- 电脑计算机无法启动有还原和取消,win7系统提示配置windwos update失败还原更改导致电脑无法开机的三种解决方法...
- 安装双系统遇到的问题:0xc000000e和0xc000000f
- 面试官:你说一说MySQL查询慢应该怎么办?
- 电脑网速变慢的几个方面