从c++到Java,关于Java面向对象基础的学习(二)
2023-09-27 14:19:56 时间
继续补充完成java面向基础对象学习的第二部分,本章内容主要包括构造器和this以及javabean和封装等思想,感觉仍然需要更多练习才能帮助熟练java面向对象基础部分
目录
一、构造器
构造器的作用
用于初始化一个类的对象,并返回对象的地址
Car c = new Car ();
构造器的定义格式
修饰符 类名 ( 形参列表 ){...}
public class Car {
...// 无参数构造器public Car (){...}// 有参数构造器public Car ( String n, String b){...}}
初始化对象的格式
类型 变量名称 = new 构造器;Car c = new Car ();
构造器的分类
类型 变量名称 = new 构造器;
(1)无参数构造器(默认存在的):初始化的对象时,成员变量的数据均采用默认值。
(2)有参数构造器:在初始化对象的时候,同时可以为对象进行赋值。
注意事项
任何类定义出来,默认就自带了无参数构造器,写不写都有。
一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了。
具体案例
调用无参数构造器
调用有参数构造器
二、this关键字
this关键字是什么
代表当前对象的地址
上图中this表示与 c 的地址一样,都指向new Car(), 如果调用了c.run(),那么run里面的c也指向new Car()
this关键字
作用:出现在成员方法、构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法
在写代码的时候如果用以下的代码去写往往是被诟病的,因为n,和p没有实际意义,
public class Car {
String name;
double price;
public Car(String n , double b){
name = n;
price = b;
}
}
如果用了this关键字就可以正确的表示,表示为上面第一个String name里面的name赋值和double price 里面的price赋值
public class Car {
String name;
double price;
public Car(String name , double price){
this.name = name;
this.price = price;
}
}
样例
this在成员方法中的用法
错误的表示
public class Car {String name ;double price ;public void goWith ( String name){System . out .println(name + " 正在和 " + name + " 一起比赛!! " );}}
正确的表示
public class Car {String name ;double price ;public void goWith ( String name){System . out .println( this .name + " 正在和 " + name + " 一起比赛!! " );}}
例子
三、封装
面向对象的三大特征:
封装,继承,多态
。
什么是封装? 隐藏实现细节,暴露出合适的访问方式。(
合理隐藏、合理暴露0
)
封装的原则:
对象代表什么,就得到对应的数据并提供数据对应的行为
封装的实现步骤
一般对成员变量使用private(私有)关键字修饰进行隐藏,private修饰后该成员变量就只能在当前类中访问。
提供public修饰的公开的getter、setter方法暴露其取值和赋值。
在赋值给一个学生年龄的例子中非常容易出现,入过学生的年龄错误了,为负数,仍然会继续输入,那么该如何修改呢,这是就需要封装,通过一定暴露和封装完成
Javabean综合案例(猫眼电影系统)
测试案例 对象
package movieDemo;
public class Test {
public static void main(String[] args) {
//1、设计电影类
//2、创建三个电影对象,分装电影信息
//3、定义一个电影类型数组,存储电影的对象
Movie[] movies = new Movie[3];
movies[0] = new Movie("长津湖",9.7,"吴京");
movies[1] =new Movie("我和我的父辈",9.6,"吴京");
movies[2] = new Movie("五个扑水的少年",9.5,"王川");
//4、遍历数组中每个对象
for(int i = 0;i < movies.length;i++) {
Movie m = movies[i];
System.out.println("电影名:" + m.getName());
System.out.println("得分:" + m.getScore());
System.out.println("主演:" + m.getActor());
System.out.println("-------------------");
}
}
}
类
package movieDemo;
import javax.swing.*;
public class Movie {
//1、成员变量
private String name;
private double score;
private String actor;
//创建无参数构造器
public Movie() {
}
//创建有参数构造器
public Movie(String name, double score, String actor) {
this.name = name;
this.score = score;
this.actor = actor;
}
// 2、getter +setter
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getActor() {
return actor;
}
public void setActor(String actor) {
this.actor = actor;
}
}
相关文章
- 【Java集合】HashMap的resize()源码详解以及JDK1.7与JDK1.8的区别
- Java程序员容易犯的常见十大错误
- 基于Java企业财务管理系统的设计与实现_kaic
- 十六进制字符串 char 数组 转换 c/c++/java
- java高级特性总结,看这一篇就够了
- java_basic_基础
- 【人工智能 Open AI 】我们程序员真的要下岗了- 全能写Go / C / Java / C++ / Python / JS 人工智能机器人
- 【数据结构与算法】冒泡排序——Java、C++、Python 中的算法示例代码
- Java通过JNI调用C++程序
- Java精选笔记_Tomcat开发Web站点
- Java与C++实现同样的MD5加密算法
- Java里如何判断一个String是空字符串或空格组成的字符串
- 菜鸟教程-所有软件教学都有【python、java、c、c++、html、sql、css、jquery、bootstrap、vue、c#、go】
- 强哥说Java--Java String和StringBuilder(二)
- java-对象管理-集合
- c/c++/java区别
- Java中字符串相等与大小比较
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
- Jni中C++和Java的参数传递 参数对照
- 在命令行中运行eclipse中创建的java项目
- [LeetCode] 034. Search for a Range (Medium) (C++/Java)
- 【数据结构&&等差数列】KMP简介和算法的实现(c++ && java)
- PHP、Java、Python、C、C++ 这几种编程语言都各有什么特点或优点?
- Java数据结构和算法——栈
- 大数据必学Java基础(五十三):Colletion接口
- c++ 11和java 8都支持lambda表达式
- Java中for_each循环的使用
- Linux Eclipse代码提示功能设置(Java & C/C++)