1、static变量:
首先我们要明确,java程序是一个一个类构成的,每创建一个类的对象,就会开辟一块以类为模版的内存空间,这个空间中包括成员变量与成员函数,那么类中静态成员变量与普通的成员变量的区别我们可以依据于上述原理,用图来进行表示。
假设有一个学生类如下
public class Student{
private String name; //学生的名字
public static String school; //学生的学校
public void display(){ //定义一个显示信息的方法
System.out.println(“学生姓名:”+name+”所在学校”+school);
}
}
当创建两个不同的对象时stu1和stu2时有:
我们知道,每个学生的姓名在对象中可以单独开辟一块内存,但是同一个学校的学生的学校名字可以同时用一块内存来存储。因此在这里用到了static关键字。这种用法有两种好处:一、节约内存,如果一个学校的人数比较多并且每个人都要开辟一块存储完全相同内容的内存空间的话那么就会早成浪费。二、便于维护,当该学校需要更改名字的时候只要该一个学生中school变量的名字就可以了,从途中可以看出,它们公用了一块内存空间。这就使得维护变得方便了许多。这便是static变量的优异性。三、在另一个类中要引用该类的static变量时只需要类名加上变量名即可,比如说Student.school这样的话使得不同的类之间沟通就变得方便许多。
2、this关键字:
对与java的初学者来说this关键字是一个比较难以理解的内容,我们通过一下两个例子来看
(1)public class Student{
private String name //定义一个名字变量
public void setName(String name){ //定义一个设置名字的方法
this.name = name;
}
}
在这里,由于类中变量同方法中的形参变量的名字相同,因此在赋值时必须区分哪一个是成员变量,哪一个是形参变量。而this在这里是指调用该方法(即setName())的对象,就是说我现在定义一个对象stu并调用setName()方法,此时this指的就是stu。
(2)public class Student{
private String name;
public Student(){ //无参构造器
this(“zhangsan”);
}
public Student(String name){ //重载构造器
this.name = name;
}
}
如果我们创建一个Student stu = new Student()时,调用的是无参构造器来创建的这一个对象,在构造器中他又会根据参数匹配原则调用另一个构造器。将name变量的初始值设为zhangsan。因此this关键字的第二个意思是指该类的构造器。在这里我们必须注意一点就是通过this调用构造器的话一定要将其放到该方法的第一行中。否则会报错。如
public Student(){
system.out.println(“将this放在第二行”);
this(“zhangsan”); //没有将其放在第一行是错误的
}
3、public 、protected、private
在eclipse中,文件的层次是project àpackageàclass,因此这几个关键字所修饰的变量以及方法的作用域可以用如下的表格来表示
|
不同project
|
不同package
|
不同class
|
public
|
×
|
√
|
√
|
protected
|
×
|
×
|
√
|
private
|
×
|
×
|
×
|
我们可以看出他们的封装程度是依次加深的。还有两点需要注意,一是除了在接口中,其他类里如果没有规定这几个关键字,那么变量或者方法会有一个默认值,它是介于protected和private之间的,而在接口当中默认设置是public static的。二是如果在子类中重写父类的方法,那么该方法的可见程度一定要比父类中的方法高。否则编译时便会出错。
以上是我对这几个关键字的一个小结,如果想真正掌握的话还必须在写程序中多加使用。
- 大小: 13 KB
分享到:
相关推荐
首先,理清几个概念:项目(project)、解决方案(solution)、程序集(assembly)、命名空间(namespace)。 项目(project) 就是我们开发的一个软件。.NET下,项目有多种类型,如控制台、Windows应用程序、类库...
"Java关键字与标识符小结" Java语言中,关键字和标识符是两个重要的概念。关键字是被Java语言赋予了特殊含义的单词,总共有50个。它们被用来定义数据类型、流程控制、访问权限修饰符、类、函数、变量修饰符、类之间...
本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。 每个线程都有自己的资源,但是代码区是共享...
#### 四、小结 `this`关键字是Java中非常重要的概念之一,它可以帮助我们更好地理解和编写面向对象的程序。通过对`this`的合理使用,可以使代码更加清晰易读,同时也能够避免一些常见的命名冲突问题。理解并掌握`...
### Keil C使用经验小结 #### 一、引言 自2004年6月开始接触Keil C以来,随着MUSE项目对8051 MCU的应用日益增多,对于Keil C的理解和实践经验也随之积累。8051 IP在项目的可靠性验证下,未来在更多产品的开发中将...
Java 异常机制小结 Java 异常机制是 Java 语言中一个非常重要的方面,也是程序设计的一大难点。Java 语言在设计的当初就考虑到异常处理的框架的方案,使得所有的异常都可以用一个类型来表示,不同类型的异常对应...
根据提供的文件内容,我们可以总结出以下几个关于SQL*Plus的学习知识点: ### 1. 字符串连接与输出格式 在SQL*Plus中,可以使用 `||` 运算符来进行字符串的连接。例如,在示例中,`SELECT ename || 'annual salary...
在《关于static的小结(Java内存溢出)》这篇文章中,作者主要探讨了与Java中的`static`关键字相关的知识点,以及如何可能导致内存溢出的情况。下面我们将深入分析这些内容。 #### Java中的`static`关键字 `static...
### 哈希意义的小结 #### 一、哈希概念概述 哈希技术是现代计算机科学中的一个重要组成部分,广泛应用于数据存储、信息安全、数据库管理等多个领域。它通过一种特殊的函数,将任意长度的数据转换为固定长度的哈希...
在JavaScript中,构造函数使用new关键字进行调用,它们与工厂函数相似,但不同之处在于构造函数使用this关键字来绑定新对象的属性和方法。构造函数方式的代码示例如下: ```javascript function Car(color, doors) ...
### void指针小结 #### 一、概述 在C/C++编程语言中,`void`关键字及其关联的`void`指针类型常常让初学者感到困惑。由于对其概念理解不深,导致在实践中出现各种错误。本文旨在深入探讨`void`关键字的含义及其在...
在Java课程中,有几个核心概念和技术是必不可少的: 1. **面向对象编程(OOP)**:Java是一种纯面向对象的语言,它强调将数据和操作数据的方法封装在一起,形成对象。类是对象的模板,而实例化是创建对象的过程。...
网页制作的个人小结 网页制作是当今互联网时代一个非常重要的技术,通过这次个人网页的制作,作者对计算机有了更深层次的了解,也有了更浓厚的兴趣。作者通过把自己的网页上传到互联网上,对文件的保存、上传、下载...
虽然不常见,但`typedef`实际上是一个存储类关键字。这意味着它可以与其他存储类关键字(如`auto`, `extern`, `static`等)一起使用。 **示例:** ```c typedef int my_int; // 定义my_int为int的别名 static my_...
【Java试题小结】 1. **Applet生命周期与方法**: - 在Java中,Applet的生命周期包括初始化、启动、绘画、停止和销毁几个阶段。`init()`方法用于初始化Applet所需资源,`paint()`方法负责在屏幕上绘制图形,如线条...
C++编程语言中,有几项实践应当避免,特别是对于初学者来说,这些做法可能会导致意想不到的错误或性能问题。以下是一些需要注意的关键点: 1. **不要使用引用作为返回值**: 引用是一种别名,它不创建新对象,而是...
总结起来,`this`和`super`是Java中非常重要的两个关键字,它们帮助我们处理对象的内部引用和继承关系中的问题。正确地使用它们能确保代码的清晰性和有效性,同时提高代码的可维护性。在编写Java代码时,了解和熟练...
最后,我们澄清几个相关概念: 1. 多态性: 多态性是指一个接口可以有多种实现,这是面向对象编程的核心特性之一。在C++中,通过虚函数和纯虚函数实现。 2. 虚函数: 虚函数是基类中声明的函数,可以被派生类重写...
在C语言中,typedef是一个关键字,其主要作用是为已经存在的数据类型定义一个新的别名。这种做法可以让代码更加清晰易懂,同时也方便了复杂类型的定义。typedef关键字不仅可以用于基本数据类型,还可以用于数组、...