java基础一:基础概念、面向对象

news2024/11/27 20:34:04

 

目录

 

1.基础概念

 2.IDEA 开发工具

2.1 JDK环境配置

2.2 注释和变量

2.3 标识符

2.4 数据类型

2.5 算术运算符

2.6 赋值运算符

2.7 关系运算符

2.8 逻辑运算符

2.9 三元运算符

2.10 流程控制

3. 面向对象

3.1类和对象

3.2 静态 static

3.3 package 包 

3.4 import 导入

3.5 构造函数

 3.5 继承 extends

 3.6 多态

3.7 方法重载

 3.8 方法重写

3.9 递归

3.10 访问权限

3.11 内部类

3.12 单例模式

3.13 final 关键字

3.14 抽象 abstract

3.15 接口 interface

 3.16 枚举 enum

3.17 匿名类

3.18 bean 规范

3.19 作用域

3.20 总结 java 关键字


1.基础概念

  • JVM:将代码编译成字节码,java虚拟机
  • JDK:开发工具包,是java核心
  • JRK:程序的运行环境
  • JDK>JRE>JVM

 2.IDEA 开发工具

2.1 JDK环境配置

cmd——环境变量——系统变量

1. 新建——JAVA_HOME——jdk安装目录(jre.1.8.0)

2. 编辑——PATH变量——新增——%JAVA_HOME%\bin

 3. 编辑环境变量——C:\Program Files (x86)\Java\jre1.8.0_291\bin 

4. 新建——CLASSPATH变量 

cmd 输入javac 则环境配置成功

2.2 注释和变量

TODO 标识符:注释标识符,可快速调整到代码内容

ctrl + D :复制到当前行

变量定义:改变向量的存储

变量声明、变量赋值、变量使用

注意:在使用变量前要先声明

package chapter01;

public class Java02_variable {
    public static void main(String[] args) {
        // TODO 变量
        // 可以改变向量的存储
        // 1.变量声明
        String name;
        // 2.变量赋值
        name = "lisa";
        // 3.变量使用
        System.out.println(name);
        //声明赋值:
        String age = "18";
    }
}

2.3 标识符

定义:标识数据的符号,主要用去取名,如 String name = "lisa"; 中的name

命名规则

  • 由字母、数字(不能开头)、特殊字符(只用_、$)组成
  • 在{ }内标识符不能重复
  • 标识符区分大小写
  • 已经定义好的标识符叫关键字、保留字;如Public、class
  • 用驼峰命名法,如userName
  • 没有长度限制

2.4 数据类型

基本数据类型-数值型-整数

  • bit,比特,数据运算的最小单位,1位
  • byte,字节,数据的最小单位,1byte=8bite,8位
  • short,16位
  • int,32位
  • long,64位

基本数据类型-数值型-浮点型

  • float:单精度浮点,以F/f结尾,如1.2f
  • double: 双精度浮点,如1.1,默认

基本数据类型-字符型

  • char c ='v'

基本数据类型-布尔型

  • boolean b = true/false

数据类型转换

小的类型可以自动转换大的数据类型

bit > byte > short > int > long > float > double

大的数据类型需要()小括号强制转换数据类型

如double d = 1.2,int a = int (d)

引用数据类型

定义:可以被引用的数据类型

2.5 算术运算符

运算符定义:参与数据运算的符号,java定义,不能自定义

表达式:运算符和变量组合一起

一元运算符:一个变量参与计算,如 a ++

++a ,a 在前面先加1,++a 后计算

a++,a 在a++后面加一,a后计算

二元运算符:二个变量参与计算,如 a + b

算术表达式:是有结果的,如1+5=6,结果是数据类型最大的

如1/2=0,因为1 2 都是int型,结果也是int型,最小使用类型是int

2.6 赋值运算符

= :就是赋值运算符

将右边的变量赋值给左边的变量

如: int age = 18

注意:需要考虑数据类型的关系,小的数据类型赋值给大的数据类型

复合运算符:+=、-=、*=、%=

a+=1相当于a=a+1

使用复合运算符,数据类型不会改变

2.7 关系运算符

定义:比较数据

关系运算符有:== 、!=、>、<、>=、<=等

2.8 逻辑运算符

定义:用于描述多个表达式之间的关系

语法结构:(条件表达式1)逻辑表达式 (条件表达式)

结果:布尔类型,true\false

与运算:&一假为假

或运算,|一真为真

短路与运算:&&,根据第一个条件的结果,是否执行第二个,如 false && false,第二个不用执行

短路或运算:||,根据第一个的结果,是否执行第二个,第一个为真不执行第二个

非运算符:!,相反运算符

2.9 三元运算符

定义:三个变量参与运算的运算符

语法结构:变量 = 条件表达式1 ?条件表达式2:条件表达式3

当1为true,变量等于 2,为false等于3

2.10 流程控制

定义: 计算机在执行代码工程中,对指令代码执行顺序

  • 顺序执行:按照代码出现的先后顺序
  • 分支执行:单分支 if(){}、双分支 if...else..、多分支if..else if..else..、特殊分支switch..case
  • 重复执行(循环):while、do...while、for
  • 跳出循环:break(跳出)
  • 跳出本次循环:continue(跳过)

3. 面向对象

3.1类和对象

定义:分析问题时,以问题涉及到的事或者物为中心的分析方式

类:类就是归纳和整理,如动物是一个类

类名命名规范首字母大写

对象:具体的事物,如猫,类的实例化 , new Cat()

new 是一个关键字,创建一个具体对象,使用一次创建一次

一般new创建的对象会赋值变量,方便重复使用

变量的类型就是对象说的类型,Cat c = new Cat(),Cat是引用数据类型

对象是将内存地址赋值给变量,所以变量是引用了内存中的变量,所以叫引用变量

特殊对象:没有引用的对象,String user = null

类的语法结构:

package chapter01;

public class Java04_object {
    public static void main(String[] args) {
        // TODO 面向对象
        // 创建类
        class Cat {
            // 属性
            int age = 3;
            String name = "喵喵";
            // 方法
            // 方法声明
            void say(){
                System.out.println("miao~");
            }

        }
        // 声明类,对象
        Cat c = new Cat();
        // 执行方法
        c.say();
    }
}

案例

package chapter01;

public class Java05_object {
    public static void main(String[] args) {
        // TODO 面向对象
        Teacher t = new Teacher();
        t.name = "rose";
        t.teach();
        Student s = new Student();
        s.name = "xiaoMing";
        s.study();

    }
}
class Teacher {
    String name;
    void teach() {
        System.out.println(name +"老师在上课");
    }
}

class Student {
    String name;
    void study(){
        System.out.println(name + "学生在听课");
    }
}

 对象属性

定义:类的对象相同属性

语法:属性类型  名称 = 属性值,即声明并初始化变量;如 String color = "pink";

属性在构造对象是会默认初始化,初始化的值取决于属性值

变量的作用域仅仅在当前的大括号内有效

属性不仅在当前类可以用,在对象中也可以使用 

对象方法

声明语法:【方法结果返回数据类型,没有结果写viod】 方法名 () { 逻辑块 }

调用方法:对象.方法名()

package chapter01;

public class Java06_objectAttribute {
    public static void main(String[] args) {
        // TODO 对象实例化
        Animate a = new Animate();
        a.name = "dog";
        // 对象方法调用
        a.say();
    }
}
class Animate {
    String name;
    // 对象属性
    String color = "pink";
    //声明方法,boolean 是返回结果的数据类型,没有结果是void
    boolean say(){
        System.out.println(name+"可以说话,颜色是"+color);
        // 方法返回结果
        return false;
    }
}

对象方法参数

语法: 方法名(参数类型1 名称1, 类型2 名称2)

传递多个参数时,需要注意的是

  • 参数个数需要匹配
  • 参数类型需要匹配
  • 参数顺序需要匹配

可变参数:类型确定,个数不确定

语法:参数类型... 参数名称

可变参数声明在最后

package chapter01;

public class Java07_objectParam {
    public static void main(String[] args) {
        // TODO 方法参数
        Cloths c = new Cloths();
        c.use(3,"pink","old");
    }
}
class Cloths{
    String use(int year,String color,String... type){
        System.out.println("使用了"+year+"年,颜色是"+color+",类型是"+type);
        return "使用了"+year+"年,颜色是"+color;
    }
}

 方法参数传值方式

  • 基本数据类型: 数值,创建一个新的
  • 引用数据类型:引用地址,共用祖先的
  • 栈:变量,方法
  • 堆:对象,成员变量
  • 元空间(类的信息):静态属性

3.2 静态 static

  • 定义:与类相关,与对象无关的称之为静态,如对象鸟类中飞的方法,每个鸟都会飞
  • 与类相关的属性,称静态属性
  • 与类相关的方法,称静态方法
  • 静态的可以直接通过类名访问,不用实例化对象
  • 静态方法和静态属性添加 static 关键字
  • 先有类,再有对象
  • 成员方法可以访问静态属性和静态方法
  • 类加载完后会自动调用静态代码块,完成静态属性的初始化功能

3.3 package 包 

基本语法: package 包名

主要用于管理类

一个类可以没有包,一个包只能在源文件中使用一次,不可多次使用

为了与类区分,类是首字母大写,包全是小写

Java 中 存在不同的包相同的类名,可以用包进行区分

在使用类的情况下,使用类的全名(包名+类型)

3.4 import 导入

主要用于导入类,import 只能在package 后,class 前使用

可多次使用,导入多个类

如需导入package中的多个类,可使用通配符*来简化操作

如果import 导入了不同包相同名称的类,在类前需要加包名进行区分

3.5 构造函数

用于构造对象

如果类中没有构造方法,java会自动添加一个公共的无参构造函数

基本语法:类名(){ }

  • 构造方法也有方法,方法没有void关键字
  • 方法名和类名完全相同
  • 如类中无构造方法,jvm会自动加构造方法,反之也不会
  • 可传递参数,一般用于属性的赋值
package chapter01;

public class Java08_object_constructor {
    // TODO 面向对象-构造函数
    public static void main(String[] args) {
        Test t = new Test();
//        t.getFood("tomato");
        t.UserName ="tomato";
    }
}
class Test{
    String UserName;
    //  构造方法
    Test (String name){
        name = UserName;
        System.out.println("food:"+name);
    }
}

 3.5 继承 extends

  • 一个父类有多个子类,一个子类只有一个父类
  • 子类可以继承父类的成员属性和成员方法
  • 语法:子类 extends 父类
  • 如父类和子类有相同的属性,用super和this区分
  • super 表示父类属性,this 表示子类属性
  • 构造方法执行顺序:父类 —— 子类 ,父类对象是在子类前创建的
  • 默认情况,子类会调用父类的构造方法,完成父类的创建,使用super关键字
  • 如果父类提供构造方法,子类显示调用super方法构建父类对象
package chapter01;

public class Java09_extends {
    public static void main(String[] args) {
        Son s = new Son();
        s.test();
    }
}
class Dad {
    String name = "大明";
    int age;
    void run(){
        System.out.println("I can run");
    }
}
class Son extends Dad {
    String name = "小明";
    void test(){
        System.out.println("super.name"+super.name); //大明
        System.out.println("this.name"+this.name); // 小明
    }

}
package chapter01;

public class Java09_extendsConstructor {
    public static void main(String[] args) {
        Son2 s1 = new Son2();
        Son2 s2 = new Son2();
        Son2 s3 = new Son2();

    }
}
class Dad2 {
    String name ;
    // 构造方法
    Dad2 (String dadname) {
        name = dadname;
        System.out.println("dad have run");
    }
}
class Son2 extends Dad2 {
    Son2() {
        super("candy");
    }
}

 3.6 多态

  • 定义:一个对象在不同场景下表现出来的不同状态和形态
  • 多态语法就是对对象的使用场景进行了约束
  • 一个对象可以使用的功能取决于引用变量的类型
package chapter01;

public class Java10_polymorphism {
    public static void main(String[] args) {
        // TODO 多态
        Person P1 = new Person();
        P1.test();
        Person P2 = new Girl();
        Person P3 = new Boy();
        P1.test();
        P2.test();
        P3.test();
        // P1.testGirl 不能这样写,多态的创建取决于变量类型 Person

        Girl r = new Girl();
        r.testGirl();
    }
}
class Person {
    void test() {
        System.out.println("test..");
    }

}
class Girl extends Person {
    void testGirl() {
        System.out.println("testGirl..");
    }
}
class Boy extends Person {
    void testBoy() {
        System.out.println("testBoy..");
    }
}

3.7 方法重载

  • 同一个类,不能重复声明相同的方法和属性
  • 重载:同类中方法名相同,参数列表(类型,个数,顺序)不一样,作用是使用场景不同
  • 构造方法也存在重载
  • 想要调用其他的构造方法需要用到this关键字
  • 基本数据类型在匹配方法时,可以在数值不变的情况下,扩大数据的精度
  • char 不能与byte做转换,byte 存在负数
package chapter01;

import java.awt.font.TextHitInfo;

public class Java11_chongzai {
    // TODO 重载
    public static void main(String[] args) {
        User u = new User(0001);
        u.login(18);
        u.login("lisa");
        u.login("lisa","175");
    }
}
class User {
    void login(String name){
        System.out.println("name");
    }
    void login(int age) {
        System.out.println("age");
    }
    void login(String name,String height){
        System.out.println("height");
    }
    User(){
        // 与 User() u = new User(99);相同,即this调用自己的构造函数
        this(99);
    }
    User(int id){
        System.out.println("id");
    }
}

 3.8 方法重写

  • 重写:在父类和子类中,子类重写父类,不会覆盖父类原有的方法
  • 方法名,返回值,参数列表(个数、类型、顺序)相同
  • 属性在哪里声明在哪里使用
  • 对象左边(对象的引用数据类型)决定方法属性的使用场景
  • 对象右边(对象)决定方法属性的使用
package chapter01;

public class Java12_rewrite {
    AAA a = new AAA(); //a.count = 11
    BBB b = new BBB(); // b.count = 21
    AAA c = new BBB();//c.cont = 21

}
class Parent{
    void info(String name ,String sex){
        System.out.println("Parent");
    }
}
class Child extends Parent{
    @Override
    void info(String name, String sex) {
        System.out.println("Child");
    }
}
class AAA {
    int a = 10;
    int count(){
        return a++;
    }
}
class BBB extends AAA {
    int a = 20;
    int count(){
        return a++;
    }
}

3.9 递归

 定义:方法调用自身

阶乘:!5 = 5*4*3*2*1

递归方法有跳出的逻辑

package chapter01;

public class Java13_recursive {
    public static void main(String[] args) {
        // TODO 递归
        int result = compute(3);
        System.out.println(result);
    }
    public static int compute(int num){
        if (num <= 1){
            return 1;
        }else {
            return num * compute(num - 1);
        }
    }
}

3.10 访问权限

 public:公共的,公共类只能有一个,且和源文件名相同,main方法是JVM调用,不考虑权限问题

private:同类,私有的,同类中可以使用,

default:同类,同包(路径),当不设定权限时,同一个包内可以使用,包权限(相同包路径)

protected:同类,同包,子类,子类可以访问

3.11 内部类

外部类:就是在源码中直接声明的类,不能用private和protected 修饰

内部类:在类中声明的类

内部类当做外部类的属性使用,需要创建外部类的属性使用

package chapter01;
// TODO 内部类和外部类
// 外部类
public class Java15_outerClass_and_innerClass {
    public static void main(String[] args) {
        A a = new A();
        A.B b = a.new B();

    }
}
class A {
    // 内部类
    class B {
    
    }
}

3.12 单例模式

  • 默认的构造方法: 公共的,无参的
  • 类的创建复杂,类的对象消耗资源
  •  单例模式:当内存中使用一个相同的对象时,应该只创建一个对象
package chapter01;

public class Java16_singleMode {
    public static void main(String[] args) {
        // TODO 单例模式
//        User22 U = new User22();
        User22 instance = User22.getInstance();
    }
}
class User22{
    // 构造方法
    private static User22 user22= null;
    private User22() {

    }
    // 方法 静态方法不能访问成员方法
    public static User22 getInstance() {
        if (user22 == null) {
            user22 = new User22();
        }
        return user22;
    }
}

3.13 final 关键字

  • final 关键字:数据初始化后不被修改,final修饰变量 ,称为常量
  • final 修饰的方法,不能被子类重写
  • final 修饰类,该类没有子类
  • final 不可修饰构造方法
  • final 修饰方法参数列表,参数列表会无法修改
package chapter01;

public class Java17_final {
    public static void main(String[] args) {
        // TODO final关键字
        Student01 s = new Student01("lisi");
        System.out.println(s.name);
    }
}
class Student01 {
    final String name;
    public Student01(String name) {
        this.name = name;
    }
}

3.14 抽象 abstract

  • 抽象类、抽象方法;先有对象(具体)在有类(抽象)
  • 编写代码:类(抽象) => 对象(具体)
  • 抽象方法:只有声明,没有实现的方法,abstract 返回值类型 方法名 (参数)
  • 抽象类,不完整的类,abstract class 类名
  • 一个类含抽象方法,这个类一定是抽象类
  • 一个类是抽象类,这个类不一定有抽象方法
  • 抽象类无法构建对象,但可通过子类构建对象
  • 如果抽象类中含有抽象方法,子类需要重写抽象方法
  • final 和 abstract 不能同时使用
package chapter01;

public class Java18_abstract {
    public static void main(String[] args) {
        // 抽象类、抽象方法 abstract
        catSon c = new catSon();
        c.eat();
    }
}
// 抽象类
abstract class Cat {
    //抽象方法
    public abstract void eat();
    void say(){

    }
}
class catSon extends Cat {
    // 重写抽象方法
    public void eat() {
        System.out.println("eat fish");
    };
}

3.15 接口 interface

  • 接口:简单理解为规则
  • 基本语法:interface 接口名称 { 规则属性,规则行为 }
  • 接口是抽象的,规则的属性必须是固定值,且不能修改
  • 属性和行为必须是公共的
  • 属性是静态的,行为是抽象的
  • 接口和类是两个层面的东西,接口可继承其他接口
  • 类的对象要遵循接口,遵循称为实现,且可实现多个接口
package chapter01;

public class Java19_interface {
    public static void main(String[] args) {
        // TODO 接口 interface
        computer c = new computer();
    }
}
interface USB {

}
interface supply extends USB {
    public void powerSupply();
}
interface receive extends USB {
    public void powerReceive();
}
// 实现类
class computer implements supply {
    public supply usb1;
    public receive usb2;
    // 重写父类接口的方法
    public void powerSupply(){
        System.out.println("电脑提供能源");
        usb1.powerSupply();
        usb2.powerReceive();
    }
}

 3.16 枚举 enum

  • 枚举是一个特殊的类,包含一组特定的对象,这些对象不会发生改变,一般使大写的标识符
  • 枚举会将对象放置在最前面,那么后面的语法用分号隔开
  • 枚举类不能创建对象,它的对象是在内部自行创建的
  • 如果需创建构造函数,着需在序列列表中加分号
package chapter01;

public class Java20_enum {
    public static void main(String[] args) {
        // TODO enum 枚举

    }
}
enum City {
    GUANGDONG("广东",01),BEIJING("北京",02),SHANGHAI("上海",03);
    City(String name,int code) {
        this.name = name;
        this.code = code;
    }
    public String name;
    public int code;
}

3.17 匿名类

 定义:在特殊场合下,使用类的方法或功能采用匿名类

package chapter01;

public class Java21_anonymous {
    public static void main(String[] args) {
        // TODO 匿名类
        Me m = new Me();
        // 只使用类中的方法的类
        // 匿名类
        m.sayHi(new Person21() {
            // 等同于下面的 lisa 类
            @Override
            public String name(){
                return "lisa";
            }
        });
//        m.sayHi(new lisa());
//        m.sayHi(new rose());

    }
}
abstract class Person21 {
    public abstract String name();
}
class lisa extends Person21 {
    public String name(){
        return "lisa";
    }
}
class rose extends Person21 {
    public String name(){
        return "rose";
    }
}
class Me {
    public void sayHi(Person21 person21) {
        System.out.println("Hi"+person21.name());
    }
}

3.18 bean 规范

  •  类作用:编写逻辑;建立数据库
  • bean有无参公共的构造方法
  • 属性私有化,有公共的get()和set()方法
package chapter01;

import java.security.PublicKey;

public class Java22_bean {
    public static void main(String[] args) {
        // TODO bean 规范
        User21 u = new User21();
        u.setId(0001);
        u.setPassword("admin");
    }
    public static boolean login(User21 u) {
        if (u.getId() == 0001){
            return true;
        } else {
            return false;
        }
    }
}
// bean 对象 数据模型
class User21 {
    private int id;
    private String password;
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public String getPassword() {
        return password;
    }
    
    public void setPassword(String password) {
        this.password = password;
    }
}

3.19 作用域

 如果属性和局部变量相同,会有限访问局部变量

package chapter01;

public class Java23_scope {
    public static void main(String[] args) {
        // TODO 作用域
        Fish f = new Fish();
        f.test();
    }
}
class Pig {
    public static String name = "pig";
}
class Fish extends Pig {
    public static String name = "fish";

    public static void test() {
        // name 作用域在 test 方法里,局部变量
        String name = "yu";
        System.out.println(name);
        System.out.println(Pig.name);
    }
}

3.20 总结 java 关键字

访问权限修饰符的关键字

  • public:所有的包、方法、类、属性、成员都可以访问
  • Private:只能在当前类中使用
  • fridently:当前类,同包可以访问
  • default:同包,同类是可以访问的
  • protected:在当前类,同包,子类可以访问

定义类、函数、变量的关键字

  • abstract:不可实例化,用于类和方法,子类可以重写方法,一定有构造器
  • final:修饰变量值不可以变(常量),子类不可重写,类不可被继承
  • abstract 和final 关系:类中不能同时存在这两个
  • static:被所有对象共享,静态成员不可以访问非静态成员,反之则不行
  • synchronized: 线程、同步,不继承

补充:

  • 构造方法:修饰符 类名(){},重载,名字同类名,无返回值,父子之间
  • 重写(Override):方法名、参数列表、返回值相同,访问权限比父类大
  • 访问权限:Public > protected > default > private
  • 重载(Overload):参数列表(类型、个数、顺序)不同,在同类中

定义类和类之间的关键字

  • implements: 实现类、接口,一个类可以实现多个接口
  • extends: 继承、拓展类,子类可继承父类的属性方法,一个类可拓展一个类,重写(非final)

建立实例和引用实例的关系 ,判断实例关键字

  • this:本类,引用当前实例
  • new:创建,创建新的实例
  • super:父类、超类,super(),用于调用父类的方法或者是实例中
  • instanceof:确定对象所属的类,Dog d = new Dog(), d instanceof Dog ,返回布尔值true

异常处理的关键字 

  • try:捕获异常,引发异常语句,一个try 必须有一个 catch 或者是finally 语句
  • catch:处理异常,
  • finally:最后, cat... catch...finally,一定会执行的语句
  • throw:抛出异常对象,在catch 里面使用,用于方法实现(里面)中,只能抛出一种异常
  • throws:用于方法实现(头部)中,可抛出多个异常
public void str2int(String str) throws Exception { //这里将得到的异常向外抛出
    try {
        System.out.println(Integer.parseInt(str));
    } catch(NumberFormatException e) {
        //TODO 这里可以做一些处理,处理完成后将异常报出,让外层可以得到异常信息
        throw new Exception("格式化异常");
    }
}

用于包的关键字

  • package:java包,源文件中第一行代码指定所在的java包
  • import:导入,导入包、类等,每个源文件中需要导入包

其他修饰符关键字 

  • native:本地,修饰本地方法
  • transient:对象序列化,使用场景如密码
  • assert:true进行执行,false抛出AssertionError错误终止/java.lang.AssertionErrorbin并输入
  • strictfp:精确浮点

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

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

相关文章

Spark系列之Spark概述

title: Spark系列 What is Apache Spark™? Apache Spark™ is a multi-language engine for executing data engineering, data science, and machine learning on single-node machines or clusters. 第一章 Spark概述 1.1 Spark的产生背景 1.1.1 MapReduce的发展 1.1.…

【Flink】时间语义和水位线的概念和使用

文章目录一 时间语义与Wartermark1 Flink中的时间语义2 EventTime的引入3 Watermark&#xff08;水位线&#xff09;&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;水位线测试a 代码编写b 计算水位线c 计算结果d 深入分析&#xff08;3&#xff09;水位线时间测试…

【web前端期末大作业】html网上在线书城大学生静态网页 大学生html当当书城仿站 网上书城购物网页作业HTML

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

智慧城市解决方案典型应用

4.2.智慧城市建设目标 4.2.1.高标准的智慧城市基础设施 智慧城市的基础设施主要包括城市信息基础设施和城市空间数据基础设施两个方面。智慧城市建设的首要目标是要建立起完善的、高标准的智慧城市基础设施&#xff0c;并在此基础上建立完备的城市基础信息资源。高标准的城市…

微软文本转语音「免费网页版」

网站地址&#xff1a;Text To Speech - 在线文本转语音 大家好&#xff5e;今天给小伙伴们安利一个AI配音小工具:TTS-文本转语音 【闲话】 疫情三年&#xff0c;很多人都失去工作&#xff0c;有的也是断断续续。很多人负债累累&#xff0c;在全球形势严峻&#xff0c;经济下滑…

【FreeRTOS(三)】任务状态

文章目录任务状态任务挂起 vTaskSuspend取消任务挂起 vTaskResume挂起任务调度器 vTaskSuspendAll取消挂起任务调度器 xTaskResumeAll代码示例&#xff1a;任务挂起、取消任务挂起代码示例&#xff1a;挂起任务调度器、取消挂起任务调度器任务状态 freeRTOS任务的状态有四种&am…

【POJ No. 3321】 子树查询 Apple Tree

【POJ No. 3321】 子树查询 Apple Tree 北大OJ 题目地址 【题意】 在卡卡的房子外面有一棵苹果树&#xff0c;树上有N 个叉&#xff08;编号为1&#xff5e;N &#xff0c;根为1&#xff09;&#xff0c;它们通过分支连接。苹果在叉上生长&#xff0c;两个苹果不会在同一个叉…

1000道最新高频Java面试题,覆盖25个技术栈,从底层原理到架构

最近感慨面试难的人越来越多了&#xff0c;一方面是市场环境&#xff0c;更重要的一方面是企业对Java的人才要求越来越高了。 基本上这样感慨的分为两类人&#xff0c;第一&#xff0c;虽然挂着3、5年经验&#xff0c;但肚子里货少&#xff0c;也没啥拿得出手的项目&#xff0c…

【外卖项目实战开发四】

文章目录菜品管理业务开发文件上传下载文件上传介绍文件下载介绍文件上传代码实现文件下载代码实现新增菜品需求分析数据模型代码开发-准备工作代码开发-梳理交互过程菜品信息分页查询需求分析代码开发-梳理交互过程修改菜品需求分析代码开发-梳理交互过程停售/起售菜品&#x…

阿里P8大牛总结的Java锁机制入门笔记,堪称教科书式天花板

前言 锁机制无处不在&#xff0c;锁机制是实现线程同步的基础&#xff0c;锁机制并不是Java锁独有的&#xff0c;其他各种计算机语言中也有着锁机制相关的实现&#xff0c;数据库中也有锁的相关内容。这篇文章就是从Java入手&#xff0c;深入学习、理解Java中的锁机制&#xf…

【Android App】实战项目之实现你问我答的智能语音机器人(超详细 附源码)

需要全部代码请点赞关注收藏后评论区留言私信~~~ 一、需求描述 想必大家都见过商场里的智能语音机器人&#xff0c;你对它提问时它可以自动回答你的问题&#xff0c;接下来我们也实现这样一个机器人&#xff0c;它依靠语音技术完成问询服务 基本功能如下 1&#xff1a;接收人们…

智能家居—— 树莓派摄像头捕捉人脸并识别

文章目录下载安装mjpg-streamer树莓派安装libcurl库树莓派安装openssl库语音控制开启摄像头线程拍照代码及步骤语音控制摄像头拍照camera.ccontrolDevice.h下载安装mjpg-streamer 参考博文&#xff1a;智能家居 —— 树莓派下载安装mjpg-streamer&#xff08;完成拍照录像监控…

市面上真正的全光谱灯品牌有哪些?全光谱护眼照明灯的作用很明显

众所周知&#xff0c;人眼感知任何事物都离不开光线的照射&#xff0c;但很多人可能不知道&#xff0c;光线不仅可以使我们“看得见”&#xff0c;还可以决定我们是否看得“真实”&#xff0c;这是怎么回事呢&#xff1f;其实这就是光线的色谱丰富度的问题。 人眼感知最舒适的光…

堆、堆排序、堆应用

一、概述 “堆”&#xff08;Heap&#xff09;&#xff0c;原地排序、时间复杂度O(nlogn)的排序算法。 堆是一个完全二叉树&#xff1b;堆中每一个节点的值都必须大于等于&#xff08;或者小于等于&#xff09;其子树中每个节点的值&#xff1b; 二、如何实现一个堆 使用数…

第2-4-7章 docker安装WorkBench-规则引擎Drools-业务规则管理系统-组件化-中台

文章目录8. WorkBench8.1 WorkBench简介8.2 安装方式8.2.1 传统方式安装8.2.2 docker安装drools workbench8.3 使用方式8.3.1 创建空间、项目8.3.2 创建数据对象8.3.3 创建DRL规则文件8.3.4 创建测试场景8.3.5 设置KieBase和KieSession8.3.6 编译、构建、部署8.3.7 在项目中使用…

Intel PAUSE 指令变化如何影响 MySQL 的性能

导读 x86、arm指令都很多&#xff0c;无论是应用程序员还是数据库内核研发大多时候都不需要对这些指令深入理解&#xff0c;但是 Pause 指令和数据库操作太紧密了&#xff0c;本文通过一次非常有趣的性能优化来引入对 Pause 指令的理解&#xff0c;期望可以事半功倍地搞清楚 C…

微服务线上问题排查困难?不知道问题出在哪一环?那是你还不会分布式链路追踪

咱们以前单体应用里面有很多的应用和功能&#xff0c;依赖各个功能之间相互调用&#xff0c;使用公共的代码包等等&#xff0c;排查问题&#xff0c;使用类似于 gdb/dlv 工具或者直接查看代码日志&#xff0c;进行定位和分析 但是现在我们基本上都是微服务架构了&#xff0c;将…

Node.js 入门教程 20 查看 npm 包安装的版本 21 安装 npm 包的旧版本

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程20 查看 npm 包安装的版本21 安装 npm 包的旧版本20 查看 npm 包安装的版本 若要查看所有已安装的 npm 软件包&#xff08…

JetpackCompose Navigation导航快速上手

Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转 这是完整的结构&#xff08;忽略掉红线划过的那个包&#xff09; 编写欲跳转的两个页面 编写 Demo1 页面 子页面使用多个 composable 组件相组合的方法一一装配起来 Demo1m…

【博客543】golang pprof性能调试:寻找cpu瓶颈

golang pprof性能调试&#xff1a;寻找cpu瓶颈 1、引入pprof进行性能调试 在代码中加入&#xff1a; import _ "net/http/pprof"go func() {http.ListenAndServe("0.0.0.0:8899", nil) }()示例&#xff1a;为冒泡排序加入pprof debug package mainimpo…