java基础知识(二)
第二周java讲解小记
1.switch-case语句
(1)语句格式
switch(参数){
case 选项1:
执行语句1;
break;
case 选项2:
执行语句2;
break;
...
default:
执行语句n
break;
}
case语句情况为switch传进的参数的可能性,参数有n-1种情况,但是只执行其中的一条语句,是单选操作,switch语句中参数类型具有限制,只能是byte short int char boolean String 枚举类型或者是数组当中的某一项;
switch-case语句里面的break意义为每一个case语句都需要break跳出当前执行语句,跳出当前选择,每一个case语句必须有一个对应的break语句来跳出case语句;for循环语句里面的break意义为直接跳出当前循环;
default则为当你switch判断的单一选择在所说的case语句未在选择语句中出现的情况,则执行default函数体;
if语句和switch语句的明显区别
switch语句只能对单一的值进行判断 不能判断区间值
if语句既可以对单一值进行判断也可以对区间值进行判断
do-while循环和while循环的区别
1.先执行,后判断
2.先判断,后执行
continue语句:只能在循环语句中使用,在循环中表示跳过当前循环,开启下一轮循环
2.函数的概念
(1)函数是定义在类中的具有独立功能的一段小程序,并且被多次调用。
(2)我们引入函数的目的就是防止代码的冗余问题,虽然现在我们的计算机发展速度很快,内存也足够大,但是在一个主函数里写过多的方法也会显得特别复杂,并且代码的可读性差,但是当我们在类中重新定义函数的时候,我们只需要在主函数中写出我们想要达到的目的,具体实现细节我们只需放在我们新建函数的函数体里面就可以实现具体的实现细节了,主函数只需调用此函数,就可以实现它想要达到的目的。
(3)函数的定义格式
修饰符 返回值类型 函数名 (参数类型 形式参数1,参数类型 形式参数2,...){
执行语句;
return 返回值;
}
注意:函数的返回值类型如果是void时,return语句可以省略不写;void表示的是没有返回值的情况。
函数的返回值需要返回的类型就为你上一层函数想要接受的数值类型。
return关键字是用于结束该功能。并将后面的具结果返回给调用者。
每一个自定义函数都必须有return语句,返回的类型为函数定义时的返回值类型相一致,return除了返回值返回给上一层函数之外,还有将自定义函数弹栈的操作;
函数的重载
重载的表现就是同一个类中有多个同名函数,与返回值类型无关,只看参数和参数类型
区分重载的方法:主要看参数类型的排列组合(顺序,个数)
3.字符串相关知识点
String类为引用数据类型
引用数据类型和基本数据类型最大的区别为:
能否调用方法,基本数据类型不行而引用数据类型可以
s1="呵呵";
s2="呵呵";
s1==s2,比的是常量池中的地址,表象
s1.equals(s2),比的是字符串中的内容,实际
只要想改变字符串本身的操作 都不是直接在原先字上,而是复制一份,字符串是不可变对象
一些常用的字符串操作
char | charAt(int index) 返回指定索引处的 char 值。 |
int | compareTo(String anotherString) 按字典顺序比较两个字符串。 |
int | compareTo(String anotherString) 按字典顺序比较两个字符串。 |
int | compareToIgnoreCase(String str) 按字典顺序比较两个字符串,不考虑大小写。 |
boolean | contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true |
boolean | startsWith(String prefix) 测试此字符串是否以指定的前缀开始。 |
boolean | startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始。 |
boolean | endsWith(String suffix) 测试此字符串是否以指定的后缀结束。 |
boolean | equals(Object anObject) 将此字符串与指定的对象比较。 |
boolean | equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写。 |
int | indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。 |
int | indexOf(int ch, int fromIndex) 返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。 |
int | indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
int | indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 |
int | lastIndexOf(int ch, int fromIndex) 返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 |
int | lastIndexOf(String str) 返回指定子字符串在此字符串中最右边出现处的索引。 |
int | length() 返回此字符串的长度。 |
String | replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 |
String[] | split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
String[] | split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。 |
String | substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。 |
String | substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
String | toLowerCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为小写。 |
String | toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。 |
数组相关知识
数组可以理解为是一些地址连续的变量;
创建数组存储数据
好处:操作变量时方便
弊端:会连续占用一片内存
数据:是空间大小一样地址连续的一组存储空间并且该数组内的空间数据类型都是一样的,为了方便调用数组中的元素,提供角标,索引
数组最大的特征:数组一旦被创建出来则其长度就不可更改,但是里面的元素可以更改;
数组中的元素有默认初始化
int值默认为0
double值默认为0.0
String值默认为null
数组不属于基本数据类型,数组本身就是一个对象!
基本数据类型在常量池中
引用数据类型在堆内存中
在堆内存中创建的数据,都会有默认初始化;
创建数组的方式
数据类型[] 数组名 = new 数据类型[长度];
int[] arr = new int[10];
创建一个长度为10的int型一维数组,元素值默认为0
数据类型[] 数组名 = new 数据类型{元素1,元素2,元素3,...,元素n};
int[] arr = new int[]{1,2,3,4,5};
创建一个指定元素为{1,2,3,4,5}的长度为5的int型一维数组
数据类型[] 数组名 = {元素1,元素2,元素3,...,元素n};
经典判断字符共同前缀代码
import java.util.*;
class Home19{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
System.out.print("Enter the first string:");
String s1=scanner.nextLine();
System.out.print("Enter the second string:");
String s2=scanner.nextLine();
//s1=abcdefg
//s2=abcdshdkjsd
int len=Math.min(s1.length(),s2.length());
int i=0;
while(i<len){
if(s1.charAt(i)!=s2.charAt(i)){
break;
}
i++;
}
System.out.println(s1.substring(0,i));
}
经典自定义函数代码
import java.util.Scanner;
class Class27{
public static void main(String[] args){
//1.获取用户输入的密码字符串
Scanner scanner =new Scanner(System.in);
System.out.print("请输入密码:");
String pwd=scanner.nextLine();
if(isValid(pwd)){
System.out.println("合法");
}else{
System.out.println("不合法");
}
}
public static boolean isValid(String pwd){
return isRight1(pwd)&&isRight2(pwd)&&isRight3(pwd);
}
public static boolean isRight1(String pwd){
return pwd.length()>=8;
}
public static boolean isRight2(String pwd){
for(int i=0;i<pwd.length();i++){
char c=pwd.charAt(i);
if(!isDigit(c)&&!isLetter(c)){
return false;
}
}
return true;
}
public static boolean isDigit(char c){
return c>='0'&&c<='9';
}
public static boolean isLetter(char c){
return (c>='a'&&c<='z')||(c>='A'&&c<='Z');
}
public static boolean isRight3(String pwd){
int digitCount=0;
for(int i=0;i<pwd.length();i++){
char c=pwd.charAt(i);
if(isDigit(c)){
digitCount++;
}
}
return digitCount>=2;
}
}
字符串转化为数组代码
import java.util.*;
class Demo03{
//将数组进行字符串化打印
public static void main(String[] args){
int[] arr={1,2,3,4,5,6,7,8,9};
//[1, 2, 3, 4, 5, 6, 7, 8, 9]
System.out.println(toString(arr));
}
public static String toString(int[] arr){
String s="[";
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
s=s+arr[i]+"]";
}else{
s=s+arr[i]+", ";
}
}
return s;
}
}
数组扩容代码
import java.util.Arrays;
class Demo05{
public static void main(String[] args){
//数组扩容
//数组的长度一旦确定不可更改
int[] arr={1,2,3,4,5,6,7,8,9};
arr=resize(arr,arr.length+1);
arr[arr.length-1]=10;
System.out.println(Arrays.toString(arr));
}
public static int[] resize(int[] arr,int newLen){
int[] newArr=new int[newLen];
for(int i=0;i<arr.length;i++){
newArr[i]=arr[i];
}
return newArr;
}
}