第6章 面向对象

news2024/10/6 0:44:09

第6章 面向对象

6.1. Scala包

image

  1. 包的命名

    image

  2. 包的导入

    • Scala中基本的import导入语法和Java完全一致

      import java.util.List
      import java.util._ // Scala中使用下划线代替Java中的星号
      
    • Java中import导入的语法比较单一,Scala对此进行扩展,Scala中的import语法可以在任意位置使用

      object ScalaImport{
          def main(args: Array[String]): Unit = {
              import java.util.ArrayList
              new ArrayList()
          }
      }
      
      
    • Scala中可以导包,而不是导类

      object ScalaImport{
      
          def main(args: Array[String]): Unit = {
              import java.util
              new util.ArrayList()
          }
      
      }
      
    • Scala中可以在同一行中导入多个类,简化代码

      import java.util.{List, ArrayList}
      
    • Scala中可以屏蔽某个包中的类

      import java.util._
      import java.sql.{ Date=>_, Array=>_, _ }
      
    • Scala中可以给类起别名,简化使用

      import java.util.{ArrayList=>AList}
      
      object ScalaImport{
          def main(args: Array[String]): Unit = {
              new AList()
          }
      }
      
    • Scala中可以使用类的绝对路径而不是相对路径

      import _root_.java.util.ArrayList
      
    • 默认情况下,Scala中会导入如下包和对象

      import java.lang._
      import scala._
      Import scala.Predef._
      

6.2 类和对象

  1. 类和对象

    package chapter06
    
    import scala.beans.BeanProperty
    
    object Test03_Class {
      def main(args: Array[String]): Unit = {
        val student = new Student()
    
    //    println(student.name) // 不能访问private属性
        println(student.age)
        println(student.sex)
        student.sex = "male"
    
    
        println(student.sex)
    
      }
    
    }
    
    // 定义一个类
    class Student{
      // 定义属性
    
      // 生成get和set方法
      private var name: String = "Alice"
    
      // 初值为空, 0,必须定义var
      @BeanProperty
      var age: Int = _
    
      // 初值为空, null,必须定义var
      @BeanProperty
      var sex: String = _
    
    }
    
    
  2. 封装

    image

  3. 访问权限

    image

    package chapter06
    
    import scala.beans.BeanProperty
    
    object Test04_Access {
      def main(args: Array[String]): Unit = {
        // 创建对象
        val person = new Person()
    //    person.idCard // error
    //    person.name // error
        println(person.sex)
        println(person.age)
        person.printInfo()
    
        val worker = new Worker()
        //    worker.idCard // error
        //    worker.name // error
        println(worker.sex)
        println(worker.age)
        worker.printInfo()
      }
    
    }
    
    // 定义一个子类
    class Worker extends Person {
      override def printInfo(): Unit = {
        println(s"Worker:")
    //    println($idCard) // error
        name = "bob"
        age = 25
        sex = "male"
        println(s"Worker: $name ${sex} $age")
      }
    }
    
    
    package chapter06
    
    object Test04_ClassForAccess {
    
    }
    
    // 定义一个父类
    class Person {
      // 只能在当前类访问和伴生对象访问
      private var idCard: String = "123456"
      // 只能在当前类和子类访问
      protected var name: String = "Alice"
      var sex: String = "female"
      private[chapter06] var age: Int = 18
    
      def printInfo() = {
        println(s"Person: $idCard $name ${sex} $age")
      }
    }
    
    
  4. 构造器

    和类名一样的方法

    image

    package chapter06
    
    
    object Test05_Constructor {
      def main(args: Array[String]): Unit = {
        val student1 = new Student1()
        student1.Student1()
    
        val student2 = new Student1("scc")
        student2.Student1()
        val student3 = new Student1("zyy", 18)
        student3.Student1()
      }
    
    }
    
    // 定义一个类
    class Student1() {
      var name: String = _
      var age: Int = _
      println(s"1. 主构造方法被调用 $name $age")
    
      // 声明辅助构造方法
      def this(name: String) = {
        this() // 直接调用主构造器
        println(s"2. 辅助构造方法一被调用 $name $age")
        this.name = name
        println(s"name: $name age: $age")
      }
    
      def this(name: String, age: Int) = {
        this(name) // 直接调用辅助构造器一
        println(s"3. 辅助构造方法二被调用 $name $age")
        this.name = name
        this.age = age
        println(s"name: $name age: $age")
      }
    
      // 此处不是构造方法
      def Student1() = {
        println(s"一般方法被调用")
      }
    
    }
    
    1. 主构造方法被调用 null 0
    一般方法被调用
    1. 主构造方法被调用 null 0
    2. 辅助构造方法一被调用 scc 0
    name: scc age: 0
    一般方法被调用
    1. 主构造方法被调用 null 0
    2. 辅助构造方法一被调用 zyy 0
    name: zyy age: 0
    3. 辅助构造方法二被调用 zyy 18
    name: zyy age: 18
    一般方法被调用
    
  5. 构造器参数

    image

    package chapter06
    
    object Test06_ConstructorParams {
      def main(args: Array[String]): Unit = {
    
        val student2 = new Student2
        student2.name = "Alice"
        student2.age = 18
        println(s"student2 name: ${student2.name}, age: ${student2.age}")
    
        val student3 = new Student3("scc", 18)
        println(s"student3 name: ${student3.name}, age: ${student3.age}")
    
        val student4 = new Student4("bob", 29)
        println(s"student4 name: ${student4.name}, age: ${student4.age}")
    
        val student6 = new Student6("bob", 29,"南京理工")
        student6.printInfo
        println(s"student6 name: ${student6.name}, age: ${student6.age}")
      }
    
    }
    
    // 定义一个类
    // 无参构造器
    class Student2() {
      // 单独定义属性
      var name: String = _
      var age: Int = _
    }
    
    // 主构造器参数有var修饰,上面定义等价于,name和age为属性,不需要new和单独赋值,推荐这种写法
    class Student3(var name: String, var age: Int)
    
    
    // 主构造器参数无修饰,此时_name和_age为形参
    // 非常不推荐
    class Student4(_name: String, _age: Int) {
      var name = _name
      var age = _age
    }
    
    
    // val 属性值不能修改
    class Student5(val name: String, val age: Int)
    
    
    // 主构造器有参数
    class Student6(var name: String, var age: Int) {
    
      var school: String = _
    
      def this(name: String, age: Int, school: String) = {
        // 先调用主构造器有参数
        this(name, age)
        // 先调用辅助构造器有参数
        this.school = school
    
      }
    
      def printInfo = {
        println(s"student6 name: ${this.name}, age: ${this.age}, school: ${this.school}")
      }
    
    }
    
  6. 继承

    image

    package chapter06
    
    object Test07_Inherit {
      def main(args: Array[String]): Unit = {
        /**
         * 1. 父类的主构造器调用
         * 2. 父类的辅助构造器调用
         * 3. 子类的主构造器被调用
         */
        val student1 = new Student7("scc", 18)
        /**
         * 1. 父类的主构造器调用
         * 2. 父类的辅助构造器调用
         * 3. 子类的主构造器被调用
         * 4. 子类的辅助构造器被调用
         */
        val student2 = new Student7("scc", 18, "0001")
      }
    
    }
    
    // 定义一个父类
    class Person7() {
      var name: String = _
      var age: Int = _
      println("1. 父类的主构造器调用")
    
      def this(name: String, age: Int) = {
        this()
        println("2. 父类的辅助构造器调用")
        this.name = name
        this.age = age
    
      }
    
      def printInfo = {
        println(s"Person7: $name $age")
      }
    
    }
    
    // 定义一个子类
    // name和age为构造器参数,不是属性
    // extends Person7(name, age) 和 extends Person7不一样,后者不会调用辅助构造器
    class Student7(name: String, age: Int) extends Person7(name, age) {
      var studentNum: String = _
      println("3. 子类的主构造器被调用")
    
      def this(name: String, age: Int, studentNum: String) = {
        // 调用主构造器,先调用父类构造器,再调用子类构造器
        this(name, age)
        println("4. 子类的辅助构造器被调用")
        this.studentNum = studentNum
    
      }
    
      override def printInfo: Unit = {
        println(s"Student7: $name $age $studentNum")
      }
    
    }
    
  7. 多态

    定义:一种接口,可以有多种实现方式

    通过运行时,动态绑定手段,实现多态

    scala属性和方法都是动态绑定的

    image

  8. 抽象类

    image

    image

    image

    package chapter06
    
    object Test09_Abstract {
      def main(args: Array[String]): Unit = {
        val student = new Student9
        student.eat()
        student.sleep()
      }
    }
    
    // 定义抽象类
    abstract class Person9() {
      //非抽象属性
      val name: String = "person"
      // 抽象属性
      var age: Int
    
      // 非抽象方法
      def eat(): Unit = {
        println("person eat")
      }
    
      // 抽象方法
      def sleep(): Unit
    
    }
    
    // 定义具体的实现子类
    class Student9 extends Person9 {
      // 实现抽象属性和方法
      override var age: Int = 18
    
      override def sleep(): Unit = {
        println("student sleep")
      }
    
      //实现非抽象属性和方法,此时name在父类中是val类型
      override val name: String = "student"
    
      override def eat(): Unit = {
        super.eat()
        println("student eat")
      }
    }
    
    
  9. 匿名子类

    package chapter06
    
    // 匿名子类
    object Test10_AnnoymousSubClass {
      def main(args: Array[String]): Unit = {
        val person: Person10 = new Person10 {
          override var name: String = "scc"
    
          override def eat(): Unit = {
            println(s"${name} eat!")
          }
        }
    
        println(person.name)
        person.eat()
      }
    
    }
    
    // 定义抽象类
    abstract class Person10 {
      var name: String
    
      def eat(): Unit
    
    }
    
    
  10. 单例对象/伴生对象

    image

    image

    package chapter06
    
    object Test11_Object {
      def main(args: Array[String]): Unit = {
        // 1. private 构造方法私有化时,下面语句会报错
        //    val student = new Student11("alice", 18)
        //    student.printInfo()
    
        val student1: Student11 = Student11.newStudents("alice", 19)
        student1.printInfo()
    
        val student2: Student11 = Student11.apply("scc", 19)
        student2.printInfo()
    
        // 调用时,可以直接省略apply
        val student3: Student11 = Student11("zyy", 19)
        student3.printInfo()
      }
    
    }
    
    // 定义类,private 构造方法私有化
    class Student11 private(val name: String, val age: Int) {
      def printInfo(): Unit = {
        println(s"student name: ${name}, age: ${age}, school: ${Student11.school}")
      }
    }
    
    // 定义伴生对象
    object Student11 {
      val school: String = "atguigu"
    
    
      // 定义一个类的对象实例的创建方法或者工厂方法
      def newStudents(name: String, age: Int): Student11 = {
        new Student11(name, age)
      }
    
      // 定义一个特殊的方法,此方法有个特殊用法,调用时,可以直接省略apply
      def apply(name: String, age: Int): Student11 = {
        new Student11(name, age)
      }
    }
    
    
  11. 单例设计模式

    饿汉式和懒汉式

    package chapter06
    
    
    object Test12_Singleton {
      def main(args: Array[String]): Unit = {
        val student1 = Student12.getInstance()
        student1.printInfo()
    
        // 真的只有一份吗?不信,再执行一遍
        val student2 = Student12.getInstance()
        student2.printInfo()
    
        println(student1)
        println(student2)
        println(student1.eq(student2))
    
      }
    
    }
    
    
    // 定义类,private 构造方法私有化
    class Student12 private(val name: String, val age: Int) {
      def printInfo(): Unit = {
        println(s"student name: ${name}, age: ${age}, school: ${Student11.school}")
      }
    }
    
    // 定义伴生对象
    // 单例设计模式,饿汉式,低效
    //object Student12 {
    //  private val student: Student12 = new Student12("alice", 18)
    //
    //  def getInstance():Student12={
    //    student
    //  }
    //}
    
    // 定义伴生对象
    // 单例设计模式,懒汉式,高效,不存在时,创建,对象存在时,不创建,
    object Student12 {
      private var student: Student12 = _
    
      def getInstance(): Student12 = {
        if (student == null) {
          // 如果没有对象实例,则创建一个
          student = new Student12("alice", 18)
        }
        student
      }
    
    }
    
  12. 特质(trait)

    image

    image

  13. 特质

    package chapter06
    
    object Test13_Trait {
      def main(args: Array[String]): Unit = {
        val student = new Student13()
        student.sayHello()
        student.dating()
        student.study()
        student.play()
    
        /**
         * hello from student
         * hello from student student
         * student student is dating
         * student student is study
         * young people student is playing
         */
    
      }
    
    }
    
    
    // 定义一个父类
    class Person13 {
      val name: String = "person"
      var age: Int = 18
    
      def sayHello(): Unit = {
        println("hello from " + name)
      }
    }
    
    // 定义一个特质
    trait Young {
      // 声明抽象和非抽象属性
      var age: Int
      val name: String = "young"
    
      // 声明抽象和非抽象方法
      def play(): Unit = {
        println(s"young people ${name} is playing")
      }
    
      def dating(): Unit
    }
    
    class Student13 extends Person13 with Young {
      // 重写冲突的属性
      override val name = "student"
    
      // 实现抽象方法
      override def dating(): Unit = {
        println(s"student ${name} is dating")
      }
    
      // 定义具体方法
      def study(): Unit = println(s"student ${name} is study")
    
      override def sayHello(): Unit = {
        // 就近原则
        super.sayHello()
        println(s"hello from student ${name}")
      }
    
    }
    
  14. 特质的混入

    package chapter06
    
    object Test14_TraitMixin {
      def main(args: Array[String]): Unit = {
        val student = new Student14
    
        /**
         * student student is study
         * student student konwledge is increase 1
         */
        student.study()
        student.increase()
    
        /**
         * young people student is playing
         * student student konwledge is increase 2
         */
    
        student.play()
        student.increase()
    
        /**
         * student student is dating
         * student student konwledge is increase 3
         */
    
        student.dating()
        student.increase()
      }
    }
    
    
    // 再定义一个特质
    trait Knowledge {
      var amount: Int = 0
    
      def increase(): Unit
    }
    
    
    class Student14 extends Person13 with Young with Knowledge {
      // 重写冲突的属性
      override val name = "student"
    
      // 实现抽象方法
      override def dating(): Unit = {
        println(s"student ${name} is dating")
      }
    
      // 定义具体方法
      def study(): Unit = println(s"student ${name} is study")
    
      override def sayHello(): Unit = {
        // 就近原则
        super.sayHello()
        println(s"hello from student ${name}")
      }
    
    
      // 实现特质中的抽象方法
      override def increase(): Unit = {
        amount += 1
        println(s"student ${name} konwledge is increase ${amount}")
      }
    
    }
    
    
  15. 特质的叠加+钻石问题,从右到左叠加

    package chapter06
    
    object Test15_TraitOverlying {
      def main(args: Array[String]): Unit = {
        val student = new Student15
    
        /**
         * konwledge increased
         */
        student.increase()
    
        //钻石问题特征叠加
        /**
         * my ball is a red-foot-ball
         */
        val myFootBall = new MyFootBall
        println(myFootBall.describe())
      }
    
    }
    
    
    // 再定义一个特质
    trait Knowledge15 {
      var amount: Int = 0
    
      def increase(): Unit = {
        println(s"konwledge increased")
      }
    }
    
    // 再定义一个特质
    trait Talent15 {
      def singing(): Unit
    
      def dancing(): Unit
    
      def increase(): Unit = {
        println(s"talent increased")
      }
    }
    
    // 首先调用最后一个特质的方法
    class Student15 extends Person13 with Talent15 with Knowledge15 {
      override def singing(): Unit = {
        println("student is singing")
      }
    
      override def dancing(): Unit = {
        println("student is dancing")
      }
    
      override def increase(): Unit = super.increase()
    }
    
    
    // 定义一个球类
    trait Ball {
      def describe(): String = {
        "ball"
      }
    }
    
    // 定义颜色特征
    trait ColorBall extends Ball {
      val color: String = "red"
    
      override def describe(): String = {
        color + "-" + super.describe()
      }
    }
    
    // 定义种类特征
    trait CategoryBall extends Ball {
      val category: String = "foot"
    
      override def describe(): String = {
        category + "-" + super.describe()
      }
    }
    
    // 定义一个自定义球类
    class MyFootBall extends CategoryBall with ColorBall {
      override def describe(): String = "my ball is a " + super.describe()
    
    }
    
    
  16. 钻石问题的特质叠加

    image

    image

    image

    image​​

  17. 特质和抽象类的区别

    image

  18. 类型转换和转换

    image

    package chapter06
    
    object Test17_Extends {
      def main(args: Array[String]): Unit = {
        //1. 类型的转化和检测
        val student = new Student17("alice", 18)
    
        /**
         * hi from student alice
         * student alice is study
         */
        student.sayHi()
        student.study()
    
        /**
         * hi from student alice
         */
        val person: Person17 = new Student17("alice", 18)
        person.sayHi()
    
        /**
         * 类型判断
         * student is Student17: true
         * student is Person17: true
         * person is Person17: true
         * person is Student17: true
         */
        println("student is Student17: " + student.isInstanceOf[Student17])
        println("student is Person17: " + student.isInstanceOf[Person17])
        println("person is Person17: " + person.isInstanceOf[Person17])
        // 体现多态
        println("person is Student17: " + person.isInstanceOf[Student17])
    
    
        val person2: Person17 = new Person17("alice", 18)
    
    
        /**
         * person is Person17: true
         * person is Student17: false
         */
        println("person is Person17: " + person2.isInstanceOf[Person17])
        println("person is Student17: " + person2.isInstanceOf[Student17])
    
    
        // 类型转换
        if (person.isInstanceOf[Student17]) {
          val newStudent: Student17 = person.asInstanceOf[Student17]
          newStudent.study()
        }
    
        println(classOf[Student17])
    
    
      }
    
    }
    
    class Person17(val name: String, val age: Int) {
      def sayHi(): Unit = {
        println(s"hi from person $name")
      }
    }
    
    class Student17(name: String, age: Int) extends Person17(name = name, age = age) {
      override def sayHi(): Unit = {
        println(s"hi from student $name")
      }
    
      def study(): Unit = {
        println(s"student $name is study")
      }
    }
    
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cadence Allegro PCB设计88问解析(二十八) 之 Allegro中使用Anti Etch分割平面

一个学习信号完整性仿真的layout工程师 最近看到关于Anti Etch的设置,因为本人之前在layout设计是使用过这个命令。后来去到别的公司就不用了,从网上看到说这个命令是用来负片设计的。在这里在说下正片和负片的概念: 正片:是指在a…

Git团队代码规范

Git团队代码规范 1. 分支的定义2. 约束2.1 远程命名2.2 拉取代码2.3 新建Issues2.3 代码规范2.4 MR提交 本文章讲解Git代码管理中团队应该遵守的一些规则,让大家可以愉快的一起开发工作。 本篇文章需要结合Git代码提交规范-实践篇 一起食用哟~ 上一节我们已经讲了如…

Vue----Vue属性绑定

【原文链接】Vue----Vue属性绑定 通过v-bind:xxx 的方式即可实现Vue的属性绑定&#xff0c;比如如下代码&#xff0c;为div标签增加class属性&#xff0c;class的属性值通过msg变量提供 <template><div v-bind:class"msg">测试属性绑定</div> &l…

Java XML

目录 XML简介 XML文档结构 XML组成部分 XML规范 解析XML DOM4J解析实战 1.XML简介 &#xff08;1&#xff09;定义&#xff1a;可扩展标记语言 &#xff08;2&#xff09;特点&#xff1a;跨平台&#xff0c;跨语言/系统 &#xff08;3&#xff09;作用&#xff1a;传…

windows编译运行es源码1

一. 基础搭载环境 win10 jdk 11 \ jdk8 idea 2022 gradle 8.1.1 【建议4.5.1以上】 elasticsearch 7.8.0 源码及安装包 二. 安装gradle 1. 官网下载链接&#xff1a;https://gradle.org/releases/ 2. 解压设置环境变量 (1) GRADLE_HOME 环境变量指向你的 Gradle…

利用jmeter java sample端口转发实现对远程数据库的压力测试

1 需求背景 对数据库进行压力测试时&#xff0c;需要模拟同一时间大量的sql请求发送&#xff0c;借助于jmeter的 sql请求可以实现&#xff0c;但是对RDS来说&#xff0c;需要进行端口映射(跳板机)访问远程数据库,对于单线程手工测试来说&#xff0c;可以直接通过CRT进行端口跳转…

chatgpt赋能python:Python支持一行多写,让你的代码更简洁高效

Python支持一行多写&#xff0c;让你的代码更简洁高效 Python是一种简洁而又灵活的编程语言&#xff0c;它支持一行多写代码&#xff0c;让你的代码更加简洁高效。当你需要在一行代码中写入多个语句时&#xff0c;使用一行多写可以让你的代码更加易读和易维护。这篇文章将介绍…

NUCLEO-F411RE RT-Thread 体验 (4) - GCC环境 LED控制以及CMD命令的添加

NUCLEO-F411RE RT-Thread 体验 (4) - GCC环境 LED控制以及CMD命令的添加 1、LED的控制 前面pin驱动移植后&#xff0c;我们使用rt_pin_mode() rt_pin_write() 控制gpio拉高拉低&#xff0c;从而控制LED灯的闪烁。 整个pin的初始化流程在rt_hw_board_init里。 rt_hw_pin_init…

梅林固件启用自定义DDNS(以cloudflare为例)

参考&#xff1a; In-a-dyn 组件&#xff1a;In-a-dynhttps://github.com/RMerl/asuswrt-merlin.ng/wiki/DDNS-services In-a-dyn配置示例https://github.com/troglobit/inadyn/tree/master/examples原理&#xff1a; 原版梅林固件即Asuswrt-Merlin 自384.7开始&#xff0c;引…

JDK自带的构建线程池的方式之newSingleThreadExecutor

newSingleThreadExecutor从名称上就可以知道这个是一个单例的线程池。在这个线程池中只有一个线程来处理任务。 就可以使用在业务涉及到顺序消费的时候。 newSingleThreadExecutor的代码展示 可以从这个在Executors中的静态方法newSingleThreadExecutor可以发现&#xff0c;该…

chatgpt赋能python:Python数值区间判断

Python数值区间判断 Python是一种高级编程语言&#xff0c;具有强大的数值计算和处理功能。在Python中&#xff0c;经常需要进行数值区间判断&#xff0c;以确定一个特定的数值是否位于指定的范围内。本文将介绍Python中常用的数值区间判断方法&#xff0c;并对其进行详细的讲…

SpringBoot操作Word实现文字替换和盖章(提供Gitee源码)

前言&#xff1a;在日常的工作当中&#xff0c;避免不了会涉及到一些Word文件方面的操作&#xff0c;这篇博客将使用SpringBoot整合开源Apache来操作Word&#xff0c;分享的都是目前实际当中会经常用到的一些功能代码都实际测试过&#xff0c;只分享干货&#xff0c;大家一键复…

AI加持、共建共享...亚马逊云科技重新定义云安全

我们正在进入数字化时代&#xff0c;无数传统企业正在飞速走上云端&#xff0c;无数基础设施服务在云的加持下焕发全新的活力。AI、物联网、大数据等新兴技术逐步落地应用&#xff0c;IaaS、PaaS、云原生技术日渐成熟&#xff0c;“云”正在快速扩容。2021年&#xff0c;我国云…

#10035. 「一本通 2.1 练习 1」Power Strings

Power Strings 题意简述&#xff1a; 求一个字符串由多少个重复的子串连接而成。 例如 ababab 由三个 ab 连接而成&#xff0c;abcd 由 abcd 由一个 abcd 连接而成。 输入格式 本题多组数据。 每一组数据仅有一行&#xff0c;这一行仅有一个字符串 s s s。 输入的结束标…

蓝牙GATT协议介绍

前言 现在低功耗蓝牙&#xff08;BLE&#xff09;连接都是建立在 GATT (Generic Attribute Profile) 协议之上。GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范&#xff0c;这些很短的数据段被称为属性&#xff08;Attribute&#xff09;。 GAP 详细介绍 GAT…

鉴源论坛丨汽车电子ISO 26262:2018标准概述(一)

作者 | 郭建 上海控安可信软件创新研究院特聘专家 版块 | 鉴源论坛 观模 摘要&#xff1a;安全在汽车研发中是关键要素之一&#xff0c;辅助驾驶、车辆的动态控制等功能的研发和集成都需要加强安全系统研发&#xff0c;同时&#xff0c;需要为满足所有预期的安全目标提供证据…

牛客网最新890道大厂 Java 八股文面试题整理

程序员真的是需要将终生学习贯彻到底的职业&#xff0c;一旦停止学习&#xff0c;离被淘汰&#xff0c;也就不远了。 面试跳槽季&#xff0c;这是一个千年不变的话题&#xff0c;每到这个时候&#xff0c;很多人都会临阵磨枪&#xff0c;相信不快也光。于是&#xff0c;大家都…

2023 最新版navicat 下载与安装 步骤及演示 (图示版)

2023 最新版navicat 下载与安装 步骤演示 -图示版 1. 下载Navicat2 .安装navicat 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请…

三子棋小游戏【C语言】

目录 前言 一、基本实现逻辑 二、实现步骤 1.实现进入游戏后的选择菜单——》这个实现起来较为容易&#xff0c;我们约定为&#xff1a;1是玩游戏&#xff0c; 0 是退出游戏&#xff01; 2.要玩完了一局后接着玩&#xff0c;很容易想到要用循环。 3.采用多文件编程---》我…

0011-TIPS-pawnyable : Heap-Overflow

原文 Linux Kernel PWN | 040202 Pawnyable之堆溢出 Holstein v2: Heap Overflowの悪用 题目下载 漏洞代码 #include <linux/module.h> #include <linux/kernel.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/uaccess.h>…