星期日, 十一月 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是调用类中属性的时候用
-----关于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
相关推荐
MyBatis 可以使用简单的 XML 或注解进行配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。 在 "01day_01mybatis_java_" 这个学习资料中,我们将会深入理解...
而“day17”可能更深入,涉及类、对象和面向对象编程等高级主题。 通过这些资料,学习者可以逐天跟进,每天学习并实践新的Java编程概念,通过实际编写和修改“DayCounter”程序来提升技能。这种方式不仅提供理论...
2. **字符串(String)**:Java中的String类是不可变对象,广泛用于处理文本信息。了解其构造方法、常用方法如concat(), substring(), equals()等对于日常编码至关重要。 3. **运算符与表达式**:包括算术运算符、...
总的来说,"day13_Character_java_"的学习内容涵盖了Java语言基础、字符串操作、Unicode字符处理、面向对象编程原则以及`Character`类的使用。这些知识是每个Java开发者都需要掌握的基础技能,对于理解和编写高效、...
面向对象编程(Object-Oriented Programming, OOP)是Java的核心特性,它通过类和对象来模拟现实世界中的实体,使代码更易于理解和维护。在"day12_code_java_"这个压缩包中,我们可以期待找到一些关于Java面向对象...
1. **Java基础**:首先,学员需要具备基本的Java语法知识,如变量、数据类型、控制流、类和对象等。这是所有Java项目的基础。 2. **面向对象编程**:DMS项目会涉及面向对象的设计思想,如封装、继承和多态,通过...
3. **面向对象**(day05面向对象.doc、传智播客_Java培训_毕向东_Java基础[03-面向对象].pdf):Java是一种面向对象的编程语言,这部分会讲解类、对象的概念,封装、继承、多态等面向对象的基本特性,以及构造器、...
day07-面向对象 java
8. **对象和类**:面向对象编程是Java的核心。了解类的定义、对象的创建以及封装、继承和多态的概念是进阶学习的关键。 9. **输入输出**:Java提供System.in用于标准输入,System.out.println()用于输出。此外,...
Java_面向对象_小项目_day16_QuickHit 训练技能 1.面向对象设计的思想 2.使用类图理解类的关系 3.类的封装 4.构造方法的使用 5.this、static关键字的使用 需求概述 1.根据输入速率和正确率将玩家分为不同级别 2.级别...
在本教程"day13_StringBuffer_java_"中,我们将深入探讨这个类及其在Java中的作用。 Java是C++的优化版本,它保留了C++的强大功能,同时去除了那些在实际编程中较少使用的特性。Java的设计理念是简洁易用,同时也...
8. **对象与类的概念**:面向对象编程是Java的核心特性。了解类的定义、对象的创建、封装、继承和多态等概念,是Java学习的关键。 这个压缩包可能还包括了对以上知识点的实践案例,让学生通过编写和运行代码来加深...
初学者需要理解如何声明、实例化和使用类与对象。 变量、数据类型和常量也是学习Java的基础。Java有八种基本数据类型,包括整型(byte, short, int, long)、浮点型(float, double)、字符型(char)和布尔型...
通过这个"day01"的学习,你会了解到如何编写简单的Java程序,包括输出语句(System.out.println())、变量的声明与使用,以及如何进行条件判断和循环控制。这些都是构建复杂程序的基础。 在实际学习过程中,结合毕...
JDK是一个包含了Java运行时环境(JRE)和开发工具的软件包,JRE是运行Java程序所需的核心类库和Java虚拟机(JVM)。在安装JDK时,建议不要安装在系统盘(如C盘)上,以避免系统问题时对Java环境造成影响。安装完成后...
"Java编程_Java__Java编程_Java_"在描述和标签中重复出现,强调了这个主题与Java编程语言的密切关系。压缩包内的文件"spring_day01"和"spring_ioc"暗示我们将深入探讨Spring框架的基础,特别是其依赖注入(IoC)的...
6. **面向对象编程**:Java是一种面向对象的语言,因此类(Class)和对象(Object)是学习的关键。类是对象的模板,定义了对象的属性(字段)和行为(方法)。对象是类的实例,具有类所定义的特性和功能。 7. **...
day11-类和对象 1. 类和对象 1.1 类和对象的理解【理解】 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。 类 类的理解 类是对现实生活中一类具有共同属性和行为的事物的抽象 类是对象的数据类型,类...
1. **类图视图**:显示程序中类与类之间的关系,帮助理解类的结构和相互作用。 2. **对象创建器**:允许直接创建和交互对象,无需编写main方法,便于探索对象行为。 3. **小测试**:可以对单个方法进行单元测试,...
在Java编程语言中,抽象类和接口是两个重要的概念,它们用于实现面向对象设计的多态性和灵活性。本文将深入探讨这两个概念,并结合"day13_java_源码"提供的实例,帮助初学者理解如何在实际开发中运用它们。 1. **...