`

day_07_Java类与对象

阅读更多

星期日, 十一月 08, 2015 16:58:08

 

类与对象

 

 

一.了解面向对象的编程思想

 

         类:

         类实质上就是封装对象属性和行为的载体。

         

         对象:

         而对象则是类抽象出来的一个实例。

 

        在Java语言中,类中对象的行为是以方法的形式定义的,对象的属性是以成员变量的形式定义的,

而类包括对象的属性和方法。

 

         封装:

         封装是面向对象编程的核心思想,将对象的属性和行为封装起来;

而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现的细节。

 

        继承性:

        主要利用特定对象之间的共同属性。

 

        多态:

        了解了父类和子类,其实将父类对象应用于子类的特征就是多态。

 

       抽象类:

       抽象类不能实例化对象。

       在多态的机制中,父类通常会被定义为抽象类,在抽象类中给出一个方法的标准,而不给出实现的具体流程。

 

       在多态机制中,比抽象类更为方便的方式是 将抽象类定义为接口。

由抽象方法组成的集合就是接口。一个标准。

 

 

 

 

 

二.类

 

----2.1定义:

      类是封装对象的属性和行为的载体。

而在Java中对象的属性是以成员变量的形式存在,而对象的方法是以成员方法的形式存在。

 

---2.2 成员变量

  

 

 

java类中为什么可以有多个class啊

-----因为class就是一个对象,不然怎么继承呢。。。

    一个.java文件只能有一个public class ,而且与这个.java的文件名必须一致。

不是说只能一个main方法吗,,那写了那么多main方法也不报错?

-----main方法很多,这个是没有问题的,但是执行的是public class这里面的main方法。

 

代码案例:

package day07;

 

public class ClassTest {

public static void main(String[] args) {

Book b = new Book();

String b2 = b.getName();

System.out.println(b2);

}

}

 

class Book{

/*定义成员变量*/

private int id ;

private String name;

private String category;

/*定义成员方法*/

public String getName() {

int id = 0;

setName("Java");

return id+this.name;

}

private String setName(String name) {

return this.name = name;

 

}

public Book getBook() {

return this;         //返回Book类引用

}

}

 

运行结果:

0Java

 

 

----2.3 成员方法

 

---在Java中使用成员方法对应于类对象的行为。

---定义成员方法的格式

 

权限修饰符 返回值类型 方法名(参数类型 参数名){

...//方法体

      return 返回值;

}

 

注意:

  在成员方法中可以调用其他成员方法和类成员变量。

  类成员变量和成员方法也可以统称为类成员。

 

----2.4 权限修饰符

 

Java中的权限修饰符主要包括 private、public、protected,

 这些修饰符控制着  对类、类的成员变量、成员方法的访问。

 

 

 

 

不写修饰符时,默认为protect。

 

 

----2.5局部变量

 

注意:

    局部变量在使用时必须进行赋值操作或被初始化,否则会报编译错误。

  

 

----2.6.this关键字

 

tis关键字被隐身地用于引用对象的成员变量和方法。

事实上this引用就是对一个对象的引用。

this可以调用成员变量和成员方法,还可以作为方法的返回值。

 

public Book getBook() {

return this;         //返回Book类引用

}

方法的返回值为Book类。

 

 

----2,7类的构造方法

 

---构造方法是一个与类同名的方法,对象的创建就是通过构造方法完成的,

每当类实例化一个对象时,类都会自动调用构造方法。

 

构造方法特点:

     1.没有返回值

     2.名称要与类名相同

格式:

   public book() {

//构造方法体

}

 

如果类中没有明确定义构造方法,则编译器会自动创建一个不带参数的默认构造方法。

 

实际上this还可以调用类中的构造方法。

 

 

 

----2.8静态变量、常量和方法

 

---被static修饰

   被声明为static的变量、常量和方法称为静态成员。

---静态成员是属于类所有,区别于个别对或象,可以在本类或其他类使用类名和".",

运算符调用静态成员。

---直接使用: 类名.静态成员

 

---目的:提供共享数据或方法

 

 

注意:

    1.在静态方法中不可以使用this关键字

    2.在静态方法中不可以直接调用非静态方法。

 

----2.9类的主方法

 

注意:

   1.主方法也是静态的,所以要直接在主方法中调用其他方法,则该方法必须也是静态的。

   2.主方法没有返回值

   3.主方法形参为数组

 

 

星期日, 十一月 08, 2015  22:29:43

 

星期一, 十一月 09, 2015 10:05:53

 

----2.10需要注意的点

 

         在使用Java语言进行开发时,时刻要以面向对象的思想考虑问题。

面向对象的基础就是类,本例将演示如何自定义类。

 

 

注意点:

         构造函数就是在实例化这个类的时候给属性赋值,

(构造函数主要是两个功能:为对象开辟空间,为对象中的数据成员赋初值。)

set是在实例化是没有赋值或者改变值的时候用,

get是调用类中属性的时候用

 

 

+google

 

-----关于Java中的构造方法和set方法()给属性赋值

对于一个类中的成员变量(属性),属性如果都设置成了private类型,那么对外给属性设置了get和set方法 ,

那么外部程序中给这些属性设置值,有两种方式.

        第一种就是通过set()方法.

         第二种就是通过含这个属性的构造方法来直接设置这个属性的值.

 

----2.11 一些案例

 

例子1

 

分析步骤:

        ----步骤一:

               在项目中创建Book类,在定义3个成员变量,分别表示书名、作者和价格,同时提供构造方法和成员方法来修改成员变量。

 

       ----步骤二:

                主方法  创建一个Book,输出其属性。

 

代码案例:

 

package day08;

 

public class ClassTest {

public static void main(String[] args) {

Book b1 = new Book();

Book b2 = new Book("恋风恋歌","刘惜君",24);

b1.setTitle("慢慢来比较快");

b1.setAuthor("xijunliu");

b1.setPrice(80);

System.out.println("无参构造方法使用的set进行初始化属性,或外部进行改变属性:");

System.out.println(b1.getTitle()+"\t"+b1.getAuthor()+"\t"+b1.getPrice());

System.out.print("\n");

System.out.println("参构造方法里可以进行设置属性初始化:");

System.out.println(b2.getTitle()+"\t"+b2.getAuthor()+"\t"+b2.getPrice());

}

}

 

 

class Book {

/*定义3个成员变量,分别表示书名、作者和价格*/

private String title;

private String author;

private double price;

/*定义构造方法--无参构造方法+参构造方法*/

 

public Book() {

 

}

public Book(String title,String author,double price) {

this.title = title;

this.author = author;

this.price = price;

}

/*成员get方法*/

public String getTitle() {

return title;

}

 

public String getAuthor() {

return author;

}

 

public double getPrice() {

return price;

}

/*成员set方法*/

public void setTitle(String title) {

this.title = title;

}

 

public void setAuthor(String author) {

this.author = author;

}

 

public void setPrice(double price) {

this.price = price;

}

}

 

运行结果:

 

无参构造方法使用的set进行初始化属性,或外部进行改变属性:

慢慢来比较快xijunliu80.0

 

参构造方法里可以进行设置属性初始化:

恋风恋歌刘惜君24.0

 

 

 

例子2

摄氏度转换为华氏度

 

代码案例:

package day08;

 

import java.util.Scanner;

 

public class Converter {

public static void main(String[] args) {

System.out.print("请输入摄氏度:");

Scanner in = new Scanner(System.in);

double sesidu = in.nextDouble();

/*本类要调用成员方法:转换为华氏度的方法*/

Converter zh = new Converter();

System.out.print("摄氏度转换为华氏度:"+zh.HuaS(sesidu));

 

}

/*具体的成员方法:转换为华氏度的方法*/

public double HuaS(double sesidu) {

double huaS = 1.8*sesidu+32;

return huaS;

 

}

}

 

运行结果:

请输入摄氏度:12

摄氏度转换为华氏度:53.6

 

星期一, 十一月 09, 2015 11:29:37

 

 星期一, 十一月 09, 2015 14:04:20

 

三.对象

 

3.1 对象的创建

 

在Java语言中使用new操作符调用构造方法创建对象。

格式:

  Test test = new Test();

  Test test = new Test(“a”);

 

3.2访问对象的属性和行为

 

当用户使用new 操作符创建一个对象后,可以使用"对象.类成员"来获取对象的属性和行为

 

     对象的属性和行为在类中是通过类成员变量和成员方法的形式来表示的,

所以当对象获取类成员,也就相应地获得了对象的属性和行为。

 

例子1

代码案例:

package day08;

 

public class TransferProperty {

/**/

int i = 47;

/*空的构造方法*/

public TransferProperty(){

}

 

/*成员方法*/

public void call1() {

for(i = 0 ; i< 3;i++) {

System.out.print(i+" ");

if(i == 2) { 

System.out.println("\n");

}

}

}

 

/*tf1 tf2占用不同的内存块*/

public static void main(String[] args) {

TransferProperty tf1 = new TransferProperty();

TransferProperty tf2 = new TransferProperty();

tf2.i = 60;                     //将tf2的成员变量改为60

System.out.println("tf1....:"+tf1.i);

    tf1.call1();

    

    System.out.println("tf2....:"+tf2.i);

    tf2.call1();

    

}

}

 

运行结果:

 

tf1....:47

0 1 2 

 

tf2....:60

0 1 2 

 

 

如果希望成员变量不被其中任何一个对象改变,也可以使用static关键字

(前文曾经介绍过一个被声明为static的成员变量的值可以被本类或其他类的对象共享)

 

 

代码案例:

package day08;

 

public class TransferProperty {

/**/

static int i = 47;

/*空的构造方法*/

public TransferProperty(){

}

 

/*成员方法*/

public void call1() {

for(i = 0 ; i< 3;i++) {

System.out.print(i+" ");

if(i == 2) { 

System.out.println("\n");

}

}

}

 

/*tf1 tf2占用不同的内存块*/

public static void main(String[] args) {

TransferProperty tf1 = new TransferProperty();

TransferProperty tf2 = new TransferProperty();

tf2.i = 60;                     //将tf2的成员变量改为60,因为是static

System.out.println("tf1....:"+tf1.i);

    tf1.call1();    //i重新赋值为0,1,2    (未输出3)

    

    System.out.println("tf2....:"+tf2.i);  //因为 i 为 static,已变为3,所以输出3

    tf2.call1();   //重新进行赋值

    

}

}

 

运行案例:

tf1....:60

0 1 2 

 

tf2....:3

0 1 2 

 

注意:

 

 因为在内存中两个对象同时指向同一块内存区域。

 

 

3.3 对象的引用

 

   在Java语言中尽管一切都可以看最对象,但真正操作标识符实质上是一个引用

 

格式:

 

  Book b = new Book();

 

注意:

    引用只是存放在一个对象的内存地址,并非存放一个对象。

 

3.4 对象的比较

 

public boolean equals(Object anObject)

 

3.5 对象的销毁

 

blog   http://blog.jobbole.com/80499/

 

 

 

首先了解何种对象会被java虚拟机视为垃圾。

 

---主要包括以下两种情况:

     1.对象引用超过其作用范围,则这个对象将被视为垃圾

     2.将对象赋值为null

 

虽然垃圾回收机制已经很完善,但垃圾回收器只回收那些由new操作符创建的对象。

 

 

    在Java语言中提供了一个finalize()方法,这个方法Object类的方法,它被声明为protect,

用户可以在自己的类定义这个方法,如果用户在定义了finalize()方法,在垃圾回收时首先调用该方法,并且再下一次垃圾回收动作发生时,才真正回收对象占用的内存。

 

注意:

    垃圾回收或是finalize()方法不保证一定会发生,如Java虚拟机面临内存耗待尽的情形,它是不会执行垃圾回收的。

    

    由于垃圾回收不受人为控制,具体执行时间也不确定,所有finalize()方法也就无法执行。

为此,java提供了System.gc()方法强制启动垃圾回收器,告知垃圾回收器来清理。

 

 

 

3.6 例子

 

----统计图书销量

Random().nextInt(3)

.nextInt(3)  范围是0~2  0,1,2

new Book(titles[new Random().nextInt(3)])

代码案例:

package day08;

 

import java.util.Random;

 

public class TestBook {

public static void main(String[] args) {

String titles[] = {"恋风恋歌","慢慢来比较快","Jami soul she"};

for(int i =0;i<4;i++) {

new Book(titles[new Random().nextInt(3)]); //0~2

}

System.out.print(Book.getCount());

}

 

 

}

 

class Book {

private static int count;

public Book(String title) {

System.out.println("售出的书名  :"+title);

count++;

}

public static int getCount(){

return count;

}

 

}

 

 

运行结果:

售出的书名  :Jami soul she

售出的书名  :慢慢来比较快

售出的书名  :恋风恋歌

售出的书名  :Jami soul she

4

 

 

 

案例:

重新计算对象的哈希码

----目前不理解~ 后面会补充

 

星期一, 十一月 09, 2015 19:40:01

 

 

 

 

 

 

 

2
0
分享到:
评论

相关推荐

    pandas-1.3.5-cp37-cp37m-macosx_10_9_x86_64.zip

    pandas whl安装包,对应各个python版本和系统(具体看资源名字),找准自己对应的下载即可! 下载后解压出来是已.whl为后缀的安装包,进入终端,直接pip install pandas-xxx.whl即可,非常方便。 再也不用担心pip联网下载网络超时,各种安装不成功的问题。

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的大学生兼职信息系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    基于java的乐校园二手书交易管理系统答辩PPT.pptx

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.002)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于ssm框架+mysql+jsp实现的监考安排与查询系统

    有学生和教师两种角色 登录和注册模块 考场信息模块 考试信息模块 点我收藏 功能 监考安排模块 考场类型模块 系统公告模块 个人中心模块: 1、修改个人信息,可以上传图片 2、我的收藏列表 账号管理模块 服务模块 eclipse或者idea 均可以运行 jdk1.8 apache-maven-3.6 mysql5.7及以上 tomcat 8.0及以上版本

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    tornado-6.1b2-cp38-cp38-macosx_10_9_x86_64.whl

    Android Studio Ladybug(android-studio-2024.2.1.10-mac.zip.001)

    Android Studio Ladybug 2024.2.1(android-studio-2024.2.1.10-mac.dmg)适用于macOS Intel系统,文件使用360压缩软件分割成两个压缩包,必须一起下载使用: part1: https://download.csdn.net/download/weixin_43800734/89954174 part2: https://download.csdn.net/download/weixin_43800734/89954175

    基于MATLAB车牌识别代码实现代码【含界面GUI】.zip

    matlab

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于java的毕业生就业信息管理系统答辩PPT.pptx

    基于Web的毕业设计选题系统的设计与实现(springboot+vue+mysql+说明文档).zip

    随着高等教育的普及和毕业设计的日益重要,为了方便教师、学生和管理员进行毕业设计的选题和管理,我们开发了这款基于Web的毕业设计选题系统。 该系统主要包括教师管理、院系管理、学生管理等多个模块。在教师管理模块中,管理员可以新增、删除教师信息,并查看教师的详细资料,方便进行教师资源的分配和管理。院系管理模块则允许管理员对各个院系的信息进行管理和维护,确保信息的准确性和完整性。 学生管理模块是系统的核心之一,它提供了学生选题、任务书管理、开题报告管理、开题成绩管理等功能。学生可以在此模块中进行毕业设计的选题,并上传任务书和开题报告,管理员和教师则可以对学生的报告进行审阅和评分。 此外,系统还具备课题分类管理和课题信息管理功能,方便对毕业设计课题进行分类和归档,提高管理效率。在线留言功能则为学生、教师和管理员提供了一个交流互动的平台,可以就毕业设计相关问题进行讨论和解答。 整个系统设计简洁明了,操作便捷,大大提高了毕业设计的选题和管理效率,为高等教育的发展做出了积极贡献。

    机器学习(预测模型):2000年至2015年期间193个国家的预期寿命和相关健康因素的数据

    这个数据集来自世界卫生组织(WHO),包含了2000年至2015年期间193个国家的预期寿命和相关健康因素的数据。它提供了一个全面的视角,用于分析影响全球人口预期寿命的多种因素。数据集涵盖了从婴儿死亡率、GDP、BMI到免疫接种覆盖率等多个维度,为研究者提供了丰富的信息来探索和预测预期寿命。 该数据集的特点在于其跨国家的比较性,使得研究者能够识别出不同国家之间预期寿命的差异,并分析这些差异背后的原因。数据集包含22个特征列和2938行数据,涉及的变量被分为几个大类:免疫相关因素、死亡因素、经济因素和社会因素。这些数据不仅有助于了解全球健康趋势,还可以辅助制定公共卫生政策和社会福利计划。 数据集的处理包括对缺失值的处理、数据类型转换以及去重等步骤,以确保数据的准确性和可靠性。研究者可以使用这个数据集来探索如教育、健康习惯、生活方式等因素如何影响人们的寿命,以及不同国家的经济发展水平如何与预期寿命相关联。此外,数据集还可以用于预测模型的构建,通过回归分析等统计方法来预测预期寿命。 总的来说,这个数据集是研究全球健康和预期寿命变化的宝贵资源,它不仅提供了历史数据,还为未来的研究和政策制

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于微信小程序的高校毕业论文管理系统小程序答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的超市 Pos 收银管理系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上报名系统答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    基于java的网上书城答辩PPT.pptx

    婚恋网站 SSM毕业设计 附带论文.zip

    婚恋网站 SSM毕业设计 附带论文 启动教程:https://www.bilibili.com/video/BV1GK1iYyE2B

    基于java的戒烟网站答辩PPT.pptx

    基于java的戒烟网站答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    基于微信小程序的“健康早知道”微信小程序答辩PPT.pptx

    机器学习(预测模型):自行车共享使用情况的数据集

    Capital Bikeshare 数据集是一个包含从2020年5月到2024年8月的自行车共享使用情况的数据集。这个数据集记录了华盛顿特区Capital Bikeshare项目中自行车的租赁模式,包括了骑行的持续时间、开始和结束日期时间、起始和结束站点、使用的自行车编号、用户类型(注册会员或临时用户)等信息。这些数据可以帮助分析和预测自行车共享系统的需求模式,以及了解用户行为和偏好。 数据集的特点包括: 时间范围:覆盖了四年多的时间,提供了长期的数据观察。 细节丰富:包含了每次骑行的详细信息,如日期、时间、天气条件、季节等,有助于深入分析。 用户分类:数据中区分了注册用户和临时用户,可以分析不同用户群体的使用习惯。 天气和季节因素:包含了天气情况和季节信息,可以研究这些因素对骑行需求的影响。 通过分析这个数据集,可以得出关于自行车共享使用模式的多种见解,比如一天中不同时间段的使用高峰、不同天气条件下的使用差异、季节性变化对骑行需求的影响等。这些信息对于城市规划者、交通管理者以及自行车共享服务提供商来说都是非常宝贵的,可以帮助他们优化服务、提高效率和满足用户需求。同时,这个数据集也

Global site tag (gtag.js) - Google Analytics