java基础语法整理
- 一、数组
- 二、面向对象
- 三、字符串
- 1.String常见成员方法
- 2.使用小案例
- 用户登录案例
- 遍历字符串案例
- 统计字符次数案例
- 字符串拼接案例
- 手机号屏蔽
- 四、集合
链接: java基础语法整理 -----上
一、数组
1.从概念谈起
- 概念:指的是一种容器,可以同来存储同种数据类型的多个值。但是数组容器在存储数据的时候,需要结合隐式转换考虑。
- 比如
- 定义了一个int类型的数组。那么boolean。double类型的数据是不能存到这个数组中的,
- 但是byte类型,short类型,int类型的数据是可以存到这个数组里面的。
- 建议:容器的类和存储的数据类型保持一致。
- 举例:
- 整数1 2 3 4 56 就可以使用int类型的数组来存储。
- 小数1.1 1.2 1.3 1.4 就可以使用double类型的数组来存储。
- 字符串"aaa" “bbb” “ccc” 就可以使用String类型的数组来存储。
2.数组的静态初始化
- 完整格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4…};
int[] arr = new int[]{11,22,33};double[] arr = new double[]{1.1,1.2,1.3};
- 格式详解
- 数据类型: 限定了数组以后能存什么类型的数据
- 方括号:表示现在定义的是一个数组
- 数组名:其实就是名字而已,方便以后使用,在起名字的时候遵循小驼峰命名法
- new:就是给数组在内存中开辟了一个空间
- 数据类型:限定了数组以后能存什么类型的数据。前面和后面的数据类型一定要保持一致。
- 方括号:表示现在定义的是一个数组。
- 大括号:表示数组里面的元素。元素也就是存入到数组中的数据。多个元素之间,一定要用逗号隔开。
- 错误写法
int[] arr = new double[]{11,22,33};
- 注意点:
- 等号前后的数据类型必须保持一致
- 数组一旦创建之后,长度不能发生变化
- 简化格式:数据类型[] 数组名 = {元素1,元素2,元素3,元素4…};
3。地址值
int[] arr = {1,2,3,4,5};
System.out.println(arr);//[I@6d03e736double[] arr2 = {1.1,2.2,3.3};
System.out.println(arr2);//[D@568db2f2
- 打印数组的时候,实际出现的是数组的地址值
- 数组的地址值:就表示数组在内存中的位置
- 以[I@6d03e736为例:
- [ :表示现在打印的是一个数组。
- I:表示现在打印的数组是int类型的。
- @:仅仅是一个间隔符号而已。
- 6d03e736:就是数组在内存中真正的地址值。(十六进制的)
4.数组元素的访问
- 格式:数组名[索引];
- 作用
- 获取数组中对应索引上的值
- 修改数组中对应索引上的值
- 代码示例
public class ArrDemo {/*数组中元素访问的格式:数组名[索引];作用:1.获取指定索引上对应的元素2.修改指定索引上对应的元素*/public static void main(String[] args) {int[] arr = {1,2,3,4,5};// 需求:获取arr数组中,3索引上的值int number = arr[3];System.out.println(number);System.out.println(arr[3]);// 需求:将arr数组中,3索引上的值修改为10arr[3] = 10;System.out.println("修改之后为:" + arr[3]);}
}
5.索引
- 索引也叫角标、下标。就是数组容器中每一个小格子对应的编号。
- 索引的特点
- 索引一定是从0开始的
- 连续不间断
- 逐个+1增长
6.数组的遍历
- 遍历:就是把数组里面所有的内容一个一个全部取出来。
- 数组的长度:数组名.length;
- 通用代码
for(int i = 0; i < arr.length; i++){// 在循环的过程中,i依次表示数组中的每一个索引sout(arr[i]); // 就可以把数组里面的每一个元素都获取出来,并打印在控制台上了。 }
7.数组的动态初始化
- 格式:数据类型[] 数组名 = new 数据类型[数组的长度];
- 举例
// 1.定义一个数组,存3个人的年龄,年龄未知 int[] agesArr = new int[3];// 2 .定义一个数组,存班级10名学生的考试成绩,考试成绩暂时未知,考完才知道。 int[] scoresArr = new int[10];
- 数组的默认初始化值:
- 整数类型:0
- 小数类型:0.0
- 布尔类型:false
- 字符类型:‘\u0000’
- 引用类型:null
8.数组两种初始化方式的区别
-
静态初始化:int[] arr = {1,2,3,4,5};
-
动态初始化:int[] arr = new int[3];
-
静态初始化:手动指定数组的元素,系统会根据元素的个数,计算出数组的长度。
-
动态初始化:手动指定数组长度,由系统给出默认初始化值。
- 使用场景
- 只明确元素个数,但是不明确具体的数据,推荐使用动态初始化。
- 已经明确了要操作的所有数据,推荐使用静态初始化。
- 举例
-
使用数组来存储键盘录入的5个整数。
nt[] arr = new int[5];
-
将全班的学生成绩存入数组中,已知学生成绩为:66,77,88,99,100
int[] arr = new int[5];arr[0] = 66;arr[1] = 77;... 虽然可以实现,但是太麻烦了。建议使用静态初始化:int[] arr = {66,77,88,99,100};
9.数组常见问题
- 当访问了数组中不存在的索引,就会引发索引越界异常。
- 避免:
+ 针对于任意一个数组,索引的范围:- 最小索引:0
- 最大索引:数组的长度 - 1,数组名.length - 1
public class ArrDemo6 {public static void main(String[] args) {int[] arr = {1,2,3,4,5,5,5,5,5};//用索引来访问数组中的元素System.out.println(arr[1]);System.out.println(arr[10]);//ArrayIndexOutOfBoundsException}
}
二、面向对象
- 什么是面向对象:面向对象是一种设计思想,当我们在代码中想要做一件事情的时候,我们不会自己做,可以想,谁可以干这件事情,谁能干,就让谁去干,我们忽略过程,只注重结果
- 举例一:当我们想要获取一个随机数,我们不需要自己写随机算法,我们想Java中已经定义好了一个类Random可以做这件事情,那么就让Random去做,我们不关心他是如何写随机算法的,只关注最终结果即可
- 举例二:当我们想要获取键盘上输入的数字时,我们不需要去写,发现键盘,配对键盘,连接键盘,组合按键,验证数据,监控键盘,扫描键盘,获取数据这些代码,我们想Java中已经定义好了一个类Scanner可以做这件事情,那么就让Scanner去做,我们不关心他是如何跟键盘之间发生关系的,只关注最终的结果即可
- 面向对象到底学什么
- 学习获取已有对象并使用
- 学习如何自己设计对象并使用
- 面向对象中的两个核心思想
- 类
- 类是对现实生活中一类具有共同属性和行为的事物的抽象
- 简单理解:类就是对现实事物的一种描述
- 类的组成
- 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)
- 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)
- 类和对象的关系
- 类:类是对现实生活中一类具有共同属性和行为的事物的抽象
- 对象:是能够看得到摸的着的真实存在的实体
- 简单理解:类是对事物的一种描述,对象则为具体存在的事物
- 类
- 标准JavaBean类
用来描述一类事物的类叫做Javabean类,带有main方法的类叫做测试类
标准类制作:
- 类名需要见名知意
- 成员变量使用private修饰
- 提供至少两个构造方法
- 无参构造方法
- 带全部参数的构造方法
- get和set方法:提供每一个成员变量对应的setXxx()/getXxx()
- 如果还有其他行为,也需要写上
三、字符串
- String的概述:String 类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例。也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象。String 类在 java.lang 包下,所以使用的时候不需要导包!
- String类的特点
- 字符串不可变,它们的值在创建后不能被更改
- 虽然 String 的值是不可变的,但是它们可以被共享
- 字符串效果上相当于字符数组( char[] ),但是底层原理是字节数组( byte[] )
- 获取字符串对象的方式
- 构造方法
- 直接赋值
方法名 | 说明 |
---|---|
public String() | 创建一个空白字符串对象,不含有任何内容 |
public String(char[] chs) | 根据字符数组的内容,来创建字符串对象 |
public String(byte[] bys) | 根据字节数组的内容,来创建字符串对象 |
String s = “abc”; | 直接赋值的方式创建字符串对象,内容就是abc |
示例代码:
public class StringDemo {public static void main(String[] args) {// public String():创建一个空白字符串对象,不含有任何内容String s1 = new String();System.out.println("s1:" + s1);// public String(char[] chs):根据字符数组的内容,来创建字符串对象char[] chs = {'a', 'b', 'c'};String s2 = new String(chs);System.out.println("s2:" + s2);// public String(byte[] bys):根据字节数组的内容,来创建字符串对象byte[] bys = {97, 98, 99};String s3 = new String(bys);System.out.println("s3:" + s3);// String s = “abc”; 直接赋值的方式创建字符串对象,内容就是abcString s4 = "abc";System.out.println("s4:" + s4);}
}
- 两种方式的区别
- 通过构造方法创建:通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同
- 直接赋值方式创建:以“”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护
1.String常见成员方法
1.字符串的比较
- ==号的作用
- 比较基本数据类型:比较的是具体的值
- 比较基本数据类型:比较的是具体的值
- equals方法的作用
- 方法介绍
// 比较两个字符串内容是否相同、区分大小写 public boolean equals(String s)
- 示例代码
public class StringDemo {public static void main(String[] args) {// 构造方法的方式得到对象char[] chs = {'a', 'b', 'c'};String s1 = new String(chs);String s2 = new String(chs);// 直接赋值的方式得到对象String s3 = "abc";String s4 = "abc";// 比较字符串对象地址是否相同System.out.println(s1 == s2);System.out.println(s1 == s3);System.out.println(s3 == s4);System.out.println("--------");// 比较字符串内容是否相同System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));System.out.println(s3.equals(s4));} }
2.使用小案例
用户登录案例
需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示
public class Test1 {public static void main(String[] args) {// 1.定义两个变量用来记录正确的用户名和密码String rightUsername = "Andy";String rightPassword = "123456";//2.键盘录入用户名和密码for (int i = 0; i < 3; i++) {//0 1 2Scanner sc = new Scanner(System.in);System.out.println("请输入用户名");String username = sc.next();System.out.println("请输入密码");String password = sc.next();// 3.判断比较if (username.equals(rightUsername) && password.equals(rightPassword)) {System.out.println("登录成功");// 如果正确,循环结束break;} else {// 最后一次机会if(i == 2){System.out.println("账户" + username + "被锁定,请联系管理员");}else{// 不是最后一次机会System.out.println("用户名或密码错误,登录失败,还剩下" + (2 - i) + "次机会");//2 1 0}}}}
}
遍历字符串案例
需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串
public class Test2 {public static void main(String[] args) {// 1.键盘录入一个字符串Scanner sc = new Scanner(System.in);System.out.println("请输入字符串");String str = sc.next();System.out.println(str);// 2.遍历for (int i = 0; i < str.length(); i++) {// i 依次表示字符串的每一个索引// 索引的范围:0 ~ 长度-1// 根据索引获取字符串里面的每一个字符char c = str.charAt(i);System.out.println(c);}}
}
统计字符次数案例
需求:键盘录入一个字符串,统计该字符串中大写字母字符,小写字母字符,数字字符出现的次数(不考虑其他字符)
public class Test3 {public static void main(String[] args) {// 1.键盘录入一个字符串Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串");String str = sc.next();// 2.统计 --- 计数器count// 此时我要统计的有3样东西,所以要定义3个计数器分别进行统计int bigCount = 0;int smallCount = 0;int numberCount = 0;//得到这个字符串里面每一个字符for (int i = 0; i < str.length(); i++) {// i 表示字符串中的索引// c 表示字符串中的每一个字符char c = str.charAt(i);// 对c进行判断if (c >= 'a' && c <= 'z') {smallCount++;}else if(c >= 'A' && c <= 'Z'){bigCount++;}else if(c >= '0' && c <= '9'){numberCount++;}}// 3.当循环结束之后,三个变量记录的就是对应的个数System.out.println("大写字符有:" + bigCount + "个");System.out.println("小写字符有:" + smallCount + "个");System.out.println("数字字符有:" + numberCount + "个");}
}
字符串拼接案例
需求:定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。例如,数组为 int[] arr = {1,2,3}; ,执行方法后的输出结果为:[1, 2, 3]
public class Test4 {public static void main(String[] args) {// 定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,// 并在控制台输出结果。例如,数组为 int[] arr = {1,2,3};// 执行方法后的输出结果为:[1, 2, 3]int[] arr = {1, 2, 3, 4, 5};String str = arrToString(arr);System.out.println(str);}// 作用:把一个数组变成字符串public static String arrToString(int[] arr) {String s = "";// 拼接左括号s = s + "["; // 拼接内容for (int i = 0; i < arr.length; i++) {if(i == arr.length - 1){// 如果是最后一个元素,那么不需要拼接逗号空格s = s + arr[i];}else{// 如果不是最后一个元素,需要拼接元素和逗号空格s = s + arr[i] + ", ";}}// 等循环结束之后,再拼接最后一个右括号s = s + "]";return s;}// 用来遍历数组public static void printArr(int[] arr) {System.out.print("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {System.out.print(arr[i]);} else {System.out.print(arr[i] + ", ");}}System.out.println("]");}
}
手机号屏蔽
需求:以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽最终效果为:137****8888
public class Test5 {public static void main(String[] args) {// 1.键盘录入一个手机号码Scanner sc = new Scanner(System.in);System.out.println("请输入手机号码");String phoneNumber = sc.next();// 2.截取手机号码中的前三位String star = phoneNumber.substring(0, 3);// 3.截取手机号码中的最后四位// 此时我用substring方法,是用1个参数的,还是两个参数的?1个参数的会更好// 因为现在我要截取到最后,所以建议使用1个参数的。String end = phoneNumber.substring(7);//4.拼接String result = star + "****" + end;System.out.println(result);}
}
四、集合
- 集合和数组的优势对比:
- 长度可变
- 添加数据的时候不需要考虑索引,默认将数据添加到末尾
- ArrayList类概述
- 什么是集合:提供一种存储空间可变的存储模型,存储的数据容量可以发生改变
- ArrayList集合的特点:长度可以变化,只能存储引用数据类型
- 泛型的使用:用于约束集合中存储元素的数据类型
- ArrayList的常用构造方法
方法名 | 说明 |
---|---|
public ArrayList() | 创建一个空的集合对象 |
- ArrayList的常用成员方法
方法名 | 说明 |
---|---|
public boolean add(要添加的元素) | 将指定的元素追加到此集合的末尾 |
public boolean remove(要删除的元素) | 删除指定元素,返回值表示是否删除成功 |
public E remove(int index) | 删除指定索引处的元素,返回被删除的元素 |
public E set(int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
public E get(int index) | 返回指定索引处的元素 |
public int size() | 返回集合中的元素的个数 |
- 示例代码
public class ArrayListDemo {public static void main(String[] args) {// 创建集合ArrayList<String> array = new ArrayList<String>();// 添加元素array.add("hello");array.add("world");array.add("java");// public boolean remove(Object o):删除指定的元素,返回删除是否成功// System.out.println(array.remove("world"));// System.out.println(array.remove("javaee"));// public E remove(int index):删除指定索引处的元素,返回被删除的元素// System.out.println(array.remove(1));// IndexOutOfBoundsException// System.out.println(array.remove(3));// public E set(int index,E element):修改指定索引处的元素,返回被修改的元素// System.out.println(array.set(1,"javaee"));// IndexOutOfBoundsException// System.out.println(array.set(3,"javaee"));// public E get(int index):返回指定索引处的元素// System.out.println(array.get(0));// System.out.println(array.get(1));// System.out.println(array.get(2));// System.out.println(array.get(3)); //?????? 自己测试// public int size():返回集合中的元素的个数System.out.println(array.size());// 输出集合System.out.println("array:" + array);}
}