Java基础之复习笔记(上)

news2024/11/27 11:42:56

目录

一、Java是什么?

 💖Java概念

 💖Java运行机制

二、Java的语言基础

💖关键字

💖基本数据类型

 💖运算符

三、Java逻辑控制

💖分支结构

💖循环结构

四、Java的方法

💖方法的定义

💖方法的重载

💖方法的递归

 五.Java数组

💖一维数组

💖二维数组

六.类与对象

💖 基础概念

💖构造方法

💖封装

七.代码块

💖普通代码块

💖构造块

💖静态代码块


🎁博主介绍:博客名为tq02,已学C语言、JavaSE,目前学了MySQL和JavaWed

🎥学习专栏:  C语言         JavaSE       MySQL基础

🎄博主链接:tq02的博客_CSDN博客-C语言,Java,MySQL领域博主

一、Java是什么?

 💖Java概念

        Java是一门优秀的程序设计语言,是C语言基础之上更深一步的面向对象编程语言,拥有很多特性:简单性、面向对象性、分布性、稳健性、安全性、可移植性、多线程性等等,而Java不仅是一种编程语言,还是一种程序发布平台,可以分为:JavaEE、JavaSE和JavaME

        Java 是拥有一套完整性系统学习的技术,而Java基础是重中之重,俗话说的好,只有基础打牢,万米高楼平地起。

public class  类名{
    public static void main(String[] args) {
        //程序代码
    }
}

        Java程序的执行入口是main()方法,一般存在于public class类中,并且main()函数必须存在于class当中,而一个Java文件只能有一个public  class,public  class默认为主类,并且Java文件名字必须和主类相同。

 💖Java运行机制

        xxx.java的源文件先通过javac编译程序把源文件进行编译,编译后生成的.class文件是由字节码组成的平台无关、面向JVM的文件。最后启动java虚拟机(JVM)来运行.class文件,此时JVM会将字节码转换成平台能够理解的形式来运行。

 结论:Java程序运行需要经过编译、运行两个阶段。

              编译:Javac命令         运行:Java命令


二、Java的语言基础

        每一种编程语言都拥有关键字、数据类型和运算符,关键字为Java语言本身提供的一种特殊的标识符,数据类型是规定变量的类型。数据类型分为基本数据类型、引用数据类型。

💖关键字

 关键字有50个,以上是主要的关键字


💖基本数据类型

数据类型类型名类型大小及其描述
int整形4个字节
long长整形8个字节
short短整型2个字节
double双精度浮点型8个字节,但内存布局不同
float单精度浮点型4个字节,取值:数+F 内存布局不同
char字符类型2个字节,使用:单引号 + 单个字母
byte字节类型1个字节
boolean布尔类型由JVM实现而不同,占一个字节或1比特位
String字符串类型由字符组成,大小不确定。

在运算符当中,特别关注float和double的内存存储方式,学习链接:http://t.csdn.cn/tTo64


 💖运算符

        任何语言都缺少不了计算、比较、判断等操作,而进行这些操作基于运算符而实现。

运算符也有大小分,也就是优先级的顺序。


三、Java逻辑控制

        逻辑控制语句分为顺序结构、分支结构和循环结构。

  • 顺序结构比较简单,从上到下运行。
  • 分支结构:从上到下运行,但是中途有分路,需要选择路径向下运行
  • 循环结构:代码运行在一定的区域里循环运行,直到false跳出循环

💖分支结构

分支结构有2种语法结构:if语法  和  switch语法

 if语法

 基本语法1:if(布尔表达式){

                                //条件为true时,执行

                      }

基本语法2:if(布尔表达式){

                                //条件为true时,执行

                      }else{

                              //条件为false时,执行

                        }

基本语法3:if(布尔表达式){
                                //条件满足时执行代码
                        }else if(布尔表达式){
                                        //条件满足时执行代码
                        }else{
                                //条件都不满足时执行代码
                        }

switch语法

基本语法:switch(整数|枚举|字符|字符串){
                        case 内容1 : {
                                内容满足时执行语句;
                                [break;]
                                                }
                        case 内容2 : {
                                内容满足时执行语句;
                                [break;]
                                                }
                    ........     ...........  ..........     ..............    ............     ......
                        default:{
                                内容都不满足时执行语句;
                                [break;]
                                    }
                           }

:如果没有break,当符合其中一个内容时,还会再次执行下面的语句

💖循环结构

       循环语句有2种语法:while、for、do  while。而配合循环语句使用的有break、contain

 break:跳出循环。                                                               contain:停止本次循环,重新循环 

while语句

基础语法:while(循环条件){
                    循环语句;
                }

当满足循环条件,则循环,不满足则不循环。可在循环语句当中使用 if语句,指定某个条件满足时使用break或者contain

for语句

基础语法1:for(表达式1;表达式2;表达式3){
                      循环体;
                   }

  • 表达式1: 用于初始化循环变量
  • 表达式2: 循环条件
  • 表达式3: 设置循环变量的更改

当满足循环条件,则循环,不满足则不循环。可在循环语句当中使用 if语句,指定某个条件满足时使用break或者contain


基础语法2:for(数据类型 变量名:数组)

                        {         循环体 ;              }

变量名会遍历数组,并且每次循环,变量名会存储对应的数组值

do  while语句

基础语法:do{
                        循环语句;
                }while(循环条件);

可先执行循环语句,再判断循环条件

四、Java的方法

        Java的方法类似于C语言的函数,而使用方法可以使代码被重复利用,使代码更好理解。

💖方法的定义

基本语法: public static 方法返回值 方法名称([参数类型 形参 ...]){
                                方法体代码;
                                [return 返回值];
                        }

调用语法:数据类型  变量名 = 方法名称.( 实参);


注:

  • 执行是main()方法,而main()方法是静态方法,只能调用静态方法,所以使用static,将该方法设为静态方法。
  • 如果不使用static,那么只能通过对象调用
  • 调用时不需要返回数据,则方法返回类型是void,无返回值。
  • 对于基础类型来说, 形参相当于实参的拷贝. 即 传值调用
  • 对于引用类型来说, 形参相当于实参的拷贝. 即 传址调用

💖方法的重载

        方法的重载:相同的函数名,不同的形参列表和返回值类型

代码示例:

class Test {
    public static void main(String[] args) {
            int ret1 = add(2, 3);
            double ret2 = add(2.5, 3.5);    
            double ret3 = add(2.5, 3.5,4.5);

public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}

💖方法的递归

        一个方法在执行过程中调用自身, 就称为 "递归"
 

//求总和
public static int sum(int num) {
    if (num == 1) {
    return 1;
    }
    return num + sum(num - 1);
}

 五.Java数组

         数组就相当于一个容器,存放相同类型数据的容器,数组的学习主要是一维数组和二维数组。

💖一维数组

创建语法:

  •  动态初始化
    数据类型[ ] 数组名称 = new 数据类型 [ ] { 初始化数据 };
  • 静态初始化
    数据类型[ ] 数组名称 = { 初始化数据 };

数组使用:

  1. 使用 数组名.length 能够获取到数组的长度
  2. 使用 [ ] 按下标取数组元素. 需要注意, 下标从 0 开始计数
  3. 使用 [ ] 操作既能读取数据, 也能修改数据.
  4. 不可以超出有效范围[0, length - 1],不然会出现异常
  5. 只能存储相同类型的数据
  6. 在使用方法时,若传递的是数组,则进行的是传址调用

数组转换字符串

语法格式:String  str1=Arrays.toSting( 数组名);

数组拷贝

语法格式1:

        数据类型[ ] newArr = Arrays.copyOf(数组名, 拷贝长度);   

语法格式2:

        数据类型[ ] newArr = Arrays.copyOfRange(数组名, 下标值front,下标值after);   

                                                                                                  //拷贝范围  下标值front-after


💖二维数组

        概念:存放多个一维数组的容器

语法格式:数据类型 [ ][ ] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };
:代表几个一维数组     :代表一维数组的范围大小

 而至于三维数组、四维数组也是相同的道理,但出现的频率少得可怜。


六.类与对象

💖 基础概念

        类与对象之间的关系:类是设计图、而对象是根据设计图具体化出来的实例

基本语法:

//创建类
class <class_name>{
        field;//成员属性
        method;//成员方法
}
// 实例化对象
<class_name> <对象名> = new <class_name>();

class为定义类的关键字,ClassName为类的名字,{}中为类的主体。
        类中的元素称为:成员属性。类中的函数称为:成员方法。

    注:在类中的方法不需要static,此时此刻,实例化出来的对象,是可以直接调用该方法的    

💖构造方法

   构造方法是一种特殊方法, 使用关键字new实例化新对象时会被自动调用, 用于完成初始化操作
语法规则:

  • 方法名称必须与类名称相同
  • 构造方法没有返回值类型声明
  • 每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)

注:this关键字使用,以此修改当前的成员属性

代码实例:

class Person {
    private String name;//实例成员变量
    private int age;

//默认构造函数 构造对象
    public Person() {
       this.name = "caocao";
       this.age = 10;
}
//带有3个参数的构造函数
public Person(String name,int age,String sex) {
        this.name = name;
        this.age = age;
}

public class Main{
    public static void main(String[] args) {
     Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数的构造函数
     Person p2 = new Person("zhangfei",80,);//调用带有2个参数的构造函数
    }
}

💖封装

        实例化出来的对象权利很大,可以改变成员属性的值,因此为了防止这种情况的出现,我们会使用private封装,从而,类的调用者无法使用。

class Person {
        private String name = "张三";
        private int age = 18;
        public void show() {
    System.out.println("我叫" + name + ", 今年" + age + "岁");
    }
}
class Test {
    public static void main(String[] args) {
        Person person = new Person();
        person.show();
    }
}

注:private 不光能修饰字段, 也能修饰方法,当没有使用priavte修饰时,默认为使用public


 问:那么如果想要修改封装好的成员属性呢?

 答:使用getter和setter方法,以及this关键字

使用this.属性名= " 新值 ";

代码示例:

class Person {
        private String name;//实例成员变量
        private int age;

        public void setName(String name){
        //name = name;//不能这样写
        this.name = name;//this引用,表示调用该方法的对象
    }
        public String getName(){
        return name;
    }

}
public static void main(String[] args) {
    Person person = new Person();
    person.setName("caocao");
    String name = person.getName();
    System.out.println(name);
}

注: 

  • getName 即为 getter 方法, 表示获取这个成员的值.
  • setName 即为 setter 方法, 表示设置这个成员的值.

七.代码块

        概念:使用 { } 定义的一段代码

而根据代码块定义的位置以及关键字,我们可以分为以下三种:

  • 普通代码块
  • 构造块
  • 静态块

💖普通代码块

  直接定义在方法中。在代码块中的变量,作用域只存在代码块中。

代码示例:

public class Main{
    public static void main(String[] args) {
        {     //直接使用{}定义,普通方法块
            int x = 10 ;
            System.out.println("x1 = " +x);
        }
     int x = 100 ;
     System.out.println("x2 = " +x);
}
}
// 执行结果
x1 = 10
x2 = 100

💖构造块

定义在类中的代码块(不加修饰符)。也叫:实例代码块。构造代码块一般用于初始化实例成员变量
代码示例:

class Person{
    private String name;//实例成员变量
    private int age;
    public Person() {
    System.out.println("I am Person init()!");
    }
    //实例代码块
    {
    this.name = "tq02";
    this.age = 22;
    System.out.println("I am instance init()!");
    }
public void show(){
    System.out.println("name: "+name+" age: "+age);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
    p1.show();
}
}

// 运行结果
I am instance init()!
I am Person init()!
name: bit age: 12 sex: man

💖静态代码块

        使用static定义的代码块。一般用于初始化静态成员属性。并且只能访问静态数据成员

代码实例:

class Person{
    private static String name;//实例成员变量
    private int age;
    public Person() {
    System.out.println("I am Person init()!");
    }
    //实例代码块
    static {
    name = "tq02";
    System.out.println("I am instance init()!");
    }
public void show(){
    System.out.println("name: "+name+" age: "+age);
}
}
public class Main {
public static void main(String[] args) {
Person p1 = new Person();
    p1.show();
}
}

注:

  • 静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
  • 静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行
     

                        文章幅度太长,决定分为2部分,以上部分较为简单,容易理解。

                                                                                               ---------------懒惰的tq02

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

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

相关文章

嵌入式基础知识-系统调度

系统调度是操作系统重要功能&#xff0c;在嵌入式开发&#xff0c;也要了解系统调度的基本原理。对于嵌入式Linux开发&#xff0c;一般使用多线程和多进程开发&#xff0c;对于运行RTOS的嵌入式系统&#xff0c;一般使用多任务开发。这些线程、进程、任务的调度&#xff0c;有许…

RS232转Profinet网关怎么设置

大家好&#xff0c;今天我要给大家带来一个很有意思的案例分享。你们猜猜&#xff0c;这回我们要用远创智控的一款神奇的网关YC-RSPN-002做什么呢&#xff1f;没错&#xff0c;我们要把一台扫码枪设备通过这个RS232转PROFINET网关&#xff0c;接入到一台西门子S7-1200PLC的Prof…

在这个高度自动化的时代,为什么自动化测试取代不了手功测试?

在这个高度自动化的时代&#xff0c;为什么自动化测试取代不了手功测试&#xff1f;06:1101自动化测试和手工测试的概念 自动化测试和手工测试都是软件测试的两种基本方法。 自动化测试是基于脚本或工具自动执行测试用例的过程。测试人员可以使用自动化测试工具来编写测试脚本…

【美团面试】软件测试面试题

一、设计登录界面测试用例 功能测试(Function test) 0. 什么都不输入&#xff0c;点击提交按钮&#xff0c;看提示信息。&#xff08;非空检查&#xff09; 1.输入正确的用户名和密码&#xff0c;点击提交按钮&#xff0c;验证是否能正确登录。&#xff08;正常输入&#xff0…

C语言 替换gets函数

目录 替换gets函数gets()用处gets()的危险之处gets()的几种替代方法一、用%c循环输入直到遇到换行结束二、用getchar()循环输入直到遇到换行结束三、scanf的另一种用法四、c中的getline()方法五、解决方案使用fgets代替 替换gets函数 gets()用处 gets从标准输入设备读字符串函…

noSQL的小练习

目录 Redis&#xff1a; 1、 string类型数据的命令操作&#xff1a; 2、 list类型数据的命令操作&#xff1a; 3、 hash类型数据的命令操作&#xff1a; MongoDB&#xff1a; 1. 创建一个数据库 名字grade 2. 数据库中创建一个集合名字 class 3. 集合中插入若…

Redis分片集群有什么作用?怎样读取和存储信息

分片集群主要解决的是&#xff0c;海量数据存储的问题&#xff0c;集群中有多个master&#xff0c;每个master保存不同数据&#xff0c;并且还可以给每个master设置多个slave节点&#xff0c;就可以继续增大集群的高并发能力。同时每个master之间通过ping监测彼此健康状态&…

Selenium中如何抓取网络请求响应及WebSocket信息

目录 获取Chrome性能日志 获取请求及响应信息 我们在使用Selenium测试Web或Electronjs/Cef框架应用时&#xff0c;有时候操作一个元素需要判断是否发送了请求以及请求的参数是否正确 我们可以通过&#xff0c;开启Chrome的性能日志来然后配合driver.get_log("performan…

qgis添加地理地图书签,快速定位到想要的位置

我们打开qgis软件&#xff0c;一般这个功能区域默认在左侧的中间位置&#xff0c;如图&#xff1a; 如果没有的话&#xff0c;我们需要调出来&#xff0c;在软件上方的菜单栏的空白处&#xff0c;右键显示面板调试框&#xff0c;勾选空间书签管理器面板&#xff0c;即可&…

6.3.4 利用Wireshark进行协议分析(四)----ARP协议解析

6.3.4 利用Wireshark进行协议分析&#xff08;四&#xff09;----ARP协议解析 我们知道对于单跳网络内部的数据传输&#xff0c;使用的是网络接口层的技术&#xff0c;比如以太网技术&#xff0c;以太网将报文数据封装在数据帧中进行传送&#xff0c;帧头指明发送方网卡的地址…

初学者必看!PLC转型C#上位机编程学习路线和方法

一.通过线上学习C#&#xff0c;机器视觉&#xff0c;运动控制卡&#xff0c;工程案例&#xff0c;我迈向工控软件开发的转型之路 大家好&#xff0c;我是华山编程培训中心的学员——李工&#xff0c;今天分享下我是如何从电气工程师成功转型上位机开发的经历&#xff0c;希望我…

【10】STM32·HAL库开发-MAP文件解析 | STM32启动过程

目录 1&#xff0c;MAP文件浅析&#xff08;了解&#xff09;1.1MAP文件概念和作用1.2MAP文件组成1.3MAP文件实操 2.STM32启动过程&#xff08;了解&#xff09;2.1STM32启动模式&#xff08;F1/F4/F7/H7&#xff09;&#xff08;也称自举模式&#xff09;2.1.1STM32启动模式&a…

MybatisPLus3-Activerecord

不用注入数据层对象&#xff0c;就可以实现对数据的访问和操作 具体步骤 1.实体类继承Model<实体类名> 2.mapper接口继承BaseMapper<类名> 3.通过实例化实体对象&#xff0c;就可以通过对象调用CRUD的方法 增 删除/修改/查找的方式都和上面一样

《TCP IP网络编程》第六章

《TCP IP网络编程》第六章&#xff1a;基于 UDP 的服务端/客户端 UDP 套接字的特点&#xff1a; 通过寄信来说明 UDP 的工作原理&#xff0c;这是讲解 UDP 时使用的传统示例&#xff0c;它与 UDP 的特点完全相同。寄信前应先在信封上填好寄信人和收信人的地址&#xff0c;之后…

力扣142. 环形链表 II

题目 给定一个链表的头节点head&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回null。 链接&#xff1a;142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 题解 方法一&#xff1a;设置两个指针&#xff0c;一个指针指向链表头结点&#…

重生之我要学C++第一课

时隔三月&#xff0c;继C语言之后&#xff0c;博主学成C归来&#xff0c;欲重开博客&#xff0c;与诸位分享经验&#xff0c;共同学习&#xff0c;今天就开始我们的c第一课——入门篇。 既然要开始学习c&#xff0c;就要了解 什么是c&#xff1a; C 语言是结构化和模块化的语言…

Vue2 ➔ Vue3 都做了哪些改变?

不是吧&#xff0c;兄弟&#xff0c;Vue3 都出来多久了&#xff0c;你还对这个感兴趣&#xff0c;说&#xff01;是不是没好好卷&#xff1f;&#x1f60f; 俺也一样 &#x1f602;&#xff0c;Vue3 出来之后只是简单了解了一下&#xff0c;然后还是转头一直在写 Vue2。当然&a…

如何升级iOS17/iPadOS17公测版?iOS17公测版升级教程

苹果官方发布了iOS 17/iPadOS 17系统首个公测版更新&#xff0c;其版本号及更新内容与iOS 17 beta 3一致&#xff0c;版本号为21A5277j。 对于想升级iOS 17/iPadOS 17 公测版的用户&#xff0c;可以参考本教程进行操作。 升级注意事项&#xff1a; 1. 为防止意外情况&#xf…

AlignPS中的TOIM损失

本文介绍了CVPR2021行人重识别领域中一篇名为AlignPS论文中的TOIM损失函数 论文链接&#xff1a;https://arxiv.org/abs/2109.00211 代码链接&#xff1a;GitHub - daodaofr/AlignPS: Code for CVPR 2021 paper: Anchor-Free Person Search TOIM TOIM Loss OIM Loss Trip…

【STM32零基础入门教程02】STM32环境获取及搭建

(14条消息) 【STM32零基础入门教程01】STM32入门基础知识_小超电子笔记的博客-CSDN博客 工欲善其事必先利其器&#xff0c;在上一章了解完STM32的一些基础知识之后&#xff0c;我们需要对使用的环境进行获取和安装。 一、MDK&#xff08;KEIL&#xff09;的获取 Keil是一种…