全篇纲领:Java一切皆对象!
类和对象是什么?
比如人是一个对象,汽车是一个对象,而类则是可以用来描述这个对象的特征!
例如,人有眼睛,鼻子,年龄这些属性,吃饭,喝水这些动作!
所以类有两个主要组成部分
1.成员变量(即属性)
2.成员方法(即行为)!
例如我们创建一个人的类以后,不同人只是属性的内容不同,但是拥有的属性和行为都基本一样。
但是有一个点我们要注意,就是每个类里面都可以有一个main方法,当你鼠标右键进行运行相应类的时候就可以运行main方法!
1.
一般一个文件当中只定义一个类
2. main
方法所在的类一般要使用
public
修饰
(
注意:
Eclipse
默认会在
public
修饰的类中找
main
方法
)
3. public
修饰的类必须要和文件名相同
4.
不要轻易去修改
public
修饰的类的名称,如果要修改,通过开发工具修改。
对象实例化
对象实例化就是new出来一个对象,相当于类就是一个蓝图,而new则是实实在在的创建出来的实际物体!
每个引用则是指向对应的类!
this引用(对当前对象的引用)
首先我们思考一个问题!
1.
形参名不小心与成员变量名相同
2.不同对象调用的时候怎么进行区分?
每个类都有一个隐藏的this引用!
this
引用指向当前对象
(
成员方法运行时调用该成员方法的对象
)
,在成员方法中所有成员变量的操作,都是通过该
引用去访问
。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
总结一下
1.this
的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
2. this
只能在
"
成员方法
"
中使用
3.
在
"
成员方法
"
中,
this
只能引用当前对象,不能再引用其他对象
4. this
是
“
成员方法
”
第一个隐藏的参数,编译器会自动传递,在成员方法执行时,编译器会负责将调用成员方法 对象的引用传递给该成员方法,this
负责来接收
然后我们先来谈第一个特殊的成员函数
构造函数
函数名与类名相同,没有返回值,可以函数重载!
如果没有写构造函数,会有默认的无参构造函数!
(成员变量会有默认值,引用变量会是null,普通变量会是0,boolean会是false)
大家可能会疑问那什么时候调用构造函数呢?
new会自动开辟空间和调用对应的构造函数!
然后我们来学习面向对象语言的三大特性之一——封装
首先我们讲一下访问修饰限定符!
Java
中主要通过类和访问权限来实现封装:
类可以将数据以及封装数据的方法结合在一起
,更符合人类对事物的认 知,而访问权限用来控制方法或者字段能否直接在类外使用
。
Java
中提供了四种访问限定符:
public
:可以理解为一个人的外貌特
default:
对于自己家族中
(
同一个包中
private
:只有自己知道,其他人都不知道
protected
主要是用在继承中,继承部分详细介绍
default
权限指:什么都不写时的默认权限
访问权限除了可以限定类中成员的可见性,也可以控制类的可见性
然后我们在这个地方也深入了解一下Java中包的概念!
在面向对象体系中,提出了一个软件包的概念,即:
为了更好的管理类,把多个类收集在一起成为一组,称为软件
包
。有点类似于目录。比如:为了更好的管理电脑中的歌曲,一种好的方式就是将相同属性的歌曲放在相同文件 下,也可以对某个文件夹下的音乐进行更详细的分类。
在
Java
中也引入了包,
包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式
,比如:一 个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在
不同的包中即可
。
Java
中已经提供了很多现成的类供我们使用
.
例如
Date
类:可以使用
java.util.Date
导入
java.util
这个包中的
Date 类
但是这种写法比较麻烦一些
,
可以
使用
import
语句导入包(本质就是具体到具体文件下的类)
如果需要使用
java.util
中的其他类
,
可以使用
import java.util.*(*是通配符,代表所有类)
可以使用
import static
导入包中静态的方法和字段。
大家可能会疑问,能不能自己创建包呢?
当然可以!(包名一般推荐小写)
然后创建包以后再在包下面创建类,以后就可以用这个包了!
然后我们再说一下
static
成员
static
修饰成员变量(不需要具体的类实例就可以访问和修改)
static
修饰的成员变量,称为静态成员变量
,静态成员变量最大的特性:
不属于某个具体的对象,是所有对象所共
享的
。
【静态成员变量特性】
1.
不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
2.
既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
3.
类变量存储在方法区当中
4.
生命周期伴随类的一生
(
即:随类的加载而创建,随类的卸载而销毁
)
5.static只能修饰成员变量,不能修饰局部变量!(Java和c不同)
代码块
使用
{}
定义的一段代码称为代码块
。
根据代码块定义的位置以及关键字,又可分为以下四种:
普通代码块
构造块
静态块
同步代码块(后续讲解多线程部分再谈)
普通代码块:定义在方法中的代码块
构造代码块
构造块:定义在类中的代码块
(
不加修饰符
)
。也叫:
实例代码块
。
构造代码块一般用于初始化实例成员变量
静态代码块
使用
static
定义的代码块称为静态代码块。
一般用于初始化静态成员变量
静态代码块不管生成多少个对象,其只会执行一次
静态成员变量是类的属性,因此是在
JVM
加载类时开辟空间并初始化的
如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行
(
合并
)
实例代码块只有在创建对象时才会执行