Java 读书笔记 (二) 对象和类
Java 作为一种面向对象语言,支持以下基本概念:
- 多态
- 继承
- 封闭
- 抽象
- 类
- 对象
- 实例
- 方法
- 重载
对象: 是类的一个实例,有状态和行为。以人为例,黄种人、白种人、黑种人为类,每一个具体的人为类的对象。
类: 它描述一类对象的行为和状态。
软件对象的状态就是属性,行为通过方法体现。
在软件开发中, 方法操作对象内部状态的改变,对象的相互调用也是通过方法来完成。
一个类可以包含以下类型变量:
- 局部变量: 在方法、构造方法或语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量会自动销毁。
- 成员变量:定义在类中、方法体之外的变量被称为成员变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定烦的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。
一个类可以有多个方法。如barking()、hungry()、sleeping()都是Dog类的方法。
构造方法
每个类都有构造方法,如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。
//构造方法示例: public class Puppy{
public Puppy(){
} public Puppy(String name){
}
}
创建对象
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。 创建对象需要以下三步:
- 声明: 声明一个对象,包括对象名称和对象类型。
- 实例化: 使用关键字new来创建一个对象。
- 初始化: 使用new创建对象时, 会调用构造方法初始化对象。
//创建对象的例子: public class Puppy{
public Puppy(String name){
//这个构造器仅有一个参数: name
System.out.println("小狗的名字是: “+name);
}
public static void main(String[ ] args){
// 下面的语句将创建一个Puppy对象
Puppy myPuppy = new Puppy("tommy");
}
}
访问实例变量和方法
//通过已创建的对象来访问成员变量和成员方法: /*实例化对象*/
ObjectReference = new Constructor(); /*访问类中的变量*/
ObjectReference.variableName; /*访问类中的方法*/
ObjectReference.MethodName();
实例
public class Puppy{
int puppyAge;
public Puppy(String name){
//这个构造器仅有一个参数: name
System.out.println("小狗的名字是 :”+name);
} public void setAge(int age){
puppyAge = age;
} public int getAge(){
System.out.println("小狗的年龄为 : "+puppyAge);
//为什么要return puppyAge? system.out.print句式中(...+puppyAge)不足以取出这个值吗?
return puppyAge;
} public static void main(String [ ] args){
/*创建对象*/
Puppy myPuppy = new Puppy("tommy");
/*通过方法来设定age*/
myPuppy.setAge(2);
/*调用另一个方法获取age*/ //为什么要用另一个方法获取?不能直接取puppyAge的值?
myPuppy.getAge();
System.out.println("变量值 : "+myPuppy.puppyAge);
}
}
源文件声明规则
当一个源文件中定义 多个类,并且还有import语句和package语句时,要特别注意:
- 一个源文件中只能有一个public类
- 一个源文件可以有多个非public类
- 源文件的名称应该和public类的类名保持一致。
- 如果一个类定义在某个包中,那么package语句应该在源文件的首行。
- 如果源文件包含import语句,那么应该放在package语句和类定义之间。如果没有package语句,那么Import语句应该在源文件最前面。
- import语句和package语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明。
例子
1 public class Employee{
2 String name;
3 int age;
4 String designation;
5 double salary; //为什么是double? 不用int? 是为了更精确?但是double也不能表示精确的值货币啊?
6 //Employee 类的构造器
7 public Employee(String name){
8 this.name=name; //这里为什么要用this.name?this 指代什么,为什么其它变量不用this..?
9 }
10 //设置age的值
11 public void empAge(int empAge){
12 age=empAge;
13 }
14 /*设置salary的值*/
15 public void empSalary(double empSalary){
16 salary=empSalary;
17 }
18 /*打印信息*/
19 public void printEmployee(){
20 System.out.println("名字:"+name);
21 System.out.println("年龄:"+age);
22 System.out.println("职位:"+designation);
23 System.out.println("薪水:“+salary);
24 }
25 }
Java 读书笔记 (二) 对象和类的更多相关文章
- java读书笔记二
这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...
- Java初学者笔记二:关于类的常见知识点汇总
一.Java的类: Java的类是Java的基本概念了,基本的定义语法我就不提了,自己也不会忘了的,下面分成几个模块介绍: 1.Java的类定义时候的修饰符 2.Java的类的继承与派生 二.Java ...
- 《C++ Primer Plus》读书笔记之八—对象和类
第十章 对象和类 1.面向对象编程(OOP)的特性:抽象.封装和数据隐藏.多态.继承.代码的重用性. 2.指定基本类型完成了3项工作:①决定数据对象需要的内存数量.②决定如何解释内存中的位(lon ...
- [Effective Java 读书笔记] 第三章类和接口 第二十-二十一条
第二十条 用函数对象表示策略 函数指针(JAVA的函数指针,是指使用对象的引用来作为参数,传递给另一个对象的方法)主要用来实现策略模式,为了在JAVA中实现这种模式,要申明一个接口来表示该策略,并为每 ...
- Java读书笔记二(封装类)
1.介绍 都知道java中基本数据类型有非常多,比方string,int--,可是基本数据类型与对象之间是不同的.但非常多情况下,我们希望将基本数据类型当作对象使用,这时候就须要用到封装类. 2.封装 ...
- Java 读书笔记 (十一) Number & Math 类
所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类. 这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译 ...
- [Effective Java 读书笔记] 第三章类和接口 第十三 -- 十四条
第十三条 使类和成员的可访问性最小化 总得来说,我们应该尽量将成员的访问范围限制到最小!有利于解耦,开发.测试和优化都能够更加独立. 对于成员(域,方法,嵌套类和嵌套接口),有四种可能的访问级别,访问 ...
- [Effective Java 读书笔记] 第三章类和接口 第二十三-- ??条
第二十三条 请不要再新代码中使用原生态类型 1 使用原生态类型,就失去了泛型在安全性和表述性方面的所有优势,所以新代码中不要使用原生态类型 2 List<String>可以传递给List作 ...
- [Effective Java 读书笔记] 第三章类和接口 第十八--十九条
十八条 接口优于抽象类 接口的特点: 1.一个类可以实现多个接口,不能继承多个类(抽象类) 2.接口不能有具体的方法实现,只定义标准类型 骨架类: 即实现一个abstract类来实现接口,提供给其他类 ...
随机推荐
- ubuntu下如何安装codeblocks集成开发环境
codeblocks是一个十分优秀的C/C++开发IDE,虽然后起之秀codelite目前来看大有超越之势哦. 不过在ubuntu下安装codeblocks却比较麻烦,不像其他linux发行版,比如s ...
- DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
1 引言 中国本土程序员马根峰推出的个人作品----万能数据库查询分析器,中文版本<DB 查询分析器>.英文版本<DB Query Analyzer>. 万能数据 ...
- Loader转换器
一.简介 webpack本身只能处理js模块,Loader可以理解为模块和资源的转换器,它本身是一个函数,接受文件作为参数,返回转换的结果.因此,我们就能通过require来加载任何类型的模块和文件. ...
- 我对AOP的理解
1.问题 问题:想要添加日志记录.性能监控.安全监测 2.最初解决方案 2.1.最初解决方案 缺点:太多重复代码,且紧耦合 2.2.抽象类进行共性设计,子类进行个性设计,此处不讲解,缺点一荣俱荣,一损 ...
- tomcat 工作原理
Tomcat原理 分类: TOMCAT2009-05-17 22:25 4366人阅读 评论(3) 收藏 举报 tomcatexceptionsocketstringservernull Tomcat ...
- 下载网易云VIP音乐
有偿帮助.联系方式在个人信息里.
- [INet] WebSocket 协议中的数据收发过程
WebSocket 和 HTTP 相似,只是一个应用层协议,对下层透明,所以不涉及 TCP/IP. 由于浏览器支持了 WebSocket,所以在用 JS 写客户端的时候,是无需考虑数据的编码解码的. ...
- javascript封装的参数合并
o=$.extend(initializationInterface.defaultValue,o); o= $.extend({}, initializationInterface.prototyp ...
- Java开源生鲜电商平台-支付模块的设计与架构(源码可下载)
Java开源生鲜电商平台-支付模块的设计与架构(源码可下载) 开源生鲜电商平台支付目前支持支付宝与微信.针对的是APP端(android or IOS) 1. 数据库表设计. 说明:无论是支付宝还 ...
- linux进程、线程与cpu的亲和性(affinity)
参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...