首页 > 编程语言 >java基础·小白入门(二)

java基础·小白入门(二)

时间:2024-06-19 20:28:19浏览次数:25  
标签:初始化 java 入门 对象 int 小白 数组 new String

目录

Java数组、字符串、正则表达式

数组

基本知识

Java中,数组元素可以为简单数据类型,也可以为对象。 数组声明方式,有以下两种:

  • 数据类型 数组名[ ];
  • 数据类型[ ] 数组名;
int tempArray1[] = {1,2,3};
System.out.println(Arrays.toString(tempArray1));
int[] tempArray2 = {6,7,8};
System.out.println(Arrays.toString(tempArray2));

与C/C++不同,Java在数组的定义中并不为数组元素分配内存,因此[ ]中不能指出数组中元素的个数,即数组长度。数组必须经过初始化后,才能使用数组的元素。
数组初始化分为静态初始化和动态初始化。

  • 静态初始化:在定义数组的同时对数组元素进行初始化。
  • 动态初始化:声明数组时先使用关键字new为数组分配空间,需要用到数组时再初始化。用new分配内存的同时,数组的每个元素都会自动赋默认值,整型为0,实数为0.0,布尔型为false,引用型为null
// 静态初始化
int[] intArray={1,2,3,4};//定义了一个含有4个元素的int型数组。

//动态初始化
int[] x;   //声明名为x的int型数组,未分配内存给数组
x = new int[10];   //x中包含有10个元素,并分配空间
// 或
int[] x = new int[10]; //声明数组并动态分配内存

// 同态分配内存的同时初始化
int[] x=new int[] {1,2,3,4,5,6,7,8,9,10};

数组名不是常量,而是相当于一个指针变量。用户可以改变x的值,让它指向另外一个数组对象,或者不指向任何数组对象(如x=null; )。数组和对象在没有引用变量指向它时,就会变成垃圾,不被使用,但占内存,在随后不确定的时间会被垃圾回收器自动释放
Java会自动进行数组下标越界检查,如果下标超出范围,会产生数组下标越界异常。因此,写程序时最好使用数组的length属性获得数组大小。

二维数组

  • 二维数组(可看作是由多个一维数组构成),Java的二维数组与C语言的二维数组不同,C语言的二维数组是矩形,即一定被分配了“行x列”个空间,而Java语言的二维数组不一定是矩形。
  • 二维数组初始化:数据类型[ ][ ]数组名= new 数据类型 [行数][列数];
  • 二维数组申请内存时,必须指定高层维数,即必须指定行数
  • 二维数组赋初值:数据类型[][] 数组名 = {{第1行初值}, …{第n+1行初值}};
  • 声明多维数组并初始化时不能指定其长度,否则出错
// Java二维数组初始化
// 1.分配规则的矩形空间
int[][] x = new int [2][3];

// 2.分配不规则的矩形空间
int[][] x;
x = new int [3][];
x[0]=new int[3];  
x[1]=new int[2];  
// x[2]对应的行不分配空间,即为null

// 数组的length
x.length;    //计算数组x的行数
x[0].length;  //计算数组x的第1行元素的个数
x[2].length;  //计算数组x的第3行元素的个数

// 二维数组赋初值
int[][] a = {{11,22,33,44}, {66,77,88,99}};

字符串

初始化

Java语言中,字符串常量或变量均用String类实现
字符串变量的创建:

  • 格式一:String 变量名;变量名 = new String(“字符串”);
  • 格式二:String 变量名 = new String(“字符串”);
  • 格式三:String 变量名 = “字符串”;

格式二与格式三的区别:格式二不管字符串池中是否已经存在相同内容的字符串,都会创建一个新的String对象;格式三使用字符串字面量,如果字符串池中已经存在该字符串,则会直接引用池中的字符串,否则会在池中创建该字符串。

基本用法

  • 字符串数组:初始化需要经过两步空间分配(与二维数组初始化类似)。
// 字符串数组初始化
String[] stringArray;//声明一个String类型的数组
stringArray = new String[3];  //给数组stringArray分配3个应用空间,初始化每个引用值为null
stringArray[0]=new String(“Who”);
stringArray[1]=new String(“are”);
stringArray[2]=new String(“you?”); 
  • 字符数组:需注意,字符数组不是字符串,但是可以通过调用特定的方法进行转换。字符数组中的每个元素都是字符类型的数据,它的创建方法与一般的数组相似。
char[] str1=new char[3];// 该数组中可以存储3个字符
str1[0] = 'a';
str1[1] = 'b';
str1[2] = 'c';

char[] str2={'a', 'b', 'c ', 'd ', 'e '};// 字符数组初始化
  • 字符串与字符数组。字符串和字符数组之间的转换有以下几种形式:使用toCharArray方法将字符串转换为字符数组。使用String(char[])构造方法或valueOf(char[])方法,将字符数组转换为字符串。
// 字符串转换成字符数组
char[] charArray2="word".toCharArray();
System.out.println(charArray2[1]);

// 字符数组转换成字符串
String str1=new String(new char[]{'w','o','r','d'});
String str2=String.valueOf(new char[]{'w','o','r','l','d'});
System.out.println(str1+str2);

正则表达式

正则表达式常用语法可以参考:正则表达式常用表示
在Java中的应用举例:

import java.util.*;
//...//
String qq1 = "135792468";
String qq2 = "135792468AC";

// 验证QQ号
String regex = "^[1-9][13579]\\d{4,14}$";

boolean flag1 = qq1.matches(regex);
boolean flag2 = qq2.matches(regex);

System.out.println(flag1);
System.out.println(flag2);

相关知识点

Java语言的内存分配

  • 栈内存(静态分配空间):存放基本类型的变量和对象的引用变量。内存随着方法的调用而开辟,随着方法调用结束而自动释放。
  • 堆内存(动态分配空间):存放由new运算符创建的对象和数组。由Java虚拟机的自动垃圾回收器来管理。
  • 静态域:存放在对象中用static定义的静态成员。
  • 常量池:用于存储编译期常量和一些符号引用的区域。
  • 引用变量:为数组或对象起的一个名字。在堆中创建一个数组或对象后,在栈中定义一个引用变量存放该数组或对象在堆内存中的首地址(对象的句柄),以后就可在程序中使用栈的引用变量来访问堆中的数组或对象。

Java的增强for循环

增强for循环也叫for each循环。优点是不用下标就可遍历整个数组,但需提供元素类型、变量的名字(用于存放数组元素)和数组名。

// for each循环举例
int[] arr={1,2,3,4,5};
for (int element : arr)
{
	System.out.print(element+" ");
}

类和对象

基本概念

面向对象技术的基本特征:

  • 封装性。封装就是把对象的属性和行为结合成一个独立的单位,并尽可能对外隐蔽对象的内部细节。只保留有限的接口与外界联系。
  • 继承性。继承是一种联结类与类的层次模型。继承性是指子类对象自动拥有其父类的属性和行为。同时可以增添自身的属性和方法。
  • 多态性。多态性是指“一个接口,多种实现”。一个程序中可以有同名的多个不同方法共存。常用重载和覆盖。
    对象的概念:对象都是由属性(Attribute)和行为(Action)两部分组成。对象是属性和行为的封装体。
  • 属性:用来描述对象静态特征的一个数据项。
  • 行为:用来描述对象动态特征的一个操作。

类的概念:类(Class)是具有相同属性和行为的一组对象集合的再抽象。类为属于它的全部对象提供了统一的抽象描述。
对象是类的实例

定义与创建

类的定义:数据表示存储在每个对象里的值,而方法则表示对象可以提供的功能。数据和方法统称为类的成员

class 类名  // 类说明
{  // 花括号中为类体部分
     //<类的数据>
     //<类的方法>
 }

// 定义People类
class People 
{ 
	// 类变量
    int age;  // 年龄
    String name;  // 内容

	// 类方法
    int aged() 
    {
	    // 方法内容
    } 
}

对象的创建:创建对象必须使用操作符new,其格式可以有两种。

类名 对象名;
对象名=new 类名(参数1,参数2,…);
// 或者
类名 对象名=new 类名(参数1,参数2,…);

new关键字的作用

  • 为对象分配内存空间。
  • 自动调用类的构造方法,以实现对象的初始化。若未定义构造方法,则系统会提供一个缺省的无参构造方法,该方法用默认值初始化成员变量。
  • 为对象返回一个引用,即对象名。

成员变量访问权限符:

  • public:用该public修饰的成员变量称为公共变量,可以被程序中任何类访问。
  • protected:用protected修饰的成员变量可以被本类、本包、以及子类(不管是否在同一包中)访问。
  • private:用private修饰的成员变量只能被本类访问。用private修饰成员变量可以实现数据隐藏机制。
  • default:如果没有修饰符,它的访问权限就是默认的,默认为“本包”。表示它可以被本类及同一包中的其他类访问。

成员变量与局部变量的区别:

  • 成员变量属于类,而局部变量是方法中定义的变量或方法的参数。
  • 成员变量可以被public、private和static等修饰,而局部变量则不能,二者都可以被final修饰。
  • 成员变量是对象的一部分,对象是存储在堆内存的,局部变量存于栈。
  • 成员变量是对象的一部分,它随着对象的创建而存在;局部变量随着方法的调用而产生,随着方法调用的结束而消失。
  • 成员变量若没有被赋初值,则自动初始化默认为0,局部变量不会自动赋初值,必须显式赋值。

成员方法的修饰符:publicprivateprotectedfriendlyfinalstaticabstractsynchronizednative。方法可以是有返回值也可以无返回值(void,主体中不用return语句)。方法调用的格式:对象名.方法名(实参列表)
类修饰符:

  • public:说明该类为公共类,它可以被本类和其他任何类访问。Java源文件中至多有一个类是public类。
  • default:如果类名前不加修饰符,即默认访问权限,默认为“本包”。能被本类和同一个包中的任何其他类访问。
  • abstract:用abstract修饰的类称为抽象类。它是一种没有具体对象的概念类,是它所有公共子类的公共属性集合。
  • final:用该修饰符修饰的类不能有子类,称为最终类。

构造方法:

  • 构造方法的名字必须和类名相同,并且没有返回值。
  • 必须通过new关键字来自动调用,从而创建类的实例。
  • Java的类都要求有构造方法,如果没有定义构造方法,Java编译器会为我们提供一个缺省的构造方法,也就是不带参数的构造方法。
class Example {
    int value;

    // 自定义构造方法
    pbulic Example(int value) {
        this.value = value;
    }
}
Example obj = new Example(10); // 调用自定义构造方法

静态成员:

  • 用static修饰的成员变量称为“静态变量”,也称为类变量。
  • 静态成员可以实现同一个类的不同对象之间的数据和方法共享。
  • 静态成员仅有一个副本,使用同一块内存空间。为类的所有对象共享。
  • 当程序一开始运行,静态变量和静态方法就被分配了内存空间,所以可以在未创建对象时直接通过类名引用它们。
  • 在静态方法中不能直接调用非静态的方法,不能直接引用非静态的成员变量,只能通过对象来引用。反之,则可以。

应用

  1. 对象的赋值与比较。当对象被赋值时(如volu2=volu1),复制的是对象的首地址。
  2. 对象数组。
Person[] per;  //定义一个Person类型的数组
per = new Person[3]; //给数组分配3个应用空间,初始化每个引用值为null
per[0]=new Person(“张三”,20);
per[1]=new Person(“李四”,21);
per[2]=new Person(“王二”,19);
  1. 八种基本数据类型与其对应包装类:
    • byte - Byte
    • short - Short
    • int - Integer
    • long - Long
    • float - Float
    • double - Double
    • char - Character
    • boolean - Boolean
  2. 八种基本数据类型与其对应包装类之间的自动转换:基本类型转换为包装类的过程称为“装箱”,包装类转换为基本类型的过程称为“拆箱”。从Java SE5开始,提供了自动装箱和拆箱功能。
Integer i = 10;// 系统自动调用Integer.valueOf()方法来进行装箱
int n = i;// 系统自动调用Integer.intValue()方法进行拆箱
  1. 匿名对象:没有对象名来调用成员方法,直接使用类名来调用成员方法。
// 创建对象,通过对象调用方法
Cylinder volu=new Cylinder();
volu.SetCylinder(2.5, 5,3.14);

// 通过匿名对象调用方法
new Cylinder().SetCylinder(2.5, 5,3.14);
  1. Java语言的垃圾回收
    • 只有当一个对象不被任何引用变量使用时,它的内存才可能被垃圾回收器回收;
    • 不能通过程序强迫回收器立即执行;
    • 当垃圾回收器将要释放无用对象的内存时,先调用该对象的finalize()方法。

标签:初始化,java,入门,对象,int,小白,数组,new,String
From: https://blog.csdn.net/S13352784013/article/details/139783472

相关文章

  • Java设置JSON字符串参数编码
    1.如何在Java中创建JSON字符串在Java中创建JSON字符串,我们可以使用多个库,其中最流行的是Jackson、Gson和org.json。以下是使用这些库创建JSON字符串的示例:1.1使用Jackson库(1)首先,确保我们的项目中包含了Jackson的依赖(如果我们使用Maven,可以参考前面的示例)。(2)创建一个Java对象(例......
  • java datetime数据类型去掉时分秒
    在Java中,如果我们想要表示一个日期而不包括时间(时分秒),我们通常会使用java.time包中的LocalDate类。LocalDate是一个不可变的日期对象,它只包含年、月、日三个字段。1.datetime数据类型去掉时分秒案例一以下是如何使用LocalDate类以及如何从一个包含时间的日期时间对象(比如LocalD......
  • 1950 Springboot汽修技能点评系统idea开发mysql数据库APP应用java编程计算机网页源码m
    一、源码特点 springboot汽修技能点评系统是一套完善的信息系统,结合springboot框架和bootstrap完成本系统,对理解JSPjava编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和数据库,系统主要采用B/S模式开发。前段主要技术bootstrap.cssjquery......
  • 第五站:Java金——Spring框架的璀璨殿堂(一)
    第五站:Java金——Spring框架的璀璨殿堂踏入Java金的领域,我们来到了Spring框架的璀璨殿堂,这里是现代Java企业级应用开发的瑰宝。Spring通过其核心特性——依赖注入(IoC)和面向切面编程(AOP),以及SpringBoot的便捷启动与配置,为开发者提供了一条通往高效、简洁开发之路的金光大道......
  • 第八站:Java银——微服务架构的未来之光
    在云原生时代,Java凭借其强大的生态系统和成熟的微服务架构支持,成为了构建现代分布式系统不可或缺的一部分。以下是如何将Java、Docker、Kubernetes、以及SpringCloud结合起来,构建高效、可扩展的微服务应用的概述,结合简化的代码示例来说明这一过程。Docker容器化Docker提......
  • java datetime数据类型去掉时分秒
    在Java中,如果我们想要表示一个日期而不包括时间(时分秒),我们通常会使用java.time包中的LocalDate类。LocalDate是一个不可变的日期对象,它只包含年、月、日三个字段。1.datetime数据类型去掉时分秒案例一以下是如何使用LocalDate类以及如何从一个包含时间的日期时间对象(比如Loc......
  • 零基础入门学用Arduino 第五部分
     重要的内容写在前面:该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后,整体感觉是很好的,如果有条件的可以先学习一些相关课程,学起来会更加轻松,相关课程有数字电路(强烈推荐先学数电,不然可能会有一些地方理解起来很困难)、模拟电......
  • Javascript入门博客【入门复习(学习)使用】
    JavaScript是一门高级,解释形语言,大量用于关于web网站的开发,可以和网页联动做出更多有趣的动画效果。其运行方式大都是嵌入在网页中运行。其实在定义方面如果过你是初学者来学习和这方面相关的知识,知道上面这些就已经足够了。我们可以在浏览器中直接进行对代码的控制,进入浏览器......
  • shell语言入门
    前言Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁,是linux内置的一款软件。通过编写Shell的脚本,可以更好的使用linux系统(比如、安装卸载软件、增删改查文件等等),毕竟大部分linux、系统都没有界面,不像windows那样鼠标点点就完成了大部分需求。shell软件的种类有很多......
  • OpenCV一文入门
    OpenCV一文入门官网地址OpenCV当前版本opencv-python4.9.0.80python包地址https://pypi.org/project/opencv-python/OpenCV(OpenSourceComputerVisionLibrary)是一个开源计算机视觉和机器学习软件库,由Intel最初开发,现由WillowGarage和Itseez维护。OpenCV旨......