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

 

 

 

 

 

 

猜你喜欢

转载自yuzhouxiner.iteye.com/blog/2255608