Java 类和对象(一)

目录

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 面向对象与面向过程


面向过程



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


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

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


2 类的具体语法


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



类名注意采用大驼峰定义

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

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


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



3 定义一个类


   



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


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


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


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


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


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


4 类的实例化


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


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



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

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



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


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


        


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


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


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


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


其运行起来就是一个程序

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


5 this 引用


5.1 为什么要有 this 


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


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

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


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

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


5.2 this 作用


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


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


总结:

this 代表当前对象的引用

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


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

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


this 作用


6 初始化对象


6.1 默认初始化 



6.2 就地初始化


(一般不建议这么写) 


 


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


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


6.3 调用构造方法初始化


6.3.1 构造方法概念

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


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


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


6.3.2 如何调用构造方法


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




6.3.3 构造方法的重载



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


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

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


构造方法 idea 快捷键


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



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


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


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


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


6.3.4 用 this 调用其它构造方法

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


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


总结:this 一共有三个作用


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

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



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


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

第一种写法 


另一种写法


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


... 可变参数 



7 封装


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


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


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


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


封装前在类外可以传参

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


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


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

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

 


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

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


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


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

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

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

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

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


get、set 方法快捷键 



也可以只生成 get 或 set 方法


8 包


8.1 包的概念


 


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


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


8.2 找到文件包



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




8.3 导入包中的类 


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


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


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

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


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

* 代表通配符

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


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


否则只能这样写

 


这种写法只能留一个  


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


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

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



8.4 自定义包



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



自定义完出现三个包


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

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


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


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


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

idea 当中 src 是一个默认的包

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


8.5 包的访问权限控制


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 修饰


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

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


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

    不存储在某个对象空间中


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


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


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


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

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

    静态方法当中不包含 this



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


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


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

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


10 代码块



10.1 普通代码块



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



10.3 静态代码块


静态代码块定义在类内

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

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



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



11 对象的打印


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


一种是直接打印


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


println 源码

 


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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值