目录

1 面向对象与面向过程

2 类的具体语法

3 定义一个类

4 类的实例化

5 this 引用

5.1 为什么要有 this 

5.2 this 作用

6 初始化对象

6.1 默认初始化 

6.2 就地初始化

6.3 调用构造方法初始化

6.3.1 构造方法概念

6.3.2 如何调用构造方法

6.3.3 构造方法的重载

6.3.4 用 this 调用其它构造方法

7 封装

8 包

8.1 包的概念

8.2 找到文件包

8.3 导入包中的类 

8.4 自定义包

8.5 包的访问权限控制

9 static 成员

10 代码块

10.1 普通代码块

10.2 构造代码块(实例代码块)

10.3 静态代码块

11 对象的打印


1 面向对象与面向过程


面向过程

java 通过Java new对象初始化值_java


面向对象(oop:面向对象的语言)

java 通过Java new对象初始化值_实例化_02

面向对象程序设计关注的是对象,而对象是现实生活中的实体

类是用来对一个实体(对象)来进行描述的 


2 类的具体语法


java 通过Java new对象初始化值_实例化_03

class 为定义类的关键字,ClassName 为类的名字,{} 中为类的主体


java 通过Java new对象初始化值_实例化_04


类名注意采用大驼峰定义

大驼峰:每一个单词首字母大写

小驼峰:第一个单词首字母小写,之后每一个单词首字母大写


成员前统一加 public(访问修饰限定符)


java 通过Java new对象初始化值_java_05

java 通过Java new对象初始化值_java_06


3 定义一个类


java 通过Java new对象初始化值_开发语言_07

   

java 通过Java new对象初始化值_实例化_08


java 通过Java new对象初始化值_构造方法_09


在一个 .java 文件中可以有多个类,但只能有一个 public 类,类名必须和方法名一样


java 通过Java new对象初始化值_实例化_10

字节码文件在 out 目录底下,跟类是对应关系,跟文件不是对应关系


建议一个 .java 文件当中只定义一个类,方便进行管理

java 通过Java new对象初始化值_开发语言_11


main 方法所在的类一般要使用 public 修饰(不是绝对的)


不要轻易去修改 public 修饰的类的名称,如果要修改,通过工具修改

java 通过Java new对象初始化值_构造方法_12


如果一个文件有多个类,用工具修改 public 修饰的类名,文件名改了,但里面的 public 修饰的类名不会修改

java 通过Java new对象初始化值_java_13


4 类的实例化


定义了一个类,就相当于在计算机中定义了一种新的类型,与 int ,double 类似,只不过 int 和double 是 Java 语言自带的内置类型,而类是用户自定义了一个新的类型


用类类型创建对象的过程,称为类的实例化,在 java 中采用 new 关键字,配合类名来实例化对象


java 通过Java new对象初始化值_初始化_14

java 通过Java new对象初始化值_实例化_15


通过 new 关键字实例化对象可以实例化多个对象

实例化出的对象才能真正存储对象,占用计算机内存空间


java 通过Java new对象初始化值_java_16

java 通过Java new对象初始化值_构造方法_17


java 通过Java new对象初始化值_构造方法_18

方法属于指令,一般存在方法区


通过对象调用对象的方法(使用 . 来访问对象中的属性和方法)

java 通过Java new对象初始化值_实例化_19


java 通过Java new对象初始化值_开发语言_20

        

java 通过Java new对象初始化值_构造方法_21

java 通过Java new对象初始化值_java_22


任何变量在使用的时候一定是已经赋值了的


不仅通过 new 关键字实例化对象,也为对象当中的值进行赋值,也通过对象去调用了对象的方法,这个过程就是实例化对象


静态成员变量不在对象当中


实例化对象就像现实生活中设计的模型,通过模型落地产生多个房子

java 通过Java new对象初始化值_实例化_23


其运行起来就是一个程序

在电脑下方任务栏点击右键,点击任务管理器,可以看见正在运行的程序


5 this 引用


5.1 为什么要有 this 


1. 进入方法当中,因为有多个对象,无法判断是哪个对象调用了该方法,从而不知道对谁赋值,而this 可以指向当前对象

java 通过Java new对象初始化值_开发语言_24


this 是“成员方法”第一个隐藏的参数

java 通过Java new对象初始化值_java_25

由于编译器将隐藏参数还原,因此平时没用 this 也是正确的


2. 形参名不小心与成员变量名相同

于是局部变量优先就给形参赋值了,而实参并没有进行赋值,打印出来的成员变量没有发生改变,而是默认值

java 通过Java new对象初始化值_java_26

java 通过Java new对象初始化值_开发语言_27


5.2 this 作用


加上 this 后就可以给到当前对象的变量,而不是局部变量形参

java 通过Java new对象初始化值_实例化_28


因此尽量使用 this,不管成员变量一不一样,哪怕不加是对的也习惯性加上,不会出错

java 通过Java new对象初始化值_实例化_29

java 通过Java new对象初始化值_初始化_30


总结:

this 代表当前对象的引用

谁调用这个方法那么 this 就是谁


this 只能在"成员方法"中使用

在"成员方法"中,this 只能引用当前对象,不能再引用其他对象


this 作用

java 通过Java new对象初始化值_初始化_31


6 初始化对象


6.1 默认初始化 


java 通过Java new对象初始化值_初始化_32

java 通过Java new对象初始化值_java_33


6.2 就地初始化

(一般不建议这么写) 


 

java 通过Java new对象初始化值_构造方法_34


 初始化后可以再进行初始化,相当于走完上一步后,重新进行了一次赋值

java 通过Java new对象初始化值_初始化_35


就地初始化实际上就是给一个默认值,不写的话就是默认值,写上就是自己的


6.3 调用构造方法初始化


6.3.1 构造方法概念

构造方法首先它是一个方法,一般情况下使用 public 修饰

java 通过Java new对象初始化值_构造方法_36


没有返回值,void 也不行,方法名和类一样

java 通过Java new对象初始化值_构造方法_37

java 通过Java new对象初始化值_构造方法_38


构造方法初始化对象当中的成员变量

java 通过Java new对象初始化值_java_39


6.3.2 如何调用构造方法

java 通过Java new对象初始化值_实例化_40

java 通过Java new对象初始化值_构造方法_41

java 通过Java new对象初始化值_构造方法_42

java 通过Java new对象初始化值_实例化_43


实例化对象后构造方法自动被调用了

java 通过Java new对象初始化值_java_44

java 通过Java new对象初始化值_构造方法_45


java 通过Java new对象初始化值_java_46


java 通过Java new对象初始化值_初始化_47

java 通过Java new对象初始化值_开发语言_48


6.3.3 构造方法的重载

java 通过Java new对象初始化值_实例化_49


java 通过Java new对象初始化值_构造方法_50


可以通过传参的方式对成员变量进行初始化

java 通过Java new对象初始化值_开发语言_51


当把不带参数构造方法进行屏蔽后程序报错

java 通过Java new对象初始化值_java_52

救急不救穷:只有一个构造方法都没有的情况下,才会默认给一个不带参数的构造方法,一旦写了任何构造方法,编译器就不会再提供任何一个构造方法了


构造方法 idea 快捷键

如果有多个参数,构造方法不用一个一个写,可以用 idea 快捷键


java 通过Java new对象初始化值_初始化_53

java 通过Java new对象初始化值_初始化_54

java 通过Java new对象初始化值_java_55


Ctrl 键选择两个字段操作完后就会默认生成一个构造方法

java 通过Java new对象初始化值_开发语言_56


也可一个一个字段生成构造方法 

java 通过Java new对象初始化值_开发语言_57


构造方法在整个对象周期只被调用一次,也就是只有在实例化的时候才会被调用

构造方法的作用就是对对象中成员进行初始化,并不负责给对象开辟空间


6.3.4 用 this 调用其它构造方法

这个语法只能出现在构造方法中,代表调用当前类当中的其它构造方法,不能自己调用自己,这样调用也能帮助初始化

java 通过Java new对象初始化值_实例化_58


这个语法只能出现在当前构造方法的第一行

java 通过Java new对象初始化值_实例化_59


总结:this 一共有三个作用

java 通过Java new对象初始化值_开发语言_60


this 代表当前对象的引用,引用代表地址,在调用合适的构造方法可以用 this,因为 this 代表当前对象的内存也就是地址

java 通过Java new对象初始化值_初始化_61

在构造方法里面用到 this 了,构造方法走完对象才真正产生,说 this 代表当前对象是有歧义的

java 通过Java new对象初始化值_实例化_62


java 通过Java new对象初始化值_构造方法_63


在三个参数的构造方法里面去调用不带参数的构造方法是不行的


6.3.5 局部变量必须初始化衍生

第一种写法 

java 通过Java new对象初始化值_构造方法_64


另一种写法

java 通过Java new对象初始化值_构造方法_65


java 通过Java new对象初始化值_开发语言_66

相当于又 new 了一次,而第一种只实例化了一个对象,通过引用进行调用的


... 可变参数 

java 通过Java new对象初始化值_初始化_67


java 通过Java new对象初始化值_构造方法_68


7 封装


java 通过Java new对象初始化值_初始化_69

而类和对象阶段主要研究的就是封装特性


封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互

封装:从语法上来说就是被 private 修饰的成员变量或者方法只能在当前类当中使用


将 idea 中文件放右边操作方法

java 通过Java new对象初始化值_开发语言_70


封装前在类外可以传参

java 通过Java new对象初始化值_初始化_71

当成员变量 name 被 private 修饰以后,相当于封装起来了,在类外看不到

java 通过Java new对象初始化值_开发语言_72


可以换一种方式对 name 初始化

java 通过Java new对象初始化值_初始化_73


private 也可以修饰构造方法,但此时实例化对象赋值时会报错

因为实例化时调用了带两个参数的构造方法,而构造方法被 private 修饰了,意味着当前构造方法只能在类内调用,类外已经拿不到了

 

java 通过Java new对象初始化值_开发语言_74


没有构造方法对封装的成员变量进行赋值

java 通过Java new对象初始化值_实例化_75

java 通过Java new对象初始化值_开发语言_76

调用了不带参数的构造方法脏三,相当于只把一些细节进行了隐藏


对封装的成员提供公开的 get、set 方法来帮助获取或修改封装的成员


“get” 方法用于从对象中获取属性值,而 “set” 方法用于向对象设置属性值

“get” 方法提供一个只读的访问方式,允许外部代码读取属性的值

“set” 方法提供一个写入的访问方式,允许外部代码修改属性的值

“get” 方法通常具有返回值,返回相应属性的当前值

“set” 方法通常没有返回值,或者返回类型为 “void”


get、set 方法快捷键 


java 通过Java new对象初始化值_java_77

java 通过Java new对象初始化值_开发语言_78

java 通过Java new对象初始化值_开发语言_79


也可以只生成 get 或 set 方法

java 通过Java new对象初始化值_java_80


8 包


8.1 包的概念


 

java 通过Java new对象初始化值_开发语言_81

java 通过Java new对象初始化值_开发语言_82


包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式

在同一个工程中允许存在相同名称的类,只要处在不同的包中即可


8.2 找到文件包


java 通过Java new对象初始化值_构造方法_83

java 通过Java new对象初始化值_构造方法_84

java 通过Java new对象初始化值_构造方法_85

java 通过Java new对象初始化值_java_86

java 通过Java new对象初始化值_初始化_87

java 通过Java new对象初始化值_初始化_88

java 通过Java new对象初始化值_实例化_89


要找到相关包,也可以在 jdk 帮助手册当中找

java 通过Java new对象初始化值_初始化_90


java 通过Java new对象初始化值_开发语言_91


java 通过Java new对象初始化值_构造方法_92


8.3 导入包中的类 

导入的包必须具体到某一个类上或者通配符


例如 Date 类:可以使用 java.util.Date 导入 java.util 这个包中的 Date 类

java 通过Java new对象初始化值_初始化_93


但是这种写法比较麻烦一些, 可以使用 import 语句导入包中的类

也可以直接选好以后点回车会自动导入进行使用

java 通过Java new对象初始化值_构造方法_94


如果需要使用 java.util 中的其他类,可以使用 import java.util.*

* 代表通配符

java 通过Java new对象初始化值_实例化_95

但是我们更建议显式的指定要导入的类名. 否则还是容易出现冲突的情况


当同时出现 util. 和 sql. ,里面都有 Date,使用 Date 时出现冲突

java 通过Java new对象初始化值_java_96


否则只能这样写

 

java 通过Java new对象初始化值_初始化_97


这种写法只能留一个

java 通过Java new对象初始化值_构造方法_98


可以 sql. 点进去找其它方法使用

java 通过Java new对象初始化值_实例化_99


所以不会出现两个 Date,也不会出现两个通配符,具体用哪个就导入哪个

具体导入包下面的某个类:

java 通过Java new对象初始化值_构造方法_100


java 通过Java new对象初始化值_实例化_101


8.4 自定义包


java 通过Java new对象初始化值_初始化_102


包名一般小写,采用公司域名的跌倒形式,比如说公司域名 www.baidu.com 跌倒写为com.baidu.www

java 通过Java new对象初始化值_开发语言_103


java 通过Java new对象初始化值_构造方法_104


自定义完出现三个包

java 通过Java new对象初始化值_构造方法_105


文件名处右键点击 Open in 打开包所在目录

java 通过Java new对象初始化值_实例化_106

java 通过Java new对象初始化值_构造方法_107

java 通过Java new对象初始化值_开发语言_108

java 通过Java new对象初始化值_开发语言_109

所以此时包建立后产生三个文件夹 


在包底下放一个类,可以在三个包任意一个中放入

java 通过Java new对象初始化值_初始化_110


在建好的类当中最上面会有一个 package 声明

java 通过Java new对象初始化值_java_111


如果一个类没有 package 语句, 则该类被放到一个默认包中

idea 当中 src 是一个默认的包

idea 会通过读到 src 之后把 src 的代码来进行运行


8.5 包的访问权限控制


java 通过Java new对象初始化值_实例化_112

public 不管是不是在一个包它都能进行调用

private 只能在当前类用

default 默认的,也叫做包访问权限同一个包中同一个类或者不同类都能访问,不同包的子类非子类都不可以

定义类的时候成员变量没有任何访问修饰限定符就默认 default 包访问权限

protected 在不同包的子类也可以访问,不同包的非子类不能访问


常见的包

1. java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。

2. java.lang.reflect:java 反射编程包;

3. java.net:进行网络编程开发包。

4. java.sql:进行数据库开发的支持包。

5. java.util:是java提供的工具程序包。(集合类等) 非常重要

6. java.io:I/O编程开发包。


9 static 成员


当同学都是一个班的,班级这个成员变量可以用 static 修饰

java 通过Java new对象初始化值_初始化_113


被 static 修饰的班级变量就不属于对象了,三个对象里面就只出现了姓名、年龄没有班级

java 通过Java new对象初始化值_构造方法_114

输出的时候都是有班级的,但这个班级只有一份 


1. 静态的成员变量不属于某个具体对象,是类的属性,所有对象共享的

    不存储在某个对象空间中

2. 静态成员变量既可以通过对象访问,也可以通过类名访问,一般更推荐使用类名访问             静态方法同样可以直接通过类名访问

3. 静态成员实际上是在方法区当中存储的

4. 静态成员伴随类的生命周期,随类的加载而创建,随类的卸载而销毁

5. 静态方法中不能调用非静态成员变量或者非静态的成员方法

    因为非静态方法有 this 参数,在静态方法中调用时候无法传递 this 引用

    静态方法当中不包含 this

java 通过Java new对象初始化值_实例化_115

6. 静态成员方法无法重写,不能用来实现多态

7. 静态成员变量的初始化分为就地初始化和静态代码块初始化


java 通过Java new对象初始化值_初始化_116

static 可以修饰成员变量,不能修饰局部变量,其属于类不属于对象

调用静态方法不需要创建实例对象


10 代码块

java 通过Java new对象初始化值_java_117


10.1 普通代码块


java 通过Java new对象初始化值_初始化_118


10.2 构造代码块(实例代码块)


java 通过Java new对象初始化值_初始化_119


10.3 静态代码块


静态代码块定义在类内

它不能出现在方法体或者代码块内

在加载类时会先执行静态代码块,且只执行一次,如果有多个静态代码块则按照先后顺序执行


java 通过Java new对象初始化值_开发语言_120


静态代码块一般类在加载的时候就被调用了

java 通过Java new对象初始化值_实例化_121


java 通过Java new对象初始化值_开发语言_122


11 对象的打印


一种是自己写个打印方法调用

java 通过Java new对象初始化值_实例化_123


一种是直接打印

java 通过Java new对象初始化值_构造方法_124


但直接打印,打印出来的是地址

java 通过Java new对象初始化值_开发语言_125


println 源码

 

java 通过Java new对象初始化值_开发语言_126


想要默认打印对象中的属性重写 toString 方法即可

java 通过Java new对象初始化值_开发语言_127

java 通过Java new对象初始化值_初始化_128

java 通过Java new对象初始化值_开发语言_129


println 原来是调用源码的 toString,重写 toString 后调用自己的

java 通过Java new对象初始化值_初始化_130