本帖最后由 zxq1996 于 2019-8-20 21:59 编辑
经过这几天的学习,我学会了一下简单的Java用法,下面是我总结的一些知识笔记。要能熟练的使用Java,就必须掌握这些基础知识。
上课笔记:
1.循环语句
for、switch、while、do while;
for语句的结构
for(①初始化语句; ②条件判断语句; ③条件控制语句){
④循环体语句;
}
执行流程:
1. 执行初始化
2. 执行条件判断语句,如果结果是true,就执行循环体语句;如果是false,for循环结束
3. 执行条件控制语句,再次执行条件判断语句,重复第二步骤。
①②④③…②④③直到②的结果是false就结束
2. while循环
基本格式:
while(条件判断语句){
循环体语句;
}
完整格式:
初始化语句①;
while(条件判断语句②){
循环体语句③;
条件控制语句④;
}
执行流程(基于完整格式):
① ②③④ ②③④ ②③④
1. 执行初始化语句
2. 执行条件判断语句
结果为false,while循环结束;
结果为true,执行while循环体语句
3. 执行条件控制语句
4. 重新执行第二步,直到条件判断语句的结果为false。
语句格式:
3、switch
switch(表达式){
case 值1:
语句1;
break;
case 值2:
语句2;
break;
……
default:
语句n+1;
[break;]
}
执行流程:
计算表达式的值,然后从上往下和各个case后面的值进行比对,只要发现相同,就执行该case的语句,遇到break,switch语句结束;如果所有的case都不匹配,执行default的语句。
case穿透
如果某个case内没有break,在执行该case内语句后,并不会再次判断后面case的值是否匹配;
而是直接执行后面case中的语句,直到遇到break或者语句结束。
4、do while
do{
循环体语句
}
while(条件判断语句)
执行流程:先执行一次循环语句语句,再执行条件判断语句,如果返回false循环结束,否则就继续循环,
5、键盘输入
①第一步先打包,
import java.util.Scanner;(放在类方法前)
②第二步创建一个空对象
Scanner sc=new Scanner(System.in);
③第三步键盘录入
int型 int r=sc.nextInt();
String类型 String r=sc.nextLine();
6、产生随机数
①第一步先打包,
import java.util.Random;(放在类方法前)
②第二步创建一个空对象
Random sc=new Random(System.in);
③第三步键盘录入
int型 int r=sc.nextInt(n);(产生的随机数范围是[0,n));
7,数组
将一串相同类型的数据放在同一个容器中,
定义一个数组有动态初始化和静态初始化两种方法。
动态初始化: 数据类型[] 数组名=new 数据类型[数组长度]
它有默认的初始值都为零,
静态初始化(系统指定数组长度,程序员指定数组元素内容)
基本格式:数据类型[] 变量名 = new 数据类型[]{元素1, 元素2,……}
简化格式(推荐使用):数据类型[] 变量名 = {元素1, 元素2,……}
数组操作过程中常见的两个问题
a) 索引越界
发生情况:使用了数组中不存在的索引
发生原因:该数组中不存在你要操作的索引
解决办法:使用数组中存在的正确索引
b) 空指针异常
发生情况:数组变量没有指向一个具体的数组(对象)
8、方法
方法是指具有一定功能的代码集合,它必须先定义再使用,在创建方法后需要手动使用。
方法的格式为:
①不带参数无返回值
public static void 方法名(){
方法体
}
使用方法:
方法名();
注意事项:
a. 方法定义在类里面,main方法外面(方法不能嵌套定义)
b. 方法的调用,是在其他方法(目前是在main)里面
c. 一个作用:提高代码的复用性
d. 方法的调用时在栈内存中,方法被调用时进栈,调用完毕后方法出栈
②带参数无返回值的方法
定义格式:public static void 方法名(参数列表){
方法体
}
使用:
方法名(与参数列表匹配的变量/常量);
参数列表:
组成: 数据类型1 变量名1, 数据类型2 变量2,……
1. 数据类型和 变量名必须成对出现
2. 调用时候,传的值或变量需要与定义时参数列表匹配
3. 参数列表匹配要求的是:各个参数的类型、参数数量、参数顺序都匹配
③有返回值的方法
格式:
public static 返回值类型+方法名(参数){
方法体
return 数据(必须与返回值类型一样,类型是void时,不需要写返回值)
}
方法调用过程中参数传递细节
当参数是基本数据类型时,形参的改变不会影响实参
当参数是引用数据类型时,形参的改变会影响实参
方法重载:在同一个类中,存在方法名相同,参数列表不同的多个方法,这些方法之间就构成了方法重载。它能够减少方法名的使用。
9、面向对象
什么是面向对象?
面向对象是Java里面的一个非常优秀的编程思想,区别于面向过程的思想,面向对象的思想更符合生活的思考方式。
面向对象不只关注与解决问题是细节,更多的是关注能够解决问题的对象,以及对象的属性、行为。这种方式更贴近实际,对于维护大型项目或者复杂逻辑非常有用。
①类和对象
生活中所有的内容和事物,都可以用一个名词概括:东西
在Java中,所有的内容和事物,也都可以用一个名词概括:对象。
万物皆对象
Java中:类和对象的关系
类是对象的抽象
对象是类的实体
类的特点:具有相同属性和行为的一类事物的集合/抽象 类是对象的数据类型
面向对象
面向对象是一种思想,一种解决问题的思路
面向过程:只关注解决问题的过程,而不关注多个解决方法之间的关系等
面向对象:使用面向对象思想完成一个功能,强调找一个具有该功能的对象,使用这个对象完成功能
面向过程:关注的是解决问题的具体思路
面向对象:关注的是能解决该类问题的对象
2. 类的定义之成员变量和成员方法
类定义的格式:
public class 类名{
成员变量;
数据类型 成员变量名1;
数据类型 成员变量名2;
.....
成员方法(没有static关键修饰的方法,其他与之前方法的定义格式都一样):
public 返回值类型 成员方法名1(){……}
public 返回值类型 成员方法名2(){……}
}
在创建了类后需要进行测试,在main方法中通过创建被测试类的对象来使用其成员变量和成员方法。
对象创建格式:
类名 变量名/对象名 = new 类名();
例如:Scanner sc = new Scanner(System.in);
Random r = new Random();
成员的使用方法:
对象名.成员(成员变量和成员方法)
例如:sc.nextInt();--调用Scanner的成员方法
r.nextInt(); --调用Random的成员方法
成员变量和局部变量的区别:
成员变量定义在类中方法外,局部变量定义在方法中。
成员变量的值储存在堆内存中随着对象的创建而创建,有默认的初始值,局部变量储存在栈内存中,随着方法的出现而出现,调用结束而结束。
private
是一个访问权限修饰符
能修饰成员(成员变量和成员方法)
作用:保护成员不被外界直接访问。被private修饰的成员只能在本类中被直接访问
其他类中想要使用该程序员,就需要通过制定的方法来使用
this关键字
this用于指代成员变量
当方法中局部变量和成员变量不重名时,不需要使用this
当方法中局部变量和成员变量重名时,需要在成员变量前面添加this关键字。解决的是局部变量隐藏成员变量的问题,没有该问题也可以使用this,但是没有意义。
this代表的是当前对象
谁调用当前方法,当前方法内的this只得就是谁。
封装
面向对象三大特征:封装、继承、多态
封装的原则:
将成员变量私有化,避免外部程序直接访问,可以通过指定的公共方法访问(getter、setter)
封装的好处:
成员变量不能被直接访问,提高了代码的安全性
使用方法进行操作,提高了代码的复用性
构造方法
构造方法是一个特殊的方法
没有参数的构造方法一般称为无参构造
public Student(){}
有参数的构造方法一般称为有参构造
public Student(String name, int age){
this.name = name;
this.age = age;
}
构造方法使用注意事项
a. 如果没有手动书写构造方法,系统会默认提供一个无参构造。
b. 但凡是手动写了任意一个构造方法,系统将不再提供默认无参构造。
c. 构造方法之间可以重载
d. 系统根据提供的参数列表决定调用某一个构造方法,没有对应的构造方法则会报错
推荐书写方式:
不管在任何时候,先手动书写一个无参构造
9、API
应用程序编程接口。
10、String
字符串,
特点:值不能被改变、但是可以被多个共享,字符串的底层是字符数组(JDK8及以前)和字节数组(JDK9及以后)。
构造方法:①创建一个空白字符串
String s1=new String();
②根据字符数组的内容
char chr=['A','B','C'];
String s2=new String(chr);
③根据字节数组的内容
byte[] bys={98,97,96};
String s2=new String(byte);
④直接创建,不用创建对象。
String r=“abc;在定义相同的内容的时候,其对象地址值不会改变。
一般使用直接创建、打印字符串对象的时候,不会输出其地址值,而是输出内容。
对于引用类型使用==比较的时候,比较的是两个对象的地址值。对于基本数据类型使用==比较的时候数据值是否相同。
判断两个字符串内容是否相同,使用equals()方法来进行比较。
字符串1.equals(字符串2)
boolean c2 = c.equalsIgnoreCase(c1);判断字符串c和字符串c1是否相等,忽略大小写。
boolean c1 = c.endsWith(String suffix);测试此字符串是否以指定的后缀结尾。
String c3 = c.substring(1, 4);输出索引在[1,4)的c3的字符。
String c4 = c.trim();其值为此字符串,并删除任何前导和尾随空格。
String s = c.toLowerCase();将c以小写字母输出来。
String s1 = c.toUpperCase();将c以大写字母输出来。
分割方法的定义是:public String[] split(String regex){....}分割方法使用参数的内容来对字符串进行分割。字符串的分割方法根据参数进行对字符串进行切割,(点符号有着特殊的含义需要进行\\的转义,否则无法正常进行分割字符串,如果去掉\\进行字符串的分割,将无法进行分割,数组的长度是0。)
isEmpty() 判断字符串的长度是否为0
String s="zhizuo";
String b="chanagleZXQ";
String c="zxq-love-njy";
String d=" zxq love njy ";
String e=" ";
boolean b1 = s.equalsIgnoreCase(b);//判断两个数是否相等,不区分大小写
System.out.println(b1);
String s1 = b.toUpperCase();//将b全部大写字母输出
System.out.println(s1);
String s2 = b.toLowerCase();//将b全部小写字母输出
System.out.println(s2);
String sb = s.substring(0, 3);//将s中的字母按照索引[0,3)输出
System.out.println(sb);
String t = d.trim();//将d中的开头空白字符和结尾的空白字符删除然后再输出
System.out.println(t);
String[] sp = c.split("-");//将c中的字符切割,断点为"-",,此时切割成了一个数组形式;
System.out.println(sp[1]);
boolean e1 = e.isEmpty();//判断是否字符串长度为零,空格键也是一个字符
System.out.println(e1);。
注意:判断一个字符串是否和自己本身反转的数相等,先将String转化成StringBuilder,利用reveser()反转语句,再转换成String类型。
==比较的是地址值。比较内容必须用equals()
|
|