零基础入门学习JAVA课堂笔记 ——DAY07
面向对象(下)
1. Instanceof
我们可以通过Instanceof关键词可以判断当前对象是否为某某类得父类
Object instanceof Student //true
注意:只有是两个类存在父子关系的时候,instanceof才会返回true
package pro;
import pro.Student;
public class App {
public static void main(String[] args){
Object obj = new Student();
System.out.println(obj instanceof Student); //true
System.out.println(obj instanceof Person); //true
System.out.println(obj instanceof String); //false
System.out.println(obj instanceof Teacher); //false
}
}
如果比较两者之间没有一点联系的话在编译的时候就会报错
package pro;
import pro.Student;
public class App {
public static void main(String[] args){
Object obj = new Student();
Student stu = new Student();
System.out.println(obj instanceof Student); //true
System.out.println(obj instanceof Person); //true
System.out.println(obj instanceof String); //false
System.out.println(obj instanceof Teacher); //false
System.out.println(stu instanceof String); //error
}
}
语法规则:X instance Y
- 判断是否才父子关系返回true
- X指向的子类型和Y有关系的也会返回true
2.static
static关键词修饰方法的时候我们称为静态方法
static关键词修饰属性的时候我们称为静态属性
区别:
- 被static修饰的属性或者方法可以直接在main方法内部调用,也可以通过创建创建类的方法调用
- 不被static修饰的属性或者方法只能通过创建类的方法调用
package pro;
import pro.Student;
public class App {
static int num1 = 10;
int num2 = 103;
static void run(){
}
void running(){
}
public static void main(String[] args){
App ap = new App();
System.out.println(ap.num2); //true
System.out.println(ap.num1); //true
num1 = 20; //true
num2 = 20; //error
ap.running(); //true
ap.run(); //true
run(); //true
running()//error
}
}
3.匿名代码块
在Java中可以使用两个花括号来定义一个匿名代码块,如果使用static修饰匿名代码块,那么被修饰的匿名代码块就会在程序开始就创建且只执行一次
package pro;
import pro.Student;
public class App {
{
System.out.println("匿名代码块"); // 2
}
static{
System.out.println("static"); // 1
}
App(){
System.out.println("App"); // 3
}
public static void main(String[] args){
App ap1 = new App();
System.out.println("=======");
App ap2 = new App();
}
}
通过上面的代码我们可以得出,程序运行时,执行的顺序是
静态代码块 =>匿名代码块=>构造器
在第二次创建App对象ap2时,静态代码将不再执行
匿名代码块===>构造器
拓展:静态导入包
可以通过static来修饰类的方法,方便直接调用
package pro;
import static java.lang.Math.random;
public class App {
public static void main(String[] args){
System.out.println(random());
}
}
拓展:final修饰类
如果一个类被final修饰,那么这个类就不能被继承了

3.抽象类
一个比类还抽象的抽象类
在Java中可以通过abstract关键词来修饰类,则类即为抽象类
如果absctrat关键词来修饰方法的话,那么方法为就是抽象方法
package pro;
public abstract class Worker {
public abstract void doSomething();
}
抽象方法:只有定义没有实现,具体的实现由子类来实现
注意:抽象化方法只能在抽象类中定义,子类方法继承抽象类的父类,必须实例化里面的抽象方法,除非子类也是抽象类方法
package pro;
public class Teacher extends Worker{
public void doSomething(){
}
}
不能new 一个抽象类,只能靠子类去实现它

但可以在new的过程中去实现抽象方法

抽象类是单继承
4.接口
普通类:只有具体实现
抽象类:具体事项和规范(抽象方法)都有
接口:只有规范!方法自己写
接口的本质的就是契约!!!
在创建一个Java文件中,可以通过interface去替换闯创建Java文件的class关键词,达到定义接口的效果
package pro;
public interface UserC {
}
接口里面的方法,都是public的抽象类方法
package pro;
public interface UserC {
void add(String temp);
void delete(int id);
void change(int id,String temp);
void search(String temp);
void search(int id);
}
对此可以创建一个类通过implements去继承我们的接口(必须去实现接口中函数的方法)
package jk;
public class UserCImpl implements UserC{
public void add(String name){
}
public void change(int id,String temp){
}
public void delete(int id){
}
public void search(int id){
}
public void search(String name){
}
}
接口不同于抽象类,接口可以实现多继承,可以创建以下接口
package jk;
public interface Time {
void timer();
}
通过前面的例子,通过都好分割实现多接口继承
package jk;
public class UserCImpl implements UserC,Time{
public void add(String name){
}
public void change(int id,String temp){
}
public void delete(int id){
}
public void search(int id){
}
public void search(String name){
}
public void timer(){
}
}
总结
约束
定义一些方法,让不同的人实现
在接口定义的属性,都是常量(一般不这么用)
接口不能被实例化 接口中没有构造方法
接口可以实现多个接口
- 必须要重写接口的方法
5.Java内部类
在一个类的内部再写一个类就叫内部类
内部类
在Java中我们可以在一个类的内部在创建一个类,可以通过外部类方法去new一个外部类中的内部类
package outerClass;
import java.sql.SQLOutput;
//这是外部类
public class Outer {
private int id = 10;
public void say(){
System.out.println("这是外部类");
}
//这是内部类
public class In{
public void main(){
System.out.println("这是内部类");
}
public void getId(){
System.out.println(id); //id?
}
}
}
创建一个App的主方法去创建new一个In对象
package outerClass;
public class App {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.In in = outer.new In();
}
}
根据上例代码,我们发现为什么In这个类里面的getId方法这么写也不会报错?
内部类的一个很重要的属性:可以访问外部类私有的方法
静态内部类
在原有的内部类的情况下 通过static修饰,就叫静态外部类。
静态外部类不能访问私有的属性,除非是静态属性
(此处省略一亿八千三百六十五万三千零就是行)
局部内部类
在方法内部定义的类,称之为具备局部内部类
package outerClass;
public class App {
public static void main(String[] args) {
class app{
private int id = 0;
public void setId(int ids){
this.id = ids;
}
}
}
}
零基础入门学习JAVA课堂笔记 ——DAY07的更多相关文章
- 学习参考《零基础入门学习Python》电子书PDF+笔记+课后题及答案
国内编写的关于python入门的书,初学者可以看看. 参考: <零基础入门学习Python>电子书PDF+笔记+课后题及答案 Python3入门必备; 小甲鱼手把手教授Python; 包含 ...
- 学习《零基础入门学习Python》电子书PDF+笔记+课后题及答案
初学python入门建议学习<零基础入门学习Python>.适合新手入门,很简单很易懂.前一半将语法,后一半讲了实际的应用. Python3入门必备,小甲鱼手把手教授Python,包含电子 ...
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- 零基础入门学习Python(1)--我和Python的第一次亲密接触
前言 最近在学习Python编程语言,于是乎就在网上找资源.其中小甲鱼<零基础入门学习Python>试听了几节课,感觉还挺不错,里面的视频都是免费下载,小甲鱼讲话也挺幽默风趣的,所以呢,就 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
- 080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则
080 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 05 单一职责原则 本文知识点:单一职责原则 说明:因为时间紧张,本人写博客过程中只是 ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...
- 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念
055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- Kafka的Rebalance机制可能造成的影响及解决方案
一.kafka的rebalance机制在Kafka中,当有新消费者加入或者订阅的Topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消 ...
- 《深入理解计算机系统》(CSAPP)读书笔记 —— 第五章 优化程序性能
写程序最主要的目标就是使它在所有可能的情况下都正确工作.一个运行得很快但是给出错误结果的程序没有任何用处.程序员必须写出清晰简洁的代码,这样做不仅是为了自己能够看懂代码,也是为了在检査代码和今后需要修 ...
- C语言常用字符串操作函数整理(详细全面)
目录 字符串相关 1.char *gets(char *s); #include<stdio.h> 2.char *fgets(char *s, intsize, FILE *stream ...
- vue中form组件中上传el-upload(单、多附件上传,以及上传回显以及编辑不出现等问题)
https://blog.csdn.net/weixin_46565787/article/details/121934075?spm=1001.2101.3001.6650.2&utm_me ...
- JavaScrip基本语法
2. 上篇内容回顾 1. CSS属性 1. 高和宽 2. 字体相关 3. 文本相关 4. 背景相关 1. background-color: red 2. background-image: url( ...
- git或gitee 提交代码到远程仓库
本文为博主原创,未经允许不得转载: 1. 选中远程仓库,并fork 指定的项目到自己的私仓: fork 之后,打开我的仓库便能看到刚刚fork 的项目. 2. clone 项目代码到自己电脑的本地仓库 ...
- SD Host控制器微架构设计-02
SD_clk 测试模式下,选择hclk,将扫描链中的时钟保持一致 clk_en表示可以通过软硬件关闭时钟 sd_if模块 模块中设置一些寄存器,我们可以对寄存器进行读写或者对于寄存器中的某些域段进行读 ...
- 2023-SWPU NSS秋季招新赛(校外赛道)Misc—我要成为原神高手WP
1.题目信息 我是神里绫华的狗!!! 2.解题方法 有个genshin.h文件夹,打开看看发现里面是一堆文件夹0 1A 1A0等等,而且每个文件夹里面都有文件,0 1A 1A0...看着很眼熟,我们用 ...
- Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase
Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase) 前言 想着能够使用多种数据库进行一些操作. 所以本文 ...
- 一个监控数据的思考-sockets_used
一个监控数据的思考-sockets_used 背景 最近跟踪一个项目问题. Grafana的监控了里面有一个tcp的使用监控 CurrEstab 的数据量是: 700-2000 左右 但是同时有一个非 ...