主要参考文献:王映龙《Java程序设计》

一:类的语法

[修饰符]class<类名>[extends父类名][implements接口列表]{

  //类体
}

1:修饰符

可选值为:

  • public:该类可以被任何类使用;
  • abstract:该类为抽象类不能被实例化;
  • final:该类为最终类,不能被继承;
  • 省略:JAVA编译器会给它一个默认值,说明该类只能被同一个包中的其他类使用。

2:class<类名>

  • 如果此类中含有main方法,则此Java文件的名字也要与此类名相同;
  • 在同一个Java文件中,定义了多个类,它的类修饰符只能声明含有main方法的类为public。

3:extends父类名、implements接口列表

  • 一个类可以继承另一个类里面的非私有的成员;
  • 在Java语言中只允许单继承,但在现实世界里都是多重关系,我们可以通过接口或者内部类来实现这种多重关系。

4:类体(主要由成员变量和成员方法组成)

(1)成员变量

 [修饰符][static][final]<变量类型><变量名>;

  • 修饰符:可选,是指该变量的访问权限,取值为public、protected和private。
  • static:可选,用于指定该成员变量为静态变量。静态变量不属于某个变量,而属于类本身,通过“类名.变量名”的方式访问。静态变量是在运行时JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配。
  • final:可选,说明该成员变量是常量

成员变量/局部变量

  • 不能使用public、protected、private和static关键字对局部变量进行声明;
  • 作用范围不同,成员变量是在类中声明的,在整个类中都有效,局部变量是在方法内声明的变量,在方法里有效;
  • 成员变量在定义时可以不用初始化,而局部变量必须初始化。

(2)成员方法

[修饰符]<方法返回值的类型><方法名>([参数列表]){
//方法体
}

  • 方法的名字不能与类同名,除了构造方法;
  • 如果在同一个类里面出现多个同名方法,但返回值类型或方法参数不同,或者参数类型不同,就会构成方法的重载(overload)。
  • 但如果两个以上的方法定义中,方法的参数个数与类型相同但只有返回值类型不同,则不构成方法的重载,同时编译时会报错。

二:构造方法

  • 一种特殊的方法,它的名字必须与它所在类的名字相同,并且没有返回值,也不需要用void进行标识。
  • 一般构造方法声明为public;
  • 用来创建对象、实例化对象的;
  • Java编译器自动会提供一个不带任何参数并且是空的构造方法,但如果显式地在类中定义了构造方法,那么Java编译器就不提供默认的构造方法了。
  • 一个类里面可以定义多个不同参数的构造方法。

三:main方法

public static void main(String []args){}

  • main方法是属于类的;
  • 其中的String []args字符串数组参数是可以从键盘获得输入的字符。

四:创建及使用对象

class Student{
String no;//学号
String name;//姓名
int age;//年龄
//定义一个学生上课的方法
public void goToClass(){
System.out.println(name+"学生去上课!");//"+"表示字符串连接
}
}
public class Test{
//入口函数
public static void main(String []args){
Student stu=new Student();//实例化一个学生对象
//给对象赋初值
stu.no="soft001";
stu.name="张三";
stu.age=20;
stu.goToClass();//通过对象调用上课的方法
}
}

注:在C/C++等程序设计语言中,使用完了分配的内存后,需要手动释放该内存。但Java中释放内存操作不需要手工进行,Java提供垃圾回收机制来自动进行这些操作(垃圾收集器、finalize()方法等);但被丢弃的对象何时被销毁是无法获知的。

五:this引用

this是指正在执行的当前对象。this的另一个用途是当方法的局部变量与类成员变量重名时,在方法里面就隐藏了类的成员变量。此时可以通过“this.类的成员变量”的方式来访问,因为this代表当前对象。如:

public class Student{
String name;
public Student(String name){
this.name=name;
}
public static void main(String []args){
Student stu=new Student("soft");
}
}

this关键字的实例

一个类的多个构造方法之间也可以相互调用。当一个构造方法需要调用此类中的另一个构造方法时,可以使用this关键字,同时Java要求这个调用语句是整个构造方法的第一行代码。如:

public class Student{
String name;
public Student(String name){
this.name=name;
}
public Student(){
this("soft");
}
public static void main(String []args){
Student stu=new Student();
}
}

六:static关键字

  1. static方法就是没有this的方法;
  2. 静态方法的执行是不依赖于某个对象的,而属于类本身;
  3. 不必创建对象,通过类名就可以调用静态方法,例如Math.random();
  4. 静态方法不能调用非静态的方法或变量,但可以通过先创建对象,再利用对象去调用。
  5. 类的构造器实际上就是静态方法;
  6. 可用来形成静态代码块来优化程序(只会在类初次加载时执行一次);
  7. static块可出现在类中的任何地方(除了方法内部);
  8. 不允许用来修饰局部变量。

Java 类和对象的更多相关文章

  1. Java类和对象初始化

    类的生命周期: Java类的初始化: 本阶段负责为类变量赋正确的初始值.(类变量即静态变量) Java编译器把所有的类变量初始化语句和静态初始化器通通收集到<clinit>方法中,该方法只 ...

  2. java类和对象之间的差

    java类和对象之间的差别是一个普遍的问题,刚开始学习java当它来到与类和对象接触.今天就来总结一下它们之间的差异. 先说说class和object差异.事实上,词:object是全部class的父 ...

  3. 危险代码:如何使用Unsafe操作内存中的Java类和对象

    危险代码:如何使用Unsafe操作内存中的Java类和对象—Part1 危险代码:如何使用Unsafe操作内存中的Java类和对象—Part2 危险代码:如何使用Unsafe操作内存中的Java类和对 ...

  4. [Java初探08]__简单学习Java类和对象

    前言 在前面的学习中,我们对面向对象的编程思想有了一个基本的了解,并且简单的了解了类和对象的定义.那么类和对象在Java语言中是如何表现的,这次,就从实际出发,学习一下一下类和对象在Java语言中的使 ...

  5. java类和对象

    类是对象的抽象 对象是类的一个实例类 对象 = new 类();拿对象可以操作这个类里的方法 java类与对象的区别是个老生常谈的问题,刚开始学java的时候就开始接触类和对象,今天来总结一下他们之间 ...

  6. 解析Java类和对象的初始化过程

    类的初始化和对象初始化是 JVM 管理的类型生命周期中非常重要的两个环节,Google 了一遍网络,有关类装载机制的文章倒是不少,然而类初始化和对象初始化的文章并不多,特别是从字节码和 JVM 层次来 ...

  7. JAVA类和对象课后作业

    1.使用类的静态字段和构造函数,我们可以跟踪某个类所创建对象的个数.请写一个类,在任何时候都可以向它查询"你已经创建了多少个对象?" 代码: //显示类 //YiMingLai 2 ...

  8. Java类与对象的基础学习

    1. 请输入并运行以下代码,得到什么结果? public class Test{ public static void main(String args[]){ Foo obj1=new Foo(); ...

  9. JAVA类与对象作业——动手动脑以及课后实验性问题

    一: 1.源代码 //MAO2015.10.6 //foo class Foo { int value; public Foo(int initValue) { value = initValue; ...

  10. JAVA类与对象(九)------多态

    多态是同一个行为具有多个不同表现形式或形态的能力.多态性是对象多种表现形式的体现. 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 例:Parent p = new Child(); 当使 ...

随机推荐

  1. 安卓Design包之TabLayout控件的使用

    转自: 安卓Design包之TabLayout控件的简单使用 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android ...

  2. python(7)–类的多态实现

    第一步: 先定义三个类: class Animal: def __init__(self, name): self.name = name #这个方法的意思是,如果继承该类,就得自己写talk方法,如 ...

  3. Linux学习之路:命令别名、历史记录和命令查找执行顺序

    一.命令别名 alias rm='rm –i':删除命令时会随时出现提示;alias vi=vim alias 不加参数,显示系统内所以命令别名 unalias 取消别名 二.历史命令 history ...

  4. mount: can't find cdrom in /etc /fstab or /etc/mtab

    我用的linux操作系统类别是CentOS-6.5 首先在虚拟机选项的设置里设置CD/DVD选项其中勾选Connect at power on选项 在连接中选择Use ISO image file:即 ...

  5. yii2.0的gii生成代码bug

    自动生成代码真的很好用,能减少很多基础代码的编写,如果这些基础代码一个个手动去敲,即枯燥乏味,还容易出错(话说人类真的不适合做单调重复的工作),yii框架的gii自动生成代码工具就能减少很多工作量.前 ...

  6. [改善Java代码]asList方法产生的List对象不可更改

    上一个建议之处了asList方法在转换基本类型数组时候存在的问题,在看下asList方法返回的列表有何特殊的地方.看代码: import java.util.Arrays; import java.u ...

  7. Animated App Boot Example : Fastest animation at app boot time

    This iPhone app shows how to create an animation that is displayed when the app starts. The animatio ...

  8. redis学习-day1

    1.nosql数据库的一种. 2.Redis 是一种开源的,先进的key-value存储.它通常被称为数据结构服务器.因为键可以包含字符串.哈希.链表.集合和有序集合. 特点: 3.为了保证效率,数据 ...

  9. (二)Qt界面设计之菜单栏

    1.添加菜单项 直接输入菜单项名称,然后回车即可. 2.为菜单项设置图标 在动作编辑器上,右键选择编辑,然后添加图标 如果想在图标栏添加该菜单的快捷图标,直接将该动作项拖放只图标栏即可. 3.事件响应 ...

  10. crackme_zapline分析

    [破文标题]crackme_zapline 分析 [破文作者]CloAk [作者邮箱]@qq.com [作者主页] [破解工具]OD,... [破解平台]Windows --------------- ...