返回顶部
首页 > 资讯 > 后端开发 > Python >一篇文章带你深入了解Java基础
  • 438
分享到

一篇文章带你深入了解Java基础

2024-04-02 19:04:59 438人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1、String类1.1两种对象实例化方式1.2字符串比较1.3字符串常量是String的匿名对象1.4String两种实例化方式区别1、分析直接赋值方式2、构造方法赋值1.5字

1、String类

1.1两种对象实例化方式

对于String在之前已经学习过了基本使用,就是表示字符串,那么当时使用的形式采取了直接赋值:


public class StringText{
	public static void main(String args[]){
	String str =new String( "Hello");     //构造方法
	System.out.print(str);
	}
}

对于String而言肯定是一个类,那么程序之中出现的str应该就是这个类的对象,那么就证明以上的赋值操作实际上就表示要为String类的对象进行实例化操作。

但String毕竟是一个类,那么类之中一定会存在构造方法,String类的构造:


public class StringText{
	public static void main(String args[]){
	String str =new String( "Hello");     //构造方法
	System.out.print(str);
	}
}

发现现在也可以通过构造方法为String类对象实例化。

1.2字符串比较

如果现在有两个int型变量,如果想要知道是否相等,使用“==”进行验证。


public class StringText{
	public static void main(String args[]){
	int x = 10;
	int y = 10;
	System.out.print(x==y);
	}
}

换成String


public class StringText{
	public static void main(String args[]){
		String str1 = "Hello";
		String str2 = new String("Hello");
		String str3 = str2;     //引用传递
		System.out.print(str1== str2);          //false
		System.out.print(str1== str3);          //false
		System.out.print(str2== str3);          //ture
	}       
}

image-20210730181004695

现在使用了“==”的确是完成了相等的判断,但是最终判断的是两个对象(现在的对象是字符串)判断是否相等,属于数值判断------判断的是两个对象的内存地址数值,并没有判断内容,而想要完成字符串内容的判断,则就必须使用到String类的操作方法:public Boolean equals(String str)(将方法暂时变了)


public class StringText{
	public static void main(String args[]){
		String str1 = "Hello";
		String str2 = new String("Hello");
		String str3 = str2;     //引用传递
		System.out.print(str1.equals(str2));          //ture
		System.out.print(str2.equals(str3));          //ture
		System.out.print(str2.equals(str3));          //ture
	}       
}

1.3字符串常量是String的匿名对象

如果在程序之中定义了字符串(使用“””),那么这个就表示一个String对象,因为在各个语言之中没有关于字符串数据类型的定义,而Java将其简单的处理了,所以感觉上存在了字符串数据类型。

**范例:**验证字符串是对象的概念


public class NiMing{
	public static void main(String args[]){
		String str = "Hello";
		System.out.print("Hello".equals(str));     //通过字符串调用方法
	}       
}

匿名对象可以调用类之中的方法与属性,以上的字符串可以调用了equals()方法,那么它一定是一个对象。

**小技巧:**关于字符串与字符串常量的判断

例如:在实际工作之中会有这样一种操作,要求用户输入一个内容,之后判断此内容是否与指定内容相同。


public class NiMing{
	public static void main(String args[]){
		String str = "Hello";
        if(str.equals("Hello")){
		    System.out.print("条件满足");
		}   
	}       
}

但,既然数据是用户自己输入,那么就有可能没有输入内容。


public class TestDemo1{
	public static void main(String args[]){
		String str = null;
        if(str.equals("Hello")){
		    System.out.print("条件满足");
		}   
	}       
}
//报错
    Exception in thread "main" java.lang.NullPointerException
        at NiMing.main(TestDemo1.java:4)
//现在将代码反过来操作:
        public class TestDemo1{
	public static void main(String args[]){
		String str = null;
        if("Hello".equals(str)){
		    System.out.print("条件满足");
		}   
	}       
}

因为字符串常量是匿名对象,匿名对象不可能为null。

1.4String两种实例化方式区别

1、分析直接赋值方式


String str = "Hello";     //定义字符串

image-20210730181725468

发现现在只开辟额一块堆内存空间和一块栈内存空间。

2、构造方法赋值


String  str = new String("Hello");

image-20210730182113204

使用构造方法赋值的方式开辟的字符串对象,实际上会开辟两块空间,其中有一块空间就爱那个成为垃圾。


public class TestDemo2{
public static void main(String args[]){
		String str1 = new String("Hello");
		String str2 = "Hello";   //入池
		String str3 = "Hello";  //使用池中对象
		System.out.print(str1==str2);          //false
		System.out.print(str2==str3);          // ture 
		System.out.print(str1==str3);          // false
	}       
}

通过上面的程序可以发现,使用构造方法实例化String对象,不会入池,只能自己使用。可是在String类之中为了方便操作提供了一种称为手工入池的方法:public String intern()。


public class TestDemo2{
public static void main(String args[]){
		String str1 = new String("Hello").intern();    //手工入池
		String str2 = "Hello";   //入池
		String str3 = "Hello";  //使用池中对象
	    System.out.print(str1==str2);          //ture		 	 	    			System.out.print(str2==str3);          //ture
		System.out.print(str1==str3);          //ture
	}       
}

1.5字符串常量不可改变

字符串类的操作特点决定:字符串不可能去修改里面的内容。


public class TestDemo3{
	public static void main(String args[]){
		String str = "Hello";
		str += "World";
		str += "!!!";
		System.out.print(str);
	}
}

image-20210730200637440

通过以上的代码可以发现,字符串内容的更改,实际上改变的是字符串对象的引用过程,那么一下的代码应该尽量避免:


public class TestDemo3{
	public static void main(String args[]){
		String str = "Hello";
		for(int x=0;x<1000;x++){
			str += x;
		}
		System.out.print(str);
	}       
}
  • 字符串赋值只用直接赋值模式进行完成
  • 字符串的比较采用equals()方法进行实现
  • 字符串没有特殊的情况不要改变太多

1.6开发中String必用

任何一个类的文档由如下几个部分组成

  • 类的相关定义,包括这个类的名字,有哪些父类,有哪些接口。
  • 类的相关简介。包括基本使用
  • 成员摘要(field):属性就是一种成员,会列出所有成员的信息项
  • 构造方法说明(Constructor),列出所有构造方法的信息
  • 方法信息(Method),所有类中定义好的可以使用的方法
  • 成员、构造、方法的详细信息

1.7字符串和字符数组

字符串就是一个字符数组,所有在String类中有字符串转变为字符数组,字符数组转换为字符串的方法。

方法名称 类型 描述
public String(char[] value) 构造 将字符数组中的所有内容变为字符串
public String(char[] value, int offset, int count) 构造 将字符数组中的所有内容变为字符串 offset-开始 count-个数
public char charAt(int index) 普通 返回char指定字符的索引
public char[] toCharArray() 普通 将字符串转化为字符数组

charAt方法


public class TestDemo4{
	public static void main(String args[]){
		String str = "Hello";
		System.out.println(str.charAt(0));
		//如果现在超过了字符串的长度,则会产生异常StringIndexOutOfBoundsException
		System.out.println(str.charAt(10));
	}
}

字符串和字符数组的转化是重点


//字符串转化为字符数组
public class TestDemo4{
	public static void main(String args[]){
		String str = "helloworld";
		char data [] = str.toCharArray();
		for(int i = 0; i < data.length; i++){
		data[i] -= 32;	//转大写字母简化模式更简单
			System.out.print(data[i] + "、");
		}
	}
}

//字符数组转化为字符串
public class TestDemo4{
	public static void main(String args[]){
		String str = "helloworld";
		char data [] = str.toCharArray();
		for(int i = 0; i < data.length; i++){
		data[i] -= 32;	//转大写字母简化模式更简单
			System.out.print(data[i] + "、");
		}
		System.out.println();
		System.out.println(new String(data));//字符串数组全部转化为字符数组
		System.out.println(new String(data,1,4));//字符串数组部分转化为字符数组
	}
}

image-20210730204340346

判断字符串是否由数字组成


public class TestDemo5{
	public static void main(String args[]){
		String str1 = "helloworld";
		String str = "1234567890";
		Judgenum(str);
		Judgenum(str1);
	}
	public static void Judgenum(String str){
		char data [] = str.toCharArray();
		boolean judge = true;
		for(int i = 0; i < data.length; i++){
			if(data[i]>= '0' && data[i]<= '9'){
				judge = false;
			}
		}
		if(judge){
			System.out.println(str+"是由字母组成");
		}else
			System.out.println(str+"是由数字组成");
	}
}

image-20210730214040542

1.8字节和字符串

方法名称 类型 描述
public String(byte[] bytes) 构造 将部分字节数组变为字符串
public String(byte[] bytes, int offset,int length) 构造 将部分字节数组变为字符串 bytes——要解码为字符的字节 offset——要解码的第一个字节的索引 length——要解码的字节数
public byte[] getBytes() 普通 将字符串变为字节数组
public byte[] getBytes(String charsetName) throws UnsupportedEncodingException 普通 编码转换编码

//将字符串通过字节流转化为大写
public class TestDemo6{
	public static void main(String args[]){
		String str = "helloworld";
		byte data [] = str.getBytes();//字符串转换为字节数组
		for(int i = 0; i < data.length ; i++){
			System.out.print(data[i]+"、");
			data[i] -= 32;
		}
		System.out.println(new String(data));//字节数组转化为字符串
	}
}

image-20210730221957667

一般情况下,在程序之中如果想要操作字节数组只有两种情况:

**1、**需要进行编码的转化;

2、 数据要进行传输的时候。

**3、**二进制文件适合字节处理

1.9字符串比较

方法名称 类型 描述
public boolean equals(String anObject) 普通 区分大小写比较
public boolean equalsIgnoreCase(String anotherString) 普通 不区分大小写比较
public int compareTo(String anotherString) 普通 比较两个字符串的大小关系

如果现在要比较两个字符串的大小关系,那么就必须使用comepareTo()方法完成,而这个方法返回int型数据,而这个int型数据有三种结果:大于(返回结果大于0)、小于(返回结果小于0)、等于(返回结果为0).


public class CompareTo{
	public static void main(String args[]){
	String str1 = "HELLO";
	String str2= "hello";
	System.out.println(str1.compareTo(str2));
	}
}

1.10字符串查找

方法名称 类型 描述
public boolean contains(String s) 普通 判断一个子字符串是否村存在
public int indexOf(String str) 普通 返回字符串中第一次出现字符串的索引
public int indexOf(String str, int fromIndex) 普通 从指定地方开始查找子字符串的位置
public int lastIndexOf(String str) 普通 从后向前查找子字符串的位置
public int lastIndexOf(String str, int fromIndex) 普通 从指定位置由后向前查找
public boolean startsWith(String prefix) 普通 从头判断是否以某字符串开头
public boolean startsWith(String prefix,int toffset) 普通 从指定位置判断是否以字符串开头
public boolean endsWith(String suffix) 普通 判断以某字符串结尾

public class TestDemo7{
	public static void main(String args[]){
		String str = "helloworld";
		System.out.println(str.contains("world"));		//true
		//使用indexOf()进行查找
		System.out.println(str.indexOf("world"));
		System.out.println(str.indexOf("java"));
		//jdk1,5之前这样使用
		if(str.indexOf() != -1){
			System.out.println("可以查找到指定的内容");
		}
	}
}
  • 基本上所有的查找现在都是通过contains()方法完成。
  • 需要注意的是,如果内容重复indexOf()它只能返回查找的第一个位置。
  • 在进行查找的时候往往会判断开头或结尾。

public class TestDemo7{
	public static void main(String args[]){
		String str = "**@@helloworld##";
		System.out.println(str.startsWith("**"));	//true
		System.out.println(str.startsWith("@@",2));	//true
		System.out.println(str.endsWith("##"));	//true
	}
}

1.11字符串的替换

方法名称 类型 描述
public String replaceAll(String regex,String replacement) 普通 替换所有的内容
public String replaceFirst(String regex,String replacement) 普通 替换首内容

public class TestDemo7{
	public static void main(String args[]){
		String str = "**@@helloworld##";		
		System.out.println(str.replaceAll("l","_"));	/
	}
}

2.1、 给定一个email地址,要求验证其是否正确,提示:可以简单的验证一下,重点验证“@”和“.”。

标准如下:

1.email长度不短于5

2.@和.不能做开头或结尾

3.@和.顺序要有定义


public class Exam2{
	public static void main(String args[]){
		String email = "1016942589.@qqcom";
		char date[] = email.toCharArray();
		if (date.length>5&&email.startsWith("@")==false 
		&& email.startsWith(".")==false && email.endsWith("@")==false
		&&email.endsWith(".")==false && email.indexOf(".") >email.indexOf("@"))
		{System.out.println("正确");
		}else{System.out.println("错误");}
	}
}

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 一篇文章带你深入了解Java基础

本文链接: https://lsjlt.com/news/131623.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一篇文章带你深入了解Java基础
    目录1、String类1.1两种对象实例化方式1.2字符串比较1.3字符串常量是String的匿名对象1.4String两种实例化方式区别1、分析直接赋值方式2、构造方法赋值1.5字...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java基础(2)
    目录1、Java主要特点2、计算机的高级汇编语言类型:3、JVM(Java Visual Machine)4、编写第一个Java程序并运行5、CLASSPATH指的是类加载路径6、程...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java基础(3)
    目录1、方法的基本定义2、方法重载3、方法的递归调用4、面向对象的前身是面向过程5、类与对象总结1、方法的基本定义 限制条件:本次所讲解的方法指的是在主类中定义,并且由主方法由主方法...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java基础(4)
    目录1、private实现封装处理2、构造方法与匿名对象3、简单java类4、数组总结1、private实现封装处理 如果像想要知道封装,首先必须清楚如果没有封装会怎么样? 没有封装...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java基础(5)
    目录1、数组Java对数组的支持1、数组的排序:java.util.Arrays.sort(数组名称)2、数组的拷贝:指的是将一个数组的部分内容替换掉另一个数组的部分内容总结1、数组...
    99+
    2024-04-02
  • 一篇文章带你深入了解javaIO基础
    目录一.认识IO1.IO的分类2.IO的方式3.IO读写的方式4.IO的特性二.文件操作1.文件的构成2.文件的创建3.文件操作的API使用三.IO流1.流的分类2.流的创建3.流的...
    99+
    2024-04-02
  • 一篇文章带你了解Java基础-抽象
    目录Java基础知识(抽象)抽象抽象定义abstract的使用定义抽象类抽象类的一些注意点总结Java基础知识(抽象) 抽象 抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃...
    99+
    2024-04-02
  • 一篇文章带你了解Java基础-接口
    目录Java基础知识(接口)接口接口的定义接口和抽象的区别接口的格式接口中的主要成分接口的案例接口与接口的关系JDK 8之后的接口新增方法总结Java基础知识(接口) 接口 Jav...
    99+
    2024-04-02
  • 一篇文章带你了解Java基础-多态
    目录Java基础知识(多态)多态多态的定义和存在的必要条件多态的案例多态的弊端引用类型转换总结Java基础知识(多态) 多态 多态就是指程序中定义的引用变量所指向的具体类型和通过该...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java封装
    目录如何实现封装代码展示构造方法注意点:代码展示总结如何实现封装 可以分为两步: 第一步:将类的变量声明为private。 第二步:提供公共set和get方法来修改和获取变量的值。 ...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java异常
    目录一.初识异常1.常见的异常类型<1>除以0<2>数组下标越界<3>访问null对象2.防御式编程<1>LBYL<2>E...
    99+
    2024-04-02
  • 一篇文章带你了解Java Spring基础与IOC
    目录About SpringAbout IOCHello SpringHello.javaBeans.xmlTest.javaIOC创建对象的几种方式Spring import se...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java类加载
    目录1.类加载<1>.父子类执行的顺序<2>类加载的时机<3>类的生命周期<4>类加载的过程<5>类加载器1.启动类加载器...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java线程池
    目录线程池模型常用线程池ThreadPoolExecutor构造函数参数说明 线程池默认工作行为ForkJoinPoolFutureTask线程数量分析CPU密集型IO密集...
    99+
    2024-04-02
  • 一篇文章带你了解C语言:入门基础
    目录C语言本身特点数据类型常量变量变量分类使用小建议生命周期作用域常量分类及其特点字符串+转义字符+注释字符串转义字符两种注释选择循环语句函数数组总结闲话少说,先上思维导图。 如图...
    99+
    2024-04-02
  • 一篇文章带你了解python元组基础
    目录1. 元组基本知识1.元组的基本格式和用法2. 元组操作实例1.建立元组2.查找元素:通过元组下标实现。3.删除元组:对元组的删除时不允许的,可以通过del函数,实现对整个元组对...
    99+
    2024-04-02
  • 一篇文章带你了解python字典基础
    目录1. 字典基础知识字典的基本格式表示字典的键、值设置要求1)键的设置要求2)值的设置要求2. 字典元素增加1.利用赋值给字典增加元素2.利用setdefault()方法给字典增加...
    99+
    2024-04-02
  • 一篇文章带你了解python集合基础
    目录1. 集合类型定义(1)集合是多个元素的无序组合2. 集合操作符 3. 集合处理方法4. 集合类型应用场景(1)包含关系比较(2)数据去重:集合数据所有元素无重复总结1...
    99+
    2024-04-02
  • 一篇文章带你了解python异常基础
    目录1. 程序中的问题1.1 低级语法错误1.2 中介错误:代码存在隐性错误1.3 高级错误:软件面对不确定性的异常错误2. 捕捉异常2.1 基本异常捕捉语句2.2 带finally...
    99+
    2024-04-02
  • 一篇文章带你了解C++(STL基础、Vector)
    目录STL基本概念STL六大组件STL中容器、算法、迭代器容器算法迭代器初识Vector容器Vector三大遍历算法Vector存放其他数据类型 Vector容器嵌套总结S...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作