02 Java起步

news2024/9/23 1:26:04

目录

第一章:注释

1.1 概述

1.2 Java 中的注释

第二章:关键字

2.1 概述

2.2 Java 中的关键字

第三章:标识符

3.1 概述

3.2 标识符的命名规则(必须遵守)

3.3 标识符的命名规范

第四章:数据类型以及包装类型的常量池技术

4.1Java 中的基本数据类型

4.2浮点型系列

4.3包装类型的常量池技术

Integer 缓存源码:

Character 缓存源码:

Boolean 缓存源码:

4.4自动装箱与拆箱原理

什么是自动拆装箱

第五章:变量

5.1 变量的概念

5.2 变量的作用

5.3 变量的三要素

5.4 变量的作用域

5.5 变量使用的注意事项

5.6 变量的声明、赋值和使用语法

5.6.1 变量的声明语法

5.6.2 变量的赋值语法

5.6.3 变量的使用语法

第六章:两种常见的输出语句

第七章:基本数据类型转换

7.2 自动类型转换(隐式类型转换)

7.3 强制类型转换(显示类型转换)

7.4 特殊的数据类型转换


第一章:注释

1.1 概述

  • 注释就是对代码的解释和说明。
  • 注释的目的是让人们能够更加轻松的了解代码,为代码添加注释,是十分必要的,它不会影响程序的编译和执行。

1.2 Java 中的注释

  • Java 中的注释有 单行注释多行注释文档注释 三种。
  • 单行注释:以 // 开头,以 换行 结束,格式如下:

// 注释内容

  • 多行注释:以 /* 开头,以 */ 结尾,格式如下:

/* 
	注释内容
*/

  • 文档注释:以 /** 开头,以 */ 结尾,格式如下:

/**
	注释内容
*/

  • javadoc 命令可以抽取每个类、方法中的文档注释,生成 API 手册。
  • 示例:

package day02;

/**
 * 这里是一个文档注释,通常包括对类或方法的介绍,还有作者、日期等信息。
 *
 * @author 作者
 * @version 1.0
 * @since 2022-11-15
 */
public class HelloWorld {
    /*
        多行注释:注释内容可以分很多行编写。
        注意:多行注释不能嵌套,嵌套会导致多行注释提前结束。

        main函数是整个程序的入口。
        main函数的声明格式是固定的。
        每一个类中最多只有一个main函数。
     */
    public static void main(String[] args) {
        // 单行注释:在命令行窗口打印一句话
        // 单行注释仅对当前行有效
        System.out.println("Hello World");
    }
}

第二章:关键字

2.1 概述

  • 关键字是指在程序中,Java 已经定义好的单词,具有特殊含义。
  • 关键字的特点:全都是 小写字母

2.2 Java 中的关键字

注意:

  • 关键字一共50个,其中 constgoto 是保留字。
  • truefalsenull 看起来像关键字,但从技术角度,它们是特殊的布尔值和空值。

第三章:标识符

3.1 概述

  • 简单的讲,凡是程序员自己命名的部分都可以称为标识符。换言之,给类、变量、方法、包等命名的字符序列就是标识符。

3.2 标识符的命名规则(必须遵守)

  • 规则是硬性规定,一旦违反,程序就会在编译过程中报错。
  • ① Java 中的标识符只能使用 26 个英文字母大小写,0~9 的数字,下划线 _ 和美元符号 $
  • ② 不能使用 Java 的关键字或保留字和特殊值。
  • ③ 数字不能开头。
  • ④ 不能包含空格。
  • ⑤ 严格区分大小写。

3.3 标识符的命名规范

  • 规范是柔性规范:违反规范,不会导致编译报错,但是如果不遵守基本的规范,可能会被大家鄙视。
  • ① 见名知意。
  • ② 类名、接口名等:每个单词的首字母都大写,形式:XxxYyyZxx
  • ③ 变量、方法名等:从第二个单词开始首字母大写,其余字母小写,形式:xxxYyyZzz
  • ④ 包名等:每一个单词都小写,单词之间使用点 . 分隔,形式:com.github
  • ⑤ 常量名等:每一个单词都大写,单词之间使用下划线 _ 分隔,形式:XXX_YYY_ZZZ

第四章:数据类型以及包装类型的常量池技术

4.1Java 中的基本数据类型

Java 中有 8 种基本数据类型,分别为:

  • 6 种数字类型:
    • 4 种整数型:byte、short、int、long
    • 2 种浮点型:float、double
  • 1 种字符类型:char
  • 1 种布尔型:boolean。

这 8 种基本数据类型的默认值以及所占空间的大小如下:

基本类型

位数

字节

默认值

取值范围

byte

8

1

0

-128 ~ 127

short

16

2

0

-32768 ~ 32767

int

32

4

0

-2147483648 ~ 2147483647

long

64

8

0L

-9223372036854775808 ~ 9223372036854775807

char

16

2

'u0000'

0 ~ 65535

float

32

4

0f

1.4E-45 ~ 3.4028235E38

double

64

8

0d

4.9E-324 ~ 1.7976931348623157E308

boolean

1

false

true、false

对于 boolean,官方文档未明确定义,它依赖于 JVM 厂商的具体实现。逻辑上理解是占用 1 位,但是实际中会考虑计算机高效存储因素。
另外,Java 的每种基本类型所占存储空间的大小不会像其他大多数语言那样随机器硬件架构的变化而变化。这种所占存储空间大小的不变性是 Java 程序比用其他大多数语言编写的程序更具可移植性的原因之一(《Java 编程思想》2.2 节有提到)。

4.2浮点型系列

  • ① float :单精度浮点型
    • 占内存:4 Byte
    • 精度:科学计数法的小数点后6~7位

注意:如果要表示某个常量小数是 float 类型,那么需要在数字后面加 fF ,否则就是 double 类型。

  • ② double :双精度浮点型
    • 占内存:8 Byte
    • 精度:科学计数法的小数点后15~16位

注意:

  1. Java 里使用 long 类型的数据一定要在数值后面加上 L,否则将作为整型解析。
  1. char a = 'h'char :单引号,String a = "hello" :双引号。

这八种基本类型都有对应的包装类分别为:ByteShortIntegerLongFloatDoubleCharacterBoolean
包装类型不赋值就是 Null ,而基本类型有默认值且不是 Null。
另外,这个问题建议还可以先从 JVM 层面来分析。
基本数据类型直接存放在 Java 虚拟机栈中的局部变量表中,而包装类型属于对象类型,对象实例都存在于堆中。相比于对象类型, 基本数据类型占用的空间非常小。

《深入理解 Java 虚拟机》 :局部变量表主要存放了编译期可知的基本数据类型 (boolean、byte、char、short、int、float、long、double)对象引用(reference 类型,它不同于对象本身,可能是一个指向对象起始地址的引用指针,也可能是指向一个代表对象的句柄或其他与此对象相关的位置)。

4.3包装类型的常量池技术

Java 基本类型的包装类的大部分都实现了常量池技术。
Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or False。

Integer 缓存源码:

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
private static class IntegerCache {
    static final int low = -128;
    static final int high;
    static {
        // high value may be configured by property
        int h = 127;
    }
}

Character 缓存源码:

public static Character valueOf(char c) {
    if (c <= 127) { // must cache
      return CharacterCache.cache[(int)c];
    }
    return new Character(c);
}

private static class CharacterCache {
    private CharacterCache(){}
    static final Character cache[] = new Character[127 + 1];
    static {
        for (int i = 0; i < cache.length; i++)
            cache[i] = new Character((char)i);
    }

}

Boolean 缓存源码:

public static Boolean valueOf(boolean b) {
    return (b ? TRUE : FALSE);
}

如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。
两种浮点数类型的包装类 FloatDouble 并没有实现常量池技术。

Integer i1 = 33;
Integer i2 = 33;
System.out.println(i1 == i2);// 输出 true

Float i11 = 333f;
Float i22 = 333f;
System.out.println(i11 == i22);// 输出 false

Double i3 = 1.2;
Double i4 = 1.2;
System.out.println(i3 == i4);// 输出 false

下面来看一下问题。下面的代码的输出结果是 true 还是 false 呢?

Integer i1 = 40;
Integer i2 = new Integer(40);
System.out.println(i1==i2);

Integer i1=40 这一行代码会发生装箱,也就是说这行代码等价于 Integer i1=Integer.valueOf(40) 。因此,i1 直接使用的是常量池中的对象。而Integer i2 = new Integer(40) 会直接创建新的对象。
因此,答案是 false 。

记住:所有整型包装类对象之间值的比较,全部使用 equals 方法比较

4.4自动装箱与拆箱原理

什么是自动拆装箱

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为基本数据类型;

举例:

Integer i = 10;  //装箱
int n = i;   //拆箱

上面这两行代码对应的字节码为:

   L1
    LINENUMBER 8 L1
    ALOAD 0
    BIPUSH 10
    INVOKESTATIC java/lang/Integer.valueOf (I)Ljava/lang/Integer;
    PUTFIELD AutoBoxTest.i : Ljava/lang/Integer;
   L2
    LINENUMBER 9 L2
    ALOAD 0
    ALOAD 0
    GETFIELD AutoBoxTest.i : Ljava/lang/Integer;
    INVOKEVIRTUAL java/lang/Integer.intValue ()I
    PUTFIELD AutoBoxTest.n : I
    RETURN

从字节码中,可以发现装箱其实就是调用了 包装类的valueOf()方法,拆箱其实就是调用了 xxxValue()方法。
因此,

  • Integer i = 10 等价于 Integer i = Integer.valueOf(10)
  • int n = i 等价于 int n = i.intValue();

注意:如果频繁拆装箱的话,也会严重影响系统的性能。应该尽量避免不必要的拆装箱操作。

第五章:变量

5.1 变量的概念

  • 变量:在程序执行的过程中,其值可以发生改变的量。

5.2 变量的作用

  • 变量的作用:用来存储数据,代表内存的一块存储区域,这块内存中的值是可以改变的。

5.3 变量的三要素

  • 数据类型。
  • 变量名。
  • 值。

5.4 变量的作用域

  • 概念:一个变量的有效范围。
  • 变量必须在有效范围内使用。
  • 具体范围:在 Java 语言中,变量的作用域就是它所在的一组 {}
  • 错误示例:

public class VariableDemo{
    
    public void method(){
        
        {
            boolean flag = true;
        }
        System.out.println(flag);// 此处代码有问题
    }
}

5.5 变量使用的注意事项

  • ① 先声明后使用。
  • ② 在使用之前必须初始化(看情况,如果是类属性,系统会根据其数据类型,自动赋予初始化值)。
  • ③ 变量有作用域。
  • ④ 在同一个作用域中不能有同样的变量名,换言之,一个变量在作用域中只能使用一次。

5.6 变量的声明、赋值和使用语法

5.6.1 变量的声明语法

  • 语法:

数据类型 变量名;

  • 示例:

package day02;

/**
 * 变量
 *
 * @author GUO
 * @version 1.0
 * @since 2022-11-15 13:22
 */
public class VariableDemo {
    public static void main(String[] args) {
        // 声明变量
        int age;
        String name;
        double weight;
        char gender;
        boolean isMarry;
    }
}

5.6.2 变量的赋值语法

  • 语法:

变量名 = 值;

  • 示例:

package day02;

/**
 * 变量
 *
 * @author GUO
 * @version 1.0
 * @since 2022-11-15 13:22
 */
public class VariableDemo {
    public static void main(String[] args) {
        // 声明变量
        int age;
        String name;
        double weight;
        char gender;
        boolean isMarry;

        // 赋值
        age = 18;
        name = "许大仙";
        weight = 80.20;
        gender = '男';
        isMarry = false;
    }
}

5.6.3 变量的使用语法

  • 语法:

通过变量名直接引用

  • 示例:

package day02;

/**
 * 变量
 *
 * @author GUO
 * @version 1.0
 * @since 20212-11-15 13:22
 */
public class VariableDemo {
    public static void main(String[] args) {
        // 声明变量
        int age;
        String name;
        double weight;
        char gender;
        boolean isMarry;

        // 赋值
        age = 18;
        name = "许大仙";
        weight = 80.20;
        gender = '男';
        isMarry = false;

        // 变量的使用
        System.out.println(age);
        System.out.println(name);
        System.out.println(weight);
        System.out.println(gender);
        System.out.println(isMarry);
    }
}

第六章:两种常见的输出语句

  • 换行输出语句:输出内容,完毕后进行换行,格式如下:

System.out.println("输出内容");

  • 直接输出语句:输出内容,完毕后不做任何处理,格式如下:

System.out.print("输出内容");

注意事项:

  • ① 换行输出语句,括号内可以什么都不写,只做换行处理。
  • ② 直接输出语句,括号内什么都不写,直接报错。
  • ③ 如果输出语句的括号内有多向内容,那么必须使用 + 连接起来。
  • ④ 如果某些内容想要原样输出,就用 "" 引起来;如果想要输出变量中额内容,则不要将变量名用 "" 引起来。

  • 示例:

package day02;

/**
 * 打印输出语句
 *
 * @author GUO
 * @version 1.0
 * @since 2022-11-15 13:22
 */
public class PrintDemo {
    public static void main(String[] args) {
        // 带有换行效果的输出
        System.out.println("Hello Java");

        // 不带有换行效果的输出
        System.out.print("Hello Java");
        System.out.print("Hello Java");

        // 调用print()函数的时候,不传参数,编译直接报错
        // System.out.print();

        // "age"是一个字面量,也可以说是一个字符串常量
        System.out.println("age");

        int age = 18;
        // age是一个变量,在打印语句中会输出这个变量的值
        System.out.println(age);
        // 输出很多内容的时候,可以使用 + 做字符串连接
        System.out.println("age = " + age);

    }
}

第七章:基本数据类型转换

7.1 概述

●在 Java 程序中,不同的基本数据类型的值经常需要进行互相转换,Java 语言所提供的七种数值类型之间可以相互转换,基本数据类型转换有两种方式:自动类型转换 和 强制类型转换 。

7.2 自动类型转换(隐式类型转换)

●自动类型转换的概念:将取值范围小的类型 自动提升为 取值范围大的类型 。
●基本数据类型的转换规则如下所示:

●自动类型转换的场景:
●① 当将存储范围小的值(常量值、变量值、表示式计算的结果值)赋值给存储范围大的变量时:

int i = 'A'; //char自动升级为int
double d = 10; // int自动升级为double
byte b = 127; // 右边的整数常量值必须在 -128 ~ 127 范围内
long num = 12345678; // 右边的整数常量如果在int范围内,编译和运行都可以通过,这里涉及到数据类型转换
long bigNum = 1234567898103433433L; // 右边的整数常量值如果超过int范围,必须加L,否则编译不通过

●② 当存储范围小的数据类型和存储范围大的数据类型一起混合运算时,会先转换为存储范围大的数据类型,然后再计算:

int i = 10;
byte b = 10;
double d = 10;

double sum = i + b + d;

System.out.println(sum); // 混合运算,升级为double

●③ 当 byte 、short 、char 数据类型进行算术运算的时候,会按照 int 类型处理:

byte b1 = 1;
byte b2 = 2;

// byte b3 = b1 + b2; // 编译报错,b1 + b2 自动升级为int

char c1 = '0';
char c2 = 'A';
System.out.println(c1 + c2); // 113

●④ boolean 类型不参与。

7.3 强制类型转换(显示类型转换)

●强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。
●语法:

注意:强制类型转换可能会损失精度或溢出。

●强制类型转换的场景:
●① 当将存储范围大的值(常量值、变量值、表示式计算的结果值)赋值给存储范围小的变量时:

inti=(int) 3.14;// 强制类型转换,损失精度

doubled= 1.2;
intnum=(int)d;// 损失精度

inti=200;
byteb=(byte)i;
System.out.println("b = "+b);// 溢出 -56

●② boolean 类型不参与。
●③ 当某个值想要提升数据类型的时候,也可以使用强制数据类型:

inti=1;
intj=2;
doubled=(double)i/j;
System.out.println(d);

注意:③ 场景下的强制类型转换是没有风险的。

7.4 特殊的数据类型转换

●① 任意数据类型的数据和 String 类型进行 + 运算的时候,结果一定是 String 类型。

System.out.println(""+1+2);//12

●② String 类型不能强制类型转换,转为其他类型:

Stringstr="123";
intnum=(int)str;// 错误

Stringstr="123";
intnum=Integer.parseInt(str);// 正确

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

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

相关文章

第十四届蓝桥杯集训——JavaC组首篇——环境搭建(win10)

还有9天就截止报名了&#xff0c;我们也算正式开始培训了&#xff0c;今年希望能取得更好的成绩。 今年的蓝桥杯从环境开始——本博客为win10电脑的Java_JDK环境搭建&#xff1a; 学生机环境-Java编程环境&#xff08;第十四届大赛&#xff09; 链接: https://pan.baidu.com…

软件测试行业真的饱和了吗?一线大厂年薪100W的测开岗位还很缺人!

在一线大厂&#xff0c;没有测试这个岗位&#xff0c;只有测开这个岗位。这几年&#xff0c;各互联网大厂技术高速更新迭代&#xff0c;软件测试行业也正处于转型期。传统的功能测试技术逐步淘汰&#xff0c;各种新的测试技术层出不穷&#xff0c;测试人员的薪资也水涨船高。与…

【Docker】基础

文章目录Docker什么是Docker虚拟机和容器Docker 底层原理Docker 优点关键技术Docker 推荐视频课程配套食用&#xff1a;https://www.bilibili.com/video/BV1gr4y1U7CY/?vd_source6d95a05fa9867baaa8ea7c5c52faf4e6 什么是Docker Docker&#xff0c;容器虚拟化技术&#xff…

从浪潮登顶NuScenes榜首解读自动驾驶AI感知技术的发展

导读&#xff1a; “自动驾驶是集感知、决策、交互于一体的技术 环境感知能力作为自动驾驶的第一个环节&#xff0c;是车辆与环境交互的纽带 通过“摄像头、毫米波雷达、超声波雷达、激光雷达”等各类传感器设备&#xff0c;感知环境的手段日趋多元化 同时&#xff0c;在平…

STM32 EXT for GPIO

EXT 描述&#xff1a; EXTI&#xff08;中断/事件控制器&#xff09;包括20个相互独立的边沿检测电路并且能够向处理器内核产生中断 请求或唤醒事件。EXTI有三种触发类型&#xff1a;上升沿触发、下降沿触发和任意沿触发。EXTI中的每 一个边沿检测电路都可以独立配置和屏蔽 E…

java-文件上传-excel存入数据库全代码及流程(附前端代码)

今天给大家带来的是文件上传中比较常用的&#xff0c;上传excel文件&#xff0c;将表格中的数据存入数据库中的一个转化的工具类&#xff1b;大致的流程是&#xff1a;前端点击上传按钮-->选择需要上传的excel表格-->确认上传--> 文件传到后台-->后台处理file文…

[附源码]计算机毕业设计酒店在线预约咨询小程序Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

解决穿山甲Gromore广告在Oppo上报广告病毒Android.Virus.AdCheat.AdCut.A

描述 在上架Oppo的时候审核打回了发现了病毒。提示如下&#xff1a; 自动化检测“安全”项未通过,病毒名称&#xff1a;Android.Virus.AdCheat.AdCut.A,病毒描述&#xff1a;该病毒安装启动后&#xff0c;会展示非官方广告&#xff0c;造成盗源消耗和信息泄露&#xff0c;请卸…

[附源码]Python计算机毕业设计Django行程规划app

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

JUC07-ConcurrentHashMap

一、HashMap中的死链问题 多个线程对hashmap进行扩容时需要将原有数据转移到新的table数组中&#xff0c;这个过程中会重新计算每个元素对应的数组下标从而改变元素的next指针&#xff0c;而另一个线程重复对该链表进行迁移时可能会导致循环链表的产生 原始链表&#xff0c;格…

虹科案例 | 利用激光测距传感器进行锯齿定位

PART ONE 应用描述 在这项应用中&#xff0c;两个激光测距传感器分别安装在一个凸出部分的末端的两侧&#xff0c;用以测量其两侧到锯齿的距离的差。一个微型控制器会按照预设&#xff0c;记录测量数据并提供一个方便快捷的前后位置校准的图像&#xff0c;以便检查。当操作者触…

通过图卷积网络从单词语义学习到句子句法,用于基于方面的情感分析

Learning from word semantics to sentence syntax by graph convolutional networks for aspect-based sentiment analysis 1.Introduction 据我们所知&#xff0c;NLP 的基本动机是训练计算机处理明显属于人类的文本 。也就是说&#xff0c;在当前方法中整合语义信息和句法…

配音app开发,创建专属声音作品

娱乐生活的增加让人们开始向配音方面涉猎&#xff0c;配音逐渐变得大众化。配音对于专业性要求并不高&#xff0c;任何一个对配音有兴趣的用户都可以对自己喜欢的影视剧进行配音&#xff0c;同一个片段不同人在配音时所带的情感不同&#xff0c;最终呈现的听觉效果也不同&#…

VS Code 新增自定义字体

这里以 JetBrainsMono 字体为例 1、下载好字体文件安装 2、安装完成后进入系统字体文件夹 C:\Windows\Fonts 找到刚刚安装好的字体&#xff0c;复制字体文件名&#xff1a;JetBrains Mono NL 3、打开 VS Code 软件&#xff0c;依次点击左下角设置按钮 —> 常用设置 —>…

圣诞节教你如何用Html+JS+CSS绘制3D动画圣诞树

上篇文章给大家提供了一个如何生成静态圣诞树的demo。但是那样还不够高级&#xff0c;如何高级起来&#xff0c;当然是3D立体带动画效果了。 先看效果图&#xff1a; 源码如下&#xff1a; <!DOCTYPE html> <html lang"en" > <head> <meta c…

Git实战(五)| 让工作更高效,搞定Git的分支管理

上一篇讲到Git的分支管理实操&#xff0c;在线合并和本地合并都进行了实操。毕竟&#xff1a;光说不练是假把式。而只练不整理&#xff0c;只能是傻把式了。分支管理到底如何进行管理呢&#xff1f; 先以GitLab上的一张经典的图打头&#xff0c;作为一个总体概览&#xff0c;也…

数据合规圈必读!《数据合规:实务、技术与法律解码》新书发布!算力智库创始人燕丽盈科律所刘磊联袂著作

今年10月&#xff0c;上海网信办某科技公司因处理政务类数据时违规操作&#xff0c;被责令整改&#xff0c;并处以五万元罚款。 今年7月26日&#xff0c;广州市在净网“2022”专项行动中&#xff0c;某技术公司一款APP系统因未履行数据安全保护义务&#xff0c;导致1000万余条…

ubuntu 20.04 设置DNS

ubuntu 20.04 设置DNSubuntu 20.04 设置DNS 快捷步骤下面是命令解释1、决定系统dns的文件是/etc/resolv.conf2、谁能影响/etc/resolv.conf3、/etc/resolv.conf软链接到/run/systemd/resolve/resolv.confubuntu 20.04 设置DNS 快捷步骤 修改 /etc/systemd/resolved.conf 文件&a…

阿里内部出品的这5份手册的含金量有多高,你不会还不知道吧

前言 秋招过去也是有一个月有余了,该说不说顺利的伙计已经拿下offer了,肯定还有部分的伙计还在苦苦挣扎中,这里小编只说一句话,革命还未成功,同志们仍需努力哈哈哈,拿下offer了才能稳稳当当的坐住,坐踏实,那么问题来了,有些伙计在做面试准备的时候总是会抓不到重点,忽略一些重…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java成绩管理与学情分析系统11yzf

好的选题直接决定了毕业设计好坏&#xff0c;甚至决定了能否毕业。今天&#xff0c;我们就来聊一聊毕设该怎么选题。 这里分三个选题标准。 第一&#xff0c;参考所在学校往年选题类型和难度 可以向学长学姐了解往年的选题类型&#xff0c;以及使用的技术&#xff0c;不用向…