꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ ა
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
系列专栏:xiaoxie的JAVA系列专栏——CSDN博客●'ᴗ'σσணღ*
我的目标:"团团等我💪( ◡̀_◡́ ҂)"
感谢您的阅读!
( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝+关注(互三必回)!
一.数组
1.一维数组
数组(Array)是有序的元素序列。 [1] 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 [1] 这些有序排列的同类数据元素的集合称为数组。数组是用于储存多个相同类型数据的集合
1.下标
数组的下标是从0开始,使用下标可以访问数组里的元素
2.表示形式
和c/c++:int arry[]不同的是 Java的表示方式如上图。注意中括号中不可以写上任何数字
3.Java中使用导Arays包
和c/c++ 不同的是使用IDEAJava可以使用导Arrays包的方法简化很多关于数组中的一些常规操作现在博主就为大家总结以下几个常用的方法
1.遍历数组
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,9,6,7,9}; System.out.println(Arrays.toString(arry)); } }
输出结果如下
只需要Array.toString()就可以做到遍历数组的作用
2.排序数组
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,10,6,7,9}; Arrays.sort(arry); System.out.println(Arrays.toString(arry)); }
输出结果如下
只需要Array.sort()就可以做到排序数组的作用
3.指定的值填充数组的所有元素
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,10,6,7,9}; Arrays.fill(arry,1); System.out.println(Arrays.toString(arry)); } }
输出结果如下
Arrays.fill()的作用是用指定的值填充数组的所有元素。它接受四个参数:数组,要填充的元素,起始索引和结束索引。起始索引是要填充的起始位置,结束索引是要填充的结束位置(不包括结束位置)。如果不提供起始索引和结束索引,则默认填充整个数组。
如果我们需要填充到指定位置可以如下图
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,5,10,6,7,9}; Arrays.fill(arry,2,5,11);//参数分别为数组名,起始位置,终点位置,填充的元素 System.out.println(Arrays.toString(arry)); } }
输出结果如下
需要注意的一点是:起始位置到终点位置的下标是左闭右开的
4.二分查找法
比如我们经常使用的二分查找法也可以通过Arrays类里的方法快速实现
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry = {1,2,3,4,5,6,7,8,9}; int k = 7; int ret = Arrays.binarySearch(arry,k); System.out.println(ret); } }
输出结果如下
5.复制指定的数组
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry1 = {1,2,3,4,5,6,7,8,9}; int[] arry2 = Arrays.copyOf(arry1,9);//参数为指定的数组名和数组长度 System.out.println("arry1 ="+Arrays.toString(arry1)); System.out.println("arry2 ="+Arrays.toString(arry2)); } }
输出结果如下
当然我们也可以指定输出数组的长度,可以复制不同长度的新数组,注意:如果指定的长度大于要复制的对象的数组长度,多出来的元素将会被赋初始值即“0”
如图:
import java.util.Arrays;//导Arrays包时我们要先导入java.util.Arrays类,以便在代码中使用该类提供的方法和功能 public class Study { public static void main(String[] args) { int[] arry1 = {1,2,3,4,5,6,7,8,9}; int[] arry2 = Arrays.copyOf(arry1,13);//参数为指定的数组名和数组长度 System.out.println("arry1 ="+Arrays.toString(arry1)); System.out.println("arry2 ="+Arrays.toString(arry2)); } }
输出结果如下
6.说明
以上五个就是博主总结的一些常用的使用Arryas类的一些书写代码格式以及一些注意事项
2.二维数组
Java中的二维数组是由多个一维数组组成的数组。它可以被认为是一个表格,其中的每个元素都有两个索引,一个用于指定行号,另一个用于指定列号。他的一些注意事项和一维数组差不多除了
- 数组长度:二维数组的长度是指行数,可以使用
数组名.length
来获取二维数组的行数。要获取每一行的列数,可以使用数组名[行索引].length
。 - 不规则二维数组:Java中的二维数组可以是不规则的,即每一行的列数可以不同。在声明和初始化不规则二维数组时,需要为每一行指定具体的列数。
- 声明和初始化:要声明一个二维数组,需要指定数组的行数和列数
- 别的博主就不过多的赘述了
二.类和对象
1.面向对象的初步认识
1.什么是面向对象
Java是一门纯面向对象的语言(Object Oriented Program,简称OOP),面向对象是一种编程范式,它将程序的组织方式从过程化的思维方式转变为以对象为中心的思维方式。在面向对象编程中,程序被组织成一组相互协作的对象,每个对象都有自己的状态和行为,并且可以通过消息传递来进行交互。面向对象的编程语言提供了类和对象的概念,通过定义类来创建对象,并通过对象之间的交互来实现程序的功能。面向对象的编程具有封装、继承和多态等特性,可以提高代码的可重用性、可维护性和扩展性。
2.面向对象和面向过程
1.面向过程
面向过程是一种编程范式,其核心思想是将程序看作一系列的步骤,每个步骤都是一个函数或者过程。程序的执行流程就是从一个步骤到另一个步骤,每个步骤都是按照一定的顺序执行的。如果你觉得还是比较抽象的话,博主可以为你举个生活中的例子,比如你要制作一杯咖啡可以将这个过程看作是面向过程的编程。
在这个例子中,每个步骤都是一个过程或者函数,它们按照一定的顺序执行,完成了制作一杯咖啡的过程,这便是面向过程
2.面向对象
在上文冲泡的过程中总共就三个对象:人 材料 咖啡机
整个过程就是 人 材料 咖啡机 三个对象之间相互完成的人根本就不需要知道过程是这样的只要把相应的操作把材料放入咖啡机就足够了,就像我们程序员设计好程序,用户根本就不需要知道软件的代码是如何运行的,底层是如何实现
这就是面向过程和面向对象的区别
注意:面向过程和面相对象并不是一门语言,而是解决问题的方法,没有那个好坏之分,都有其专门的应用场景。
2.类
上图为博主最近一周学习的关于类的一部分知识点,现在博主将一个个的总结一下自己学习一周的学习成果
1.类的定义
1.语法
使用关键字class创建类
class Dog { }
2.内容
类里包含属性和方法这里后续会展开详细介绍
3.注意事项
1.类名注意采用大驼峰定义
2.成员前写法统一为public,后面会详细解释
3.此处写的方法不带 static 关键字. 后面会详细解释
2.类的属性
1.成员变量和方法
1.静态和非静态
类的属性就被称为成员变量,而成员变量又分为静态成员变量和非成员变量,而什么是静态成员呢,它们之间又有什么区别呢
1.被关键字static修饰的成员变量就被称为静态成员变量,反之就称为非静态成员变量
2.静态成员变量是随着类的加载而加载,随着类的摧毁而摧毁
class MyClass { public static int staticVar = 10; public static void main(String[] args) { // 输出初始值 System.out.println("初始值:" + staticVar); // 修改静态变量的值 staticVar = 20; // 创建一个新的对象 MyClass obj = new MyClass(); // 输出修改后的值 System.out.println("修改后的值:" + obj.staticVar); // 修改静态变量的值 obj.staticVar = 30; // 创建另一个新的对象 MyClass obj2 = new MyClass(); // 输出第二个对象的静态变量值 System.out.println("第二个对象的值:" + obj2.staticVar); // 输出第一个对象的静态变量值 System.out.println("第一个对象的值:" + obj.staticVar); } }
结果如下
由此可以看出静态成员变量是随着类的加载而加载,随着类的摧毁而摧毁
3.静态成员变量是属于类的,不属于对象,可以通过类名+点号来访问静态成员变量(对象+点号不合理)
4.非静态成员变量是属于对象的可以通过对象+点号来访问静态成员变量
class Dog { public String name;//非静态 public int age;//非静态 public static String color;//静态 } public class Study { public static void main(String[] args) { Dog dog = new Dog(); Dog.color = "黄色"; dog.name = "旺财"; dog.age = 3; System.out.println("姓名:"+dog.name+" 年龄:"+dog.age+" 颜色:"+Dog.color); }
结果如下
2.方法
1.析构方法
构造方法(也称为构造器)是一个特殊的成员方法,名字必须与类名相同,在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。构造方法的作用就是对对象中的成员进行初始化,并不负责给对象开辟空间。注意事项:
1. 名字必须与类名相同
2. 没有返回值类型,设置为void也不行
3. 创建对象时由编译器自动调用,并且在对象的生命周期内只调用一次(相当于人的出生,每个人只能出生一次)
4. 构造方法可以重载(用户根据自己的需求提供不同参数的构造方法)
5.如果用户没有写构造方法,编译器会自己增加一个没有参数的构造方法
6.在IDEA中可以用快捷键快速编写构造函数如下图在界面点击鼠标右键
点击
按住Ctrl选择你要初始化的参数
2.this的运用
1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this只能在"成员方法"中使用
3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象
4. this是“成员方法”第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法对象的引用传递给该成员方法,this负责来接收
知道了构造方法就可以运用来初始化对象了
class Dog { public String name;//非静态 public int age;//非静态 public String color;//静态 public Dog(String name, int age, String color) { this.name = name; this.age = age; this.color = color; } } public class Study { public static void main(String[] args) { Dog dog = new Dog("旺财",2,"黄色"); System.out.println("姓名:"+dog.name+" 年龄:"+dog.age+" 颜色:"+dog.color); }
结果如图
3.静态和非静态
构造方法也被分为静态和非静态它们之间又有什么区别呢
- 调用方式:静态构造方法在类加载时自动调用,而非静态构造方法在创建对象时被调用。
- 调用时机:静态构造方法只会被调用一次,而非静态构造方法每次创建对象时都会被调用。
- 访问权限:静态构造方法必须声明为public或者默认访问权限,而非静态构造方法可以有任意访问权限。
- 对象依赖:静态方法不依赖于对象,而非静态方法依赖于对象。
- 参数传递:静态构造方法不能接收任何参数,而非静态构造方法可以接收参数。
- 返回类型:静态构造方法没有返回类型,而非静态构造方法没有返回类型限制。
- 对象初始化:静态构造方法主要用于对静态成员变量进行初始化,而非静态构造方法主要用于对非静态成员变量进行初始化。
- 在静态方法中不可以使用非静态的成员变量,反之可以因为静态成员变量不依赖对象,因为this不能出现在静态方法中
总的来说,静态方法主要用于对类的静态成员进行操作,而非静态方法主要用于对对象的非静态成员进行操作。静态方法一般用于工具类或者工具方法,而非静态方法一般用于对象的行为和状态的改变。
3.权限
- public:公共访问权限,被public修饰的成员可以在任何地方被访问。
- private:私有访问权限,被private修饰的成员只能在当前类内部被访问,对外部不可见。
- protected:受保护访问权限,被protected修饰的成员可以在当前类内部、同一包内以及子类中被访问。
- 默认访问权限(即不加任何修饰符):默认访问权限限定在当前包内,对于其他包的类不可见。
这些访问权限修饰符可以用于类、类的成员变量、方法和构造方法。它们的使用可以控制对类和类的成员的访问范围,从而实现封装和隐藏的特性。合理使用访问权限修饰符可以提高代码的安全性和可维护性。
一般而言我们将成员变量都设为私有访问权限,在创建公共访问权限的方法去访问和修改成员变量如下图
class Dog { private String name;//非静态 private int age;//非静态 private String color;//静态 public Dog(String name, int age, String color) { this.name = name; this.age = age; this.color = color; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } } public class Study { public static void main(String[] args) { Dog dog = new Dog("旺财", 2, "黄色"); int age = dog.getAge(); String name = dog.getName(); String color = dog.getColor(); System.out.println("修改前:" + " 姓名:" + name + " 年龄:" + age + " 颜色:" + color); dog.setAge(4); dog.setColor("黑色"); dog.setName("小黑"); System.out.println("修改后:" + " 姓名:" + dog.getName() + " 年龄:" + dog.getAge() + " 颜色:" + dog.getColor()); }
结果如下
3.包
在Java中,包(Package)是一种用于组织和管理类和接口的机制。它们提供了一种将相关的类和接口组织在一起的方式,以便更好地管理代码并避免命名冲突。
以下是包的一些概念和注意事项:
- 包的命名规范:包名应使用小写字母,并使用点(.)作为分隔符。例如,
com.example.mypackage
。 - 包的声明:在Java源文件的顶部,使用
package
关键字声明所属的包。例如,package com.example.mypackage;
。 - 包的层次结构:包可以形成层次结构,以更好地组织和管理类和接口。例如,
com.example.mypackage.subpackage
。 - 包的导入:在使用其他包中的类或接口时,可以使用
import
关键字将其导入到当前的源文件中。例如,import com.example.mypackage.MyClass;
。 - 包的访问控制:包可以用于控制类和接口的可见性。默认情况下,同一个包中的类和接口可以相互访问,但其他包中的类和接口需要使用
public
修饰符才能被访问。 - 包的组织和管理:包可以用于将相关的类和接口组织在一起,以便更好地管理代码。它们可以提供更好的代码可读性和可维护性。
- 包的命名冲突:使用包可以避免命名冲突,因为不同的包中可以有相同的类名或接口名,而不会发生冲突。
- 包的导入冲突:当导入多个包时,可能会出现类名或接口名冲突。在这种情况下,可以使用完全限定名(包括包名和类名)来引用特定的类或接口。
总之,包是Java中用于组织和管理类和接口的重要机制。它们可以帮助我们更好地管理代码,并提供了一种避免命名冲突的方式。同时,正确使用和组织包可以提高代码的可读性和可维护性。
4.代码块
在Java中,代码块(Code Block)是一组用花括号 {}
括起来的语句集合。代码块可以包含变量声明、表达式、控制流语句等。它们用于将相关的代码逻辑组织在一起,并控制变量的作用域。
以下是代码块的一些概念、分类和注意事项
- 代码块的分类:
- 方法体代码块:位于方法内部的代码块。它包含了方法的具体实现。
- 构造代码块:位于类中成员变量定义之间的代码块。它在每次创建对象时都会被执行。
- 静态代码块:使用
static
关键字修饰的代码块。它在类加载时执行,且只执行一次。
- 代码块的作用域:
- 局部代码块:位于方法内部或其他代码块内部的代码块。它的作用域仅限于所在的代码块内。
- 类代码块:位于类中成员变量定义之间的代码块。它的作用域是整个类。
- 代码块的执行顺序:
- 静态代码块在类加载时执行,且只执行一次。
- 构造代码块在每次创建对象时执行,优先于构造方法执行。
- 方法体代码块在方法被调用时执行。
- 构造代码块最先被执行
- 代码块的注意事项:
- 变量的作用域:在代码块内部声明的变量只在该代码块内可见。在代码块外部声明的变量可以在代码块内部访问,但需要注意变量的生命周期。
- 局部变量和成员变量:在代码块内部可以访问外部的成员变量,但不能在代码块内部声明与外部成员变量同名的局部变量,否则会造成命名冲突。
- 静态代码块和静态成员:静态代码块可以访问类的静态成员,但不能访问非静态成员。
总之,代码块是一组用花括号括起来的语句集合,用于将相关的代码逻辑组织在一起,并控制变量的作用域。在Java中,有方法体代码块、构造代码块和静态代码块等不同类型的代码块。正确使用代码块可以提高代码的可读性和可维护性,并避免命名冲突。
我们可以通过代码来验证第3点
class Dog { public int age//非静态 public static int num;//静态 { System.out.println("实例化代码块被执行了"); age = 200; } static { System.out.println("静态化代码块被执行了"); num = 100; } } public class Study { public static void main(String[] args) { Dog dog = new Dog(); System.out.println(dog.age); System.out.println(Dog.num)
结果如下:
三.结语
以上就是博主自己总结的一下上周学习Java的内容,希望能够对你有所帮助,不足之处,请多多谅解,感谢阅读!希望能够收获你的三连