使用new关键字必须要有构造器

默认有一个无参构造 有参覆盖无参

一旦有了有参构造 无参构造必须显式定义

instanceof 二元运算符 判断左边的对象是否为右边的实例 返回布尔类型的数据

可以判断继承中子类的实例是否 为 父类的实现 父子关系

boolean result = object instanceof class

狂神说 Java_构造方法


异常

狂神说 Java_面向对象_02

狂神说 Java_面向对象_03

狂神说 Java_面向对象_04

try

catch 捕获

throw 抛出

throws

finally

int a=1;
int b=0;
try{
if(b==0){
throw new ArithmeticException();//主动抛出异常
}
sout(a/b);
}catch (ArithemetucException e){
sout("b!=0");//打印栈信息
}finally{ //处理善后工作
sout("结束了");
}



throws 在方法中执行

如果捕获多个异常 catch 要从小到大

快捷键 选中代码 ctrl + alt + t

自定义异常
public class MyException entends Exception{
//传递数字大于10 异常

}
方法重载overloading mothod:

在同一个类中,方法名相同,参数列表不同,返回值不能作为重载的条件

数组定义的四种方式

一、使用默认的初始值来初始化数组中的每一个元素

语法:数组元素类型 [ ] 数组名= new 数组元素类型 [长度];

int [] scores=new int [3];

二、先声明,然后再赋予的初始值

int [] scores;

scores = new int[3];

三、先声明,然再使用指定的值初始化

int [] scores = new int[]{56,57,58};

四、将第三种方法简化为(使用数组常量给数组进行赋值)

int [] scores ={56,58,52};

数组的遍历
scores.length  
一种遍历方法 但是不能控制下标 只能输出 不能控制下标
//forearch循环 JDK1.5之后新增的特性
for (int x:scores){
System.out.println(x);

}

JDK1.5 可变参数

可变参数只能是参数列表中的最后一个

可变参数作为数组使用

public static void main(int... x){
int len=x.length;
for(int i=0;i<len;i++){
System.out.println(x[i]);
}
}
//调用
print2(59,75,65,85,100); //随便传值
数组异常

java.lang.NullPointerException 当一个变量为null是,我们去调用了该变量的属性和方法

java.lang.ArrayIndexOutOfBoundsException 下标越界

数组的内存结构

数组是引用类型,会存放在堆内存中。

狂神说 Java_构造方法_05

面向对象基本概念

面向过程:以步骤为单位,一步一步完成某一一个具体事情 面向对象:以对象为单位,通过调度组合不同的对象来完成某一个事 情

一、什么事面向对象

1、面向对象是一种编程思想

2、面向对象是一种思考问题的思维方式

二、建立面向对象思维方式

1、先整体 再局部

2、先抽象 再具体

3、能做什么,再做什么

三、如何让学习面向对象

1、掌握一门面向对象语言的语法 Java纯面向对象

2、熟悉面向对象的设计原则

3、熟悉面向对象的设计模式 十几种常用的

类和对象

什么是类? 1、类是:分类、类别。 2、通过分类,我们可以区别不同的事物种类,在日常生活当中,我们常常这样做。 3、所以,类是一组具有相同特性(属性)与行为(方法)的事物集合。

类与对象的关系: 1、类表示一个共性的产物,是一个综合的特征,而对象,是-一个个性的产物,是一个个体的特征。 2、类由属性和方法组成: 属性:就相当于一个个的特征 方法:就相当于人的一个个的行为,例如:说话、吃饭、唱歌、睡觉

class 类名称{
属性名称;
返回值 方法名称(){}
}

对象的定义:

一个想要真正的操作,则必须依靠对象,对象的定义格式:

类名称 对象名称 = new 类名称();

如果想要访问类中的属性方法(方法的定义),以下的格式

访问类中的属性

对象.属性;

调用类中的方法:

对象.方法();
public class Test1{

}
对象内存分析

狂神说 Java_构造方法_06




当堆内存的对象没有被任何一个栈中的任何引用所指向,那么就会被虚拟机GC垃圾回收程序释放

字符串时引用类型变量,不是基本数据类型变量

类与对象小结

(1) new关键字:表示向内存申请空间,也表示实例化一个对象,创建一个对象。 (2) 一个对象在内存中的大小,由该对象的所有属性所占的内存大小的总和。引用类型变量在32位系统上占4个 字节,在64位系统上占8个字节。加上而外的对象隐性数据所占的大小。 (3)相同的类型才可以赋值 (4)不同的引用,指向同一个对象,任何一个引用改变对象的值,其它引用都会反映出来。 (5)编程时要注意的问题,在确定不使用对象时,要尽早释放对象:引用=null (6)当一个堆中的对象没有被任何引用变量所指向时,该对象会被JVM的GC程序认为是垃圾对象,从而被回收。

封装性

一、 封装性的概念 1、封装性是面向对象思想的三大特征之一。 2、封装就是隐藏实现细节,仅对外提供访问接口。I 封装有: 属性的封装、方法的封装、类的封装、组件的封装、模块化封装、系统级封装... 二、封装的好处 1、模块化 2、信息隐藏 3、代码重用 4、插件化易于调试 5、具有安全性 封装缺点:会影响执行效率

如果没有封装,那么在本类之外创建后,可以直接访问属性

private 关键字:访问权限修饰符, 就是封装,只能在本类中访问

public 表示公有的 ,想要在类外部访问私有属性,我们需要提供公共的方法

​this.name​​ 当前对象的name

对外提供一个为name属性设值的方法

通常在一个类中属性都私有化,对外提供getter setter 方法

成员变量在类中定义,局部变量在方法中定义

狂神说 Java_面向对象_07

成员变量和局部变量 1、在类中的位置不同 成员变量:在类中定义 局部变量:在方法中定义或者方法的参数 2、在内存中的位置不同 成员变量:在堆内存(成员变量属于对象,对象进堆内存) 局部变量:在栈内存(局部变量属于方法,方法进栈内存) 3、生命周期不同 成员变量:随着对象的创建而存在,随着对象的销毁而消失 局部变量:隨着方法的调用而存在,随着方法的调用完毕而消失 4、初始化值不同 成员变量:有默认初始化值,引用类型默认为null 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用 注意: 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

构造方法

什么是构造方法 1、构造方法就是类构造对象时调用的方法,用于对象的初始化工作 2、构造方法是实例化一-个 类的对象时,也就是new的时候,最先调用的方法。 构造方法的定义: 构造方法是在类中定义的,构造方法的定义格式:方法名称与类名称相同,无返回值类型的声明。 对象的实例化语法: Dog dog = new Dog); //new Dog后面有个括号,带括号表示调用了方法,此时调用的方法就是构造方法了

构造方法重载

无参构造方法: 默认构造方法

​public Dog(){}​

带一个参数的构造方法: ​​public Dog(String name){​​​ ​​​this.name = name;​​ 带多个参数的构造方法:

构造方法小结

(1)构造方法名称与类名相同,没有返回值声明(包括void) (2)构造方法用于初始化数据(属性) (3)每一一个类中都会有- -个默认的无参的构造方法 (4)如果类中有显示的构造方法,那么默认构造方法将无效 (5)如果有显示的构造方法,还想保留默认构造方法,需要显示的写出来。 (6)构造方法可以有多个,但参数不一样,称为构造方法的重载 (7)在构造方法中调用另- -个构造方法,使用tis<..),该句代码必须在第一句工 (8)构造方法之间的调用,必须要有出口。 (9)给对象初始化数据可以使用构造方法或setter方法,通常情况下,两者都会保留。 (10)一个好的编程习惯是要保留默认的构造方法。(为了方便一些框架代码使用反射来创建对象) (11) private Dog(){},构造方法私有化,当我们的需求是为了保正该类只有一个对象时。 什么时候一个类只需要一个对象? 比如,工具类(没有属性的类,只有行为)并且该工具对象被频繁使用。权衡只用一一个对象与产生多个对象的内存使用,来确定该类是否要定义为只需要一-个对象。

this关键字

在Java基础中,this关键字 是-一个最重要的概念。使用this关键字可以完成以下的操作: 调用类中的属性 调用类中的方法或构造方法 表示当前对象:在方法被调用的过程中哪个对象调用了方法,在方法内的this就表示谁

在方法中使用his酒用类中的其它方法或属性,this可以省略,this前 面可以使用当前的类名.this

值传递与引用传递

基本数据类型都是值传递


引用传递


String类型传递 字符串就是一个对象 可以理解为两个对象的出现 改变的时地址


this


对象的一对一关系 P45 ????????
static 关键字


1、静态变量或方法不属于对象,依赖类

2、静态变量时全局变量,生命周期从类被加载后一直到程序结束

3、静态变量只存有一份,在静态方法区中存储

4、静态变量是本类所有对象共享一份

5、建议不要使用对象名去调用静态数据,直接使用类名调用

6、static修饰一个方法,那么该方法属于类,不属于对象,直接用类名调用

7、静态方法不能访问非静态属性和方法,只能访问静态的

static关键字的作用:

1、使用static关键字修饰一个属性 声明为static的变量实质上就是全局变量

2、使用static关键字修饰一个方法 通常,在一个类中定义- -个方法为static,那就是说,无需本类的对象即可调用此方法 3、使用static关键字修饰一-个类( 内部类)


声明为static的方法有以下几条限制: 它们仅能调用其他的static方法。 它们只能访问static数据。 它们不能以任何方式引用this或super. 什么时候使用static? 所有对象共同的属性或方法,那么我们应该定义为静态的。

狂神说 Java_构造方法_08

main方法分析:

主方法:
public static void main(String[] args){
//代码块
}
public:公有的,最大的访问权限
static:静态的,无需创建对象
void::表示没有返回值,无需向JVM返回结果
main:方法名,固定的方法名
String[] args:表示参数为字符串数组,可以在调用方法时传入参数
代码块

1、普通代码块,在方法中写的代码块

2、构造块,是在类中定义的代码块,在创建对象时被调用优于构造方法执行

3、在类中使用static声明的代码块称为 静态代码块

在我们第一次使用的时候被调用(创建对象),只会执行一次,由于构造块执行

在项目开发中,通常会使用静态代码块来初始化只调用一次的数据

比如:读取配置

4、同步代码块(多线程中讲解)

重点使用静态代码块 普通代码块 同步代码块 构造代码块

单例设计模式

单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1、构造方法私有化 2、声明一个本类对象 3、给外部提供--个静态方法获取对象实例 两种实现方式: 1、饿汉式 2、懒汉式