面向对象

类,对象

类是对象的抽象,对象是类的具体,类是概念模型,定义对象的所有特性和所需的操作,对象是真实的模型,是一个具体的实体

1.显式创建对象

//最为常用
Object object = new Object();
//java.lang.reflect.Constuctor.newlnstance(),forName()方法需要传递全限定名
Class<?> forName = Class.forName("java.lang.String");
String str = (String)forName.newInstance();
//要实例化的类必须继承Cloneable接口
Student student2 = (Student)student.clone();
//java.io.ObjectlnputStream.readObject()
ObjectInputStream obj_in_stm = new ObjectInputStream(new FileInputStream("D:\\Person.object"));
Person p =(Person)obj_in_stm.readObject();

2.隐式创建对象

//strValue是一个String对象,由Java虚拟机隐式创建
String strName = "strValue";
//字符串的"+"运算符运算结果为一个新的String 对象
String str1 = "Hello";
String str2 = "Java";
String str3 = str1+str2;
//虚拟机加载一个类时,会创建描述这个类的Class实例,类的加载会将类的.class文件中的二进制数据读入内存中,把它存放在运行时数据区的方法区内,然后在堆区中创建一个java.lang.Class对象,用来封装类在方法区内的数据结构

3.创建对象步骤

给对象分配内存>将对象的实例变量自动初始化为其变量类型的默认值>初始化对象,给实例变量赋予正确的初始值

接口

1.default和static修饰的接口

Java8后,接口中可以添加default或者static修饰的方法

default修饰方法只能在接口中使用,在接口中被default标记的方法为普通方法,可以直接写方法体,实现类会继承接口中的default方法

pubic interface interfaceName{public default void methodName(){System.out.println("");}
}

static修饰后的接口方法和普通static方法一样

封装,继承,多态

封装:在于保护信息,隐藏细节,有助于建立各个系统之间的松耦合关系,提高系统的独立性,提高软件的复用率,降低成本

继承:子类拥有父类的全部特征和行为(能否使用则需要看父类特征和行为的对外权限)

多态:”一个接口,多个方法“,父类中定义的属性和方法被子类继承后,可以具有不同的属性和表现方式,多态性允许一个接口被多个同类使用。实现多态的3个必要条件:继承,重写,向上转型,只有这样该引用才既能调用父类的方法,又能调用子类的方法

this

this可用于任何实例方法内指向当前对象,也可指向对其调用当前方法的对象,或者在需要当前类型对象引用时使用

this.属性名:如果方法里局部变量和成员变量同名,且该方法需要访问该同名成员变量

this.方法名:在类中一个方法内,访问该类中的另一个方法或实例变量(可省略)

this.构造方法:只能在构造方法中使用,且必须是第一条语句

访问限定符

java提供了多个作用域修饰符,其中常用的有public,private,protected,final,abstract,static,transient,volatile,这些修饰符有类修饰符,变量修饰符,方法修饰符。

访问范围 private (默认) protected public
同一个类 可访问 可访问 可访问 可访问
同一包中的其他类 不可访问 可访问 可访问 可访问
不同包中的子类 不可访问 不可访问 可访问 可访问
不同包中的非子类 不可访问 不可访问 不可访问 可访问

static

static修饰的方法或者变量不需要依赖于对象来进行访问,只要这个类被加载,Java虚拟机就可以根据类名找到它们。

final

1.修饰类中的变量

表示该变量一旦被初始化便不可改变,对基本类型变量来说是其值不可变,而对对象引用类型变量来说其引用(即地址)不可改变,但是对象本身是可以改变

2.修饰类中的方法

表示当前方法功能不需要扩展,可被继承,但是不不能被重写

3.修饰类

该类功能已完善,不需要继承扩展

instanceof

//双目运算符,判断一个对象是否为一个类(接口,抽象类,父类)的实例
boolean result = obj instanceof Class;

内部类

  • 实例内部类(非静态内部类):实例化需要通过外部类的实例;可以访问外部类的所有成员

  • 静态内部类:实例化通过外部类;可以直接访问外部类的静态成员,其它成员需要通过外部类的实例进行访问

  • 局部内部类:一个方法中定义的内部类;同局部变量,不能使用访问限定符和static修饰符;只能访问当前方法中final类型的参数与变量

  • 匿名内部类:没有类名的内部类

    new <Object>() {// 类的主体
    };
    

Lambda 表达式

匿名函数,基于数学中的λ演算得名,也可称为闭包(Closure)。如果一个接口中,有且只有一个抽象的方法(Object类中的方法不包括在内),那这个接口就可以被看做函数式接口

package com.henrik.lambda;//计算接口
public interface CalculableLambda {int interfaceCalculabte(int a,int b);
}class CalculableLambdaTest {public static void main(String[] args) {CalculableLambdaTest test = new CalculableLambdaTest();CalculableLambda add = test.calculabte('+');CalculableLambda subtract = test.calculabte('-');CalculableLambda multiply = test.calculabte('*');CalculableLambda divide = test.calculabte('/');CalculableLambda remainde = test.calculabte('%');int addNubmer = add.interfaceCalculabte(1, 2);int subNubmer = subtract.interfaceCalculabte(4, 3);int multNubmer = multiply.interfaceCalculabte(2, 3);int divNubmer = divide.interfaceCalculabte(6, 3);int remNubmer = remainde.interfaceCalculabte(7, 3);System.out.println(addNubmer+"/"+subNubmer+"/"+multNubmer+"/"+divNubmer+"/"+remNubmer);}private CalculableLambda calculabte(char opr) {CalculableLambda result = null;switch (opr) {case '+':result =(int a, int b) -> {return a+b;};break;case '-':result =(int a, int b) -> {return a-b;};break;case '*':result =(int a, int b) -> {return a*b;};break;case '/':result =(int a, int b) -> {return a/b;};break;case '%':result =(int a, int b) -> {return a%b;};break;default:break;}return result;}
}

Java基础_面向对象,Lambda 表达式相关推荐

  1. Java基础教程:Lambda表达式

    Java基础教程:Lambda表达式 引入Lambda Java 是一流的面向对象语言,除了部分简单数据类型,Java 中的一切都是对象,即使数组也是一种对象,每个类创建的实例也是对象.在 Java ...

  2. Java基础_面向对象之接口

    一.接口的概念: 接口是功能的集合,其是一个比抽象类还抽象的类,也可以把它看作是一种数据类型. 接口只是描述其具备的方法,但是并未具体实现,具体的实现是由接口的实现类去完成. 二.接口的定义: 接口的 ...

  3. java基础_面向对象(一)

    面向对象[*****] (1).面向过程编程思想 所谓的面向过程,就是注重编写过程,也就是说这一种编程思想中,我们需要先弄清楚我们要去实现一个什么效果,传递 什么参数,然后我们实现的这一个效果(也就是 ...

  4. Java 函数式编程和 lambda 表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

  5. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  6. Java 8中使用Lambda表达式的策略模式

    策略模式是" 设计模式:可重用对象的元素"书中的模式之一 . 本书所述的策略模式的意图是: 定义一系列算法,封装每个算法,并使它们可互换. 策略使算法独立于使用该算法的客户端而变化 ...

  7. 精通lambda表达式:java多核编程_Java8 Lambda表达式和流操作如何让你的代码变慢5倍...

    有许许多多关于 Java 8 中流效率的讨论,但根据 Alex Zhitnitsky 的测试结果显示:坚持使用传统的 Java 编程风格--iterator 和 for-each 循环--比 Java ...

  8. Java 8 新特性 lambda表达式

    / Created by Manager on 2021/4/1. Java 8 新特性 lambda表达式 StreamAPI 新日期 新注解 */ 视频连接 1https://www.bilibi ...

  9. Java基础之面向对象的概念 继承---组合----枚举类

    Java基础之面向对象的概念 继承---组合----枚举类 本章作为面向对象概念的最后一篇,但是作为一名java程序员在面向对象的这条路上还很长. 一.继承与组合简介 继承是实现类重用的重要手段,但是 ...

最新文章

  1. Android-----Activity生命周期
  2. VTK:IO之ImageReader2Factory
  3. linux 6.7 nfs安装yum,centos6.7下安装配置NFS
  4. AI+药物研发:人工智能赋能新药研发(人工智能应用案例)
  5. CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请
  6. 昇腾AI处理器软件栈--流程编排器(Matrix)
  7. 【动态规划】01背包问题:购物袋
  8. 小甲鱼python课后题答案_小甲鱼python课后习题总结
  9. 100套★商业源码★等你来下载(Delphi,VB,VC,PB,ASP,JSP)!!!
  10. 深度学习小笔记04-魏秀参《解析深度学习-卷积神经网络原理与视觉实践》
  11. 红外避障小车的代码编写
  12. IDEA插件开发指南
  13. prometheus使用cAdvisor监控容器
  14. android 文件管理器打开方式,android怎么用浏览器打开浏览器文件?
  15. win10网络不出现计算机列表,win10系统电脑不显示无线网络的解决方法
  16. 上计算机课玩游戏检讨400字,学生犯错万能检讨书400字7篇
  17. 学了Python之后,都能干点啥?
  18. 井蛙不可以语于海者,拘于虚也;夏虫不可以语于冰者,笃于时也
  19. MobaxTerm中文乱码问题解决
  20. JSONObject转集合List

热门文章

  1. Android10.0 startService启动过程
  2. vue使用 svg图片以及修改svg图片颜色
  3. JVM 重点知识点总结
  4. 基于pixhawk2.4.6硬件和ChibiOS系统的ardupilot启动流程:从上电到ArduCopter应用层代码
  5. 如何看待IT行业发展前景,就业前景和人才需求趋势
  6. vue 获取当前路由地址——router.currentRoute与$route
  7. STM32项目总结--物联网毕设使用
  8. 计算机可靠度计算公式,可靠性计算公式大全
  9. kafka reassign 限速_简单明了,Kafka与MQ的区别
  10. NLP 中文同义词 反义词 否定词表