「这是我参与11月更文挑战的第16天,活动详情查看:2021最后一次更文挑战」。
常见异常
/**注意:都是错误示范,不要学习
* 1.数组角标越界的异常:ArrayIndexOutOfBoundsExcetion
* 2.空指针异常:Nul1PointerException
*/
public class ArrayDiffreent {
public static void main(String[] args) {
// 1.数组角标越界的异常:ArrayIndekoutOfBoundsExcetion
int[] arr = new int[]{1,2,3,4,5};
for(int i=0;i<= arr.length;i++) {
System.out.println(arr[i]);
}
System.out.println(arr[-2]);
System.out.println( "hello");//异常后后面不执行,所以结果没有hello
//2.空指针异常:Nul1PointerException
//情况一:
int[]arr1 = new int[]{1,2,3};
arr1 = null;//将原本的地址抹去,赋了一个null的值,arr1上没有地址
System.out.println( arr1[0]);//会出现空指针异常
//情况二:
int[][] arr2 = new int[4][];
System.out.println( arr2[0][0]);
//情祝三:
String[]arr3 = new String[]{"AA","BB" , "CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());
}
}
面向对象(上)
1.Java类及类的成员:属性、方法、构造器;代码块、内部类
2.面向对象的三大特征:封装性、继承性、多态性、(抽象性)
3.其它关键字:this. super. static、final、abstract、interface、package、import等
面向过程和面向对象
OOP:面向对象程序设计(类似于第三人称)
POP:面向过程程序设计(类似于第一人称)
1.面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
- 把冰箱门打开
- 抬起大象,塞进冰箱
- 把冰箱门关闭
2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。
人{//人、冰箱、大象都是主体,或者说是需要创建的对象
打开(冰箱){//方法(实现的是完成目的对象需要具备的功能)
开() ;//调用方法
}
抬起(大象){
大象.进入(冰箱)();
}
关闭(冰箱){
关();
}
}//上述是一个类
大象{
进入(冰箱){
}
}
冰箱{
开(){
}
关(){
}
}
//面向过程是将一个事情分布去做,一点一点来完成
//面向对象是将一个事情的主体抽离取来,完成这件事情需要每个主体具备什么功能,将每个功能再细分,调用,最后完成事情
//程序员从面向过程的执行者转化成了面向对象的指挥者
面向对象分析方法分析问题的思路和步骤:
1.根据问题需要,选择问题所针对的现实世界中的实体。
2.从实体中寻找解决问题相关的属性和功能,这些属性和功能就形成了概念世界中的类。
3.把抽象的实体用计算机语言进行描述,形成计算机世界中类的定义。即借助某种程序语言,把类构造成计算机能够识别和处理的数据结构。
4.将类实例化成计算机世界中的对象。对象是计算机世界中解决问题的最终工具。
Java基本元素:类和对象
**类(Class)和对象(Object)**是面向对象的核心概念。
类是对一类事物的描述,是抽象的、概念上的定义
对象是实际存在的该类事物的每个个体,因而也称为实例(instance)。
Java是由诸多不同功能的类构成的(类和接口)
属性:对应类中的成员变量(属性=成员变量=field =域、字段)属性会自动赋值
行为(方法):对应类中的成员方法(方法=成员方法=函数)
对象的创建的使用
import java.util.Scanner;
/**
* 创建类的对象=类的实例化
* 二、类和对象的使用(面向对象思想落地的实现):
* 1.创建类,设计类的成员
* 2.创建类的对象
* 3.通过“对象.属性”或“对象.方法”调用对象的结构
*/
//测试类
public class CreatOOP {
public static void main(String[] args) {
//创建Person类的对象
Person p1=new Person();//p1是一个变量名,可以换,定义在方法中,方法中的变量都是局部变量(存放在栈中)
//Scanner scan=new Scanner(System.in);//这也是相当于创建了一个对象
//调用对象的结构(结构体现为属性和方法)
//调用属性---“对象.属性”(赋值、输出)
p1.name="Tom";
p1.isFlag=true;
System.out.println(p1.age);
//调用方法
p1.eat();
p1.Sleep();
p1.Talk("Chinese");//因为变量是String类型的,所以需要双引号
//***************************************
Person p2=new Person();//对Person造了一个新对象,因为是new的,所以再堆空间中右两个空间存储对象
System.out.println(p2.name);//结果是null,因为p1,p2是两个空间,所以p1赋值不会影响到p2
//属性会自动赋值
System.out.println(p1.isFlag);//结果是false
/**
* 如果一个类创建了多个对象,每个对象拥有独立的一套类的属性(非static的)
*/
//***************************************
//形式一
Person p3=p1;//和数组类似,赋值后更改p3属性的地址值会改变p1的值,因为共同指向堆空间中同一个对象,没有new 新的空间
System.out.println(p3.name);//Tom
p3.age=10;//age原本是1,因为再属性中给其赋值为1,不需要再默认初始化值,调用时没有改变时值为1
System.out.println(p1.age);//10
//形式二
Person p4=new Person();
p4=p1;//就算new了一个但是赋值后新创建的空间丢失,p1,p3共用一个空间
System.out.println(p4.name);//Tom
p4.age=10;
System.out.println(p1.age);//10
//两种形式都可以把p3或(p4)看作是p1的快捷方式
}
}
class Person{
//属性
String name;
int age=1;
boolean isFlag;
//方法
public void eat(){
System.out.println("人可以吃饭");
}
public void Sleep(){
System.out.println("人可以睡觉");
}
public void Talk(String language){
System.out.println("人可以说话"+language);
}
}