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 读书笔记 (二) 对象和类的更多相关文章

  1. java读书笔记二

    这是我的一些读书笔记: 我研究了一下面向对象: 面向对象符合人类看待事物的一般规律,对象的方法的实现细节是包装的,只有对象方法的实现者了解细节 我觉得面向过程是由过程.步骤.函数组成,过程是核心,面向 ...

  2. Java初学者笔记二:关于类的常见知识点汇总

    一.Java的类: Java的类是Java的基本概念了,基本的定义语法我就不提了,自己也不会忘了的,下面分成几个模块介绍: 1.Java的类定义时候的修饰符 2.Java的类的继承与派生 二.Java ...

  3. 《C++ Primer Plus》读书笔记之八—对象和类

    第十章 对象和类   1.面向对象编程(OOP)的特性:抽象.封装和数据隐藏.多态.继承.代码的重用性. 2.指定基本类型完成了3项工作:①决定数据对象需要的内存数量.②决定如何解释内存中的位(lon ...

  4. [Effective Java 读书笔记] 第三章类和接口 第二十-二十一条

    第二十条 用函数对象表示策略 函数指针(JAVA的函数指针,是指使用对象的引用来作为参数,传递给另一个对象的方法)主要用来实现策略模式,为了在JAVA中实现这种模式,要申明一个接口来表示该策略,并为每 ...

  5. Java读书笔记二(封装类)

    1.介绍 都知道java中基本数据类型有非常多,比方string,int--,可是基本数据类型与对象之间是不同的.但非常多情况下,我们希望将基本数据类型当作对象使用,这时候就须要用到封装类. 2.封装 ...

  6. Java 读书笔记 (十一) Number & Math 类

    所有的包装类(Integer.Long.Byte.Double.Float.Short)都是抽象类Number的子类. 这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译 ...

  7. [Effective Java 读书笔记] 第三章类和接口 第十三 -- 十四条

    第十三条 使类和成员的可访问性最小化 总得来说,我们应该尽量将成员的访问范围限制到最小!有利于解耦,开发.测试和优化都能够更加独立. 对于成员(域,方法,嵌套类和嵌套接口),有四种可能的访问级别,访问 ...

  8. [Effective Java 读书笔记] 第三章类和接口 第二十三-- ??条

    第二十三条 请不要再新代码中使用原生态类型 1 使用原生态类型,就失去了泛型在安全性和表述性方面的所有优势,所以新代码中不要使用原生态类型 2 List<String>可以传递给List作 ...

  9. [Effective Java 读书笔记] 第三章类和接口 第十八--十九条

    十八条 接口优于抽象类 接口的特点: 1.一个类可以实现多个接口,不能继承多个类(抽象类) 2.接口不能有具体的方法实现,只定义标准类型 骨架类: 即实现一个abstract类来实现接口,提供给其他类 ...

随机推荐

  1. SharePoint 2010 -- .Net托管客户端模型简单示例

    .Net托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverlight&quo ...

  2. Mac OS X下各种文件编码的转换方法

    何曾几时本猫还在windows下编码的时候,那时ruby的源代码的编码格式都是gbk啊!导致N多中文显示为乱码.后来无奈写了个转换代码从gbk编码转为utf-8格式的小工具: #!/usr/bin/r ...

  3. 我如何踏上IT路

    第一次开技术博客,第一篇博文就聊聊自己是如何走上IT这条路的.一直听人说"搞IT的"颇含贬低色彩,也有IT前辈奉劝不要轻易踏上这条路,但最终我这个本是化学化工专业的门外汉还是义无反 ...

  4. java并发包分析之———ConcurrentSkipListMap

    一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSki ...

  5. JavaScript中对象数组 根据某个属性值 然后push到新的数组

    原文链接 https://segmentfault.com/q/1010000010075035 将下列对象数组中,工资大于1w的员工,增加到对象数组 WanSalary中 var BaiduUser ...

  6. 从has no method 'tmpl'谈起

    最近做一个相对比较功能专业化的应用系统,其中今天Leader提出的功能修改需求有点smart table的意思,其中有个界面修改由于用Dom操作太麻烦了,于是想用用很久之前在学习jQuery API中 ...

  7. AngularJS + RequireJS

    http://www.startersquad.com/blog/AngularJS-requirejs/ While delivering software projects for startup ...

  8. Kapacitor之TICK脚本,监控输出

    好久没更新博客园了,说来也惭愧,之前说好每隔几天更新一个的,虽然没什么人看,但是作为一个记录,回顾也是能有新的认识,这篇博客是讲的目前我在工作中使用的一个结束点,这个技术点目前网上资料少之甚少,也是希 ...

  9. JSON数据Key排序

    /// <summary> /// JSON格式化重新排序 /// </summary> /// <param name="jobj">原始JS ...

  10. maven仓库添加jar架包

    推荐几个好的 Maven 常用仓库网址:http://mvnrepository.com/http://search.maven.org/http://repository.sonatype.org/ ...