04《JAVA从零到壹》第四讲:类与对象基础
❤️作者主页:小虚竹
❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主🏆
❤️技术活,该赏
❤️点赞 👍 收藏 ⭐再看,养成习惯
什么是对象和什么是类
对象
万物皆对象,这些都是对象
对象的特征——属性
- 属性——对象具有的各种特征
- 每个对象的每个属性都拥有特定值
例如:布兰尼和朱丽叶的体重不一样
对象的特征——方法
- 方法——对象执行的操作
思考:法拉利对象的属性和方法有哪些?
属性
品牌:法拉利
型号:F360 Spider
颜色:黄色
价格:380万元
方法
发动
停止
加速
从对象抽象出“类”
抽取出下列对象的属性和方法的共同特征
上面是豪车,可以抽象出“轿车”这个类
下面是美女顾客,可以抽象出“顾客”这个类
类
- 类是模子,确定对象将会拥有的特征(属性)和行为(方法)
顾客类
轿车类
…
- 类是具有相同属性和行为的一组对象的集合
汽车类
形状类
动物类
…
类与对象的关系
- 类是具有共同属性和行为的对象的抽象
- 类可以定义为数据和方法的集合
- 类也称为模板,因为它们提供了对象的基本框架
创建对象及分配内存
创建对象
- 要获得一个类的对象需要两步:
- 你必须声明该类类型的一个变量,这个变量没有定义一个对象。实际上,它只是一个能够引用对象的简单变量。
- 该声明要创建一个对象的实际的物理拷贝,并把对于该对象的引用赋给该变量。
Person p1;
p1=new Person();
或
Person p1=new Person();
代码初体验:
public class Person {
private int age;
private String name;
private float height;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public static void main(String[] args) throws Exception {
Person p1 = new Person();
System.out.println(p1);
}
}
分配内存
- p1=new Person();
//分配内存;内存结构如下图:
分配内存通过 关键字 ”new+类的构造方法();” 语句实现
IDEA断点查看内存结构:
类的定义
- 类的严格定义及修饰符
[类的修饰符] class 类名称 [extends 父类名称][implements 接口名称列表]
{
变量定义及初始化;
方法定义及方法体;
}
-
类的修饰符:[public] [abstract | final] 缺省方式为 friendly
-
类由两部分组成: 类的声明部分 “class 类名”;类体 “{ … }”;
例: class Person{ //类体内容 }
- 注意点:
- 关键字 class 小写
- 类名需符合java标识符规定; 良好的编程规范一般 类名首字母大写; 类名要有意义(即见名识意)
- 类体中包含属性(变量)的定义及方法(函数)的定义
变量的定义
-
变量的定义及修饰符
- [变量修饰符] 变量数据类型 变量名1,变量名2[=变量初值]…;
- [public | protected | private ] [static] [final ] [transient ][volatile]
-
成员变量的类型可以是Java中任意的数据类型,包括简单类型,类,接口,数组。
-
类体中变量分三类:
- 实例成员变量;
- 类(静态)成员变量;
- 局部变量; 变量首字母一般小写;
-
实例成员变量简称实例变量
class Person{
String name;
int age;
//…}
- 类(静态)成员变量简称类变量或静态变量(共享性)
class Person{
static String classer;
}
- 局部变量
Class Person{
public void speak(){
String name;
}
}
成员变量和局部变量
-
类体中的变量分为两部分。变量定义部分所定义的变量称为类的成员变量,在方法体中定义的变量和方法的参数被称为局部变量。
-
成员变量和局部变量的共同之处
- 成员变量和局部变量的类型都可以是Java中的任何一种数据类型,包括基本类型:整型、浮点型、字符型;引用类型:数组类型、对象。
- 成员变量和局部变量的名字都必须符合标识符规定,名字如果使用拉丁字母,首写字母小写;如果多个单词组成,从第2个单词开始的其他单词的首写字母使用大写。
-
成员变量和局部变量的区别:成员变量在整个类内都有效,局部变量只在定义它的方法内有效。
变量的初始化
- 成员变量如果没有赋初值,则会自动初始化。
数据类型 | 初值 |
---|---|
boolean | false |
byte/short/int/long | 0 |
float | 0.0f |
double | 0.0d |
char | ‘\u0000’ |
对象类型 | null |
- 局部变量必须赋初值,否则会在引用的地方报错。请记住这个! 请记住这个! 请记住这个!
方法的定义
- 方法的定义及修饰字
-[方法修饰符] 返回类型 方法名称(参数1,参数2,…) [throws exceptionList]
{
…(statements;) //方法体:方法的内容
}
- [public | protected | private ] [static] [final | abstract] [native] [synchronized]
- 返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void。参数的类型可以是简单数据类型,也可以是引用数据类型(数组、类或接口),参数传递方式:简单数据类型是值传递,对象是引用传递。
方法分类
- 按返回值分:
- 有返回值
- 无返回值 //VOID
- 按参数分:
- 无参数
- 有参数(单个参数,多个参数) (了解形参与实参概念)
- 按范围或功能分:
- 实例方法;
- 类方法;
- 构造方法
//new+构造方法()创建过程中,对构造方法相应的属性赋值
注:
如果没写构造方法,系统会默认给你一个无参构造方法
如果你写了构造方法,系统回收那个无参构造方法
代码初体验:
有返回值/无返回值的方法
public class Person1 {
private int age=23;
public static String classer = "一年八班";
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//有返回值
private int sum(){
return 1 + 1;
}
//无返回值
private void speak(){
System.out.println("Hello!");
}
public static void main(String[] args) throws Exception {
Person1 p1 = new Person1();
System.out.println("sum方法返回值为:"+p1.sum());
p1.speak();
}
}
代码初体验:
无参数/有参数的方法
public class Person2 {
private int age=23;
public static String classer = "一年八班";
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//无参数
void speak(){
System.out.println("Hello!");
}
void eat(){
System.out.println("Hi!");
}
//有参数
int abs(int a){
if( a<0 ) {
return -a;
}
else {
return a;
}
}
int sum(int a , int b){
return a + b;
}
public static void main(String[] args) throws Exception {
Person2 p1 = new Person2();
p1.speak();
p1.eat();
System.out.println("abs方法有参数返回:"+p1.abs(-1));
System.out.println("sum方法有参数返回:"+p1.sum(1,2));
}
}
方法调用
上面两个代码示例,main方法里的,就是方法调用
- 定义方法时在方法声明部分的括号中定义的变量为形式参数(即形参);
- 调用时方法时需根据被方法的形参传入对应的实际参数(即实参)。
实例方法
- 类体中方法分:实例成员方法; 类(静态)成员方法; 构造方法;方法首字母一般小写。
- 实例成员方法简称实例方法
class Person{
void speak(){
System.out.println("一起学java");
}
}
类方法
- 类(静态)成员方法简称类方法或静态方法
class Person{
static void eat(){
System.out.println("吃饭了");
}
}
- 构造方法;构造方法名与类名相同,构造方法无返回值也不需void关键字
class Person{
Person(){
//一般是初始化操作.
}
}
构造方法
- 每当创建给定类的实例时就调用的方法
- 与类同名,但没有返回类型
- Java 为对象分配内存,初始化实例变量时调用构造方法
- 两种构造方法
- 参数化构造方法
- 隐式构造方法
隐式构造方法的示例:
public class Person3 {
private int age=23;
public static String classer = "一年八班";
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public static void main(String[] args) throws Exception {
//隐式构造方法
Person3 p1 ;
p1 = new Person3();
}
}
参数化构造方法的示例:
public class Person4 {
private int age=23;
public static String classer = "一年八班";
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person4(int age) {
this.age = age;
System.out.println("年龄是:"+age);
}
public static void main(String[] args) throws Exception {
//隐式构造方法
Person4 p1 ;
p1 = new Person4(18);
}
}
注意:
- 在类中只包括变量的定义和方法的定义
- 实例方法可以访问本类中的任何成员变量及任何成员方法; 类方法只能访问本类中的类成员变量及类成员方法;
方法重载
如图所示,方法重载就是要符合这两个条件
注意:方法返回值的类型不能用来区分重载的方法。不能通过两个方法的返回值的类型来区分它们。这是因为当你调用一个方法时,返回值的类型是不显示的。
代码初体验:
public class Person5 {
int sum(int a , int b){
return a + b;
}
int sum(int a , int b,int c){
return a + b+c;
}
}
错误示范:
public class Person5 {
int sum(int a , int b){
return a + b;
}
void sum(int a , int b){
return a + b;
}
int sum(int a , int b,int c){
return a + b+c;
}
}
总结
- 类与对象相关概念及关系
- 创建对象及分配内存
- 类的定义
- 变量的定义
- 方法的定义
- 方法重载
- 点赞
- 收藏
- 关注作者
评论(0)