《java入门第一季》之面向对象(static关键字)
/*
static的特点:(它可以修饰成员变量,还可以修饰成员方法)
A:随着类的加载而加载
回想main方法。
B:优先于对象存在
C:被类的所有对象共享
举例:班级的学生应该共用同一个班级编号。
其实这个特点也是在告诉什么时候使用静态?
如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
举例:
饮水机(用静态修饰)
水杯(不能用静态修饰)
D:可以通过类名调用
其实它本身也可以通过对象名调用。
推荐使用类名调用。 静态修饰的内容一般我们称其为:与(类相关)的,(类)成员
*/
class Student {
//非静态变量
int num = 10; //静态变量
static int num2 = 20;
} class StudentDemo {
public static void main(String[] args) {
Student s = new Student();
System.out.println(s.num); System.out.println(Student.num2);//用类名调用(推荐使用类名调用)
System.out.println(s.num2);//用对象名调用,以前的方式,天经地义
}
}
/*
定义一个人类 姓名和年龄都是变化的,这个能接收,因为每个人的姓名和年龄是不同的。
但是,现在选取的几个人都是中国人,他们的国籍是一样的。
一样的国籍,每次创建对象,在堆内存都要开辟这样的空间,
我就觉得有点浪费了。怎么办呢?
针对多个对象有共同的这样的成员变量值的时候,
Java就提供了一个关键字来修饰:static。
static修饰的变量或者方法被所有的对象共用
*/
class Person {
//姓名
String name;
//年龄
int age;
//国籍
//String country;
static String country; public Person(){} public Person(String name,int age) {
this.name = name;
this.age = age;
} public Person(String name,int age,String country) {
this.name = name;
this.age = age;
this.country = country;
} public void show() {
System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
}
} class PersonDemo {
public static void main(String[] args) {
//创建对象1
Person p1 = new Person("邓丽君",16,"中国");//静态修饰的变量只需要赋值一次就可以了。
p1.show(); //创建对象2
//Person p2 = new Person("杨幂",22,"中国");
//p2.show();
Person p2 = new Person("杨幂",22);
p2.show(); //创建对象3
//Person p3 = new Person("凤姐",20,"中国");
//p3.show();
Person p3 = new Person("凤姐",20);
p3.show();
System.out.println("-----------------");
p3.country = "美国";//静态的修改了,其他在调用的时候都会修改
p3.show(); p1.show();
p2.show();
}
}
/*
static关键字注意事项
A:在静态方法中是没有this关键字的
如何理解呢?
静态是随着类的加载而加载,this是随着对象的创建而存在。驴和骡子不相及
静态比对象先存在。驴优先于骡子存在
B:静态方法只能访问静态的成员变量和静态的成员方法
静态方法:
成员变量:只能访问静态成员变量。他要访问的变量要定义为静态的
成员方法:只能访问静态成员方法 他要访问的方法要定义为静态的
非静态方法:
成员变量:可以是静态的,也可以是非静态的。它都可以访问
成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
简单记:
静态方法只能访问静态的变量或者方法。
*/
class Teacher {
public int num = 10;
public static int num2 = 20; public void show() {//定义一个非静态的方法
System.out.println(num); //隐含的告诉你访问的是成员变量
System.out.println(this.num); //明确的告诉你访问的是成员变量,this该类中的成员变量
System.out.println(num2);//非静态方法中可以访问静态的变量 function();
function2();//非静态的方法中可以访问静态的方法
} public static void method() {//静态方法
//无法从静态上下文中引用非静态 变量 num
//System.out.println(num);//静态不可以引用非静态的
//System.out.println(this.num);//无法从静态上下文中引用非静态 变量 this.就是说在静态方法中是没有this关键字的
System.out.println(num2);//静态方法访问静态的成员变量和静态的成员方法,这里不报错 //无法从静态上下文中引用非静态 方法 function()
//function();//静态不可以引用非静态的方法
function2();//静态方法访问了静态的成员方法不会报错
} public void function() {//非静态,只可以被非静态方法访问 } public static void function2() {//静态的可以被静态方法访问也可以被非静态方法访问 }
} class TeacherDemo {
public static void main(String[] args) {
//创建对象
Teacher t = new Teacher();
t.show();
System.out.println("------------");
t.method();//静态的方法用对象来调用 ,这是最原始的方式调用,天经地义
Teacher.method();//静态的方法用类名来调用,推荐使用这个语句,因为method为类Teacher下的静态方法。
}
}
《java入门第一季》之面向对象(static关键字)的更多相关文章
- JAVA入门第一季(mooc-笔记)
笔记相关信息 /** * @subject <学习与创业>作业1 * @author 信管1142班 201411671210 赖俊杰 * @className <JAVA入门第一季 ...
- Java入门第一季——从此投身Java??
找工作告一段落. 最后的工作呢,和java紧密相关,也是阴差阳错,不过都是软件开发,都好了,不过以后侧重点肯定是在java这边,php有机会还是一直学下去的,那么美的说~ Java开发第一季 一.简 ...
- 《java入门第一季》之面向对象(谈谈接口)
软件中有接口,这里的接口与硬件中的接口还是有很大区别的. 这里介绍接口不考虑JDK8的新特性(JDK8开始接口里面可以有非抽象方法了,介绍JDK8新特性可能要到整个第一季写完吧!) 还是直接进入接口的 ...
- 《java入门第一季》之Arrays类前传(排序案例以二分查找注意的问题)
根据排序算法,可以解决一些小案例.举例如下: /* * 把字符串中的字符进行排序. * 举例:"dacgebf" * 结果:"abcdefg" * * 分析: ...
- 《java入门第一季》之java语法部分小案例
到这里举一个小例子把语法部分梳理一下,下一节开始进入java正式基础--面向对象的学习整理. 案例: /* 某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全, 在传递过程中需要加密 ...
- Java入门第一季
慕课网:http://www.imooc.com/learn/85 Java入门知识第一季 1.Java开发环境和IDE的使用: 2.变量和常量 3.常用的运算符 4.流程控制语句 5.数组:使用Ar ...
- 《java入门第一季》二维数组三个案例详解
案例一:遍历二维数组 /* 需求:二维数组遍历 外循环控制的是二维数组的长度,其实就是一维数组的个数行数. 内循环控制的是一维数组的长度,每一行,一维数组元素分别的个数. */ class Array ...
- 《java入门第一季》之面向对象(static关键字内存图解)
- 《java入门第一季》之面向对象(final关键字)
/* final可以修饰类,方法,变量 特点: final(可以修饰类),该(类)(不能被继承).一旦修饰了一个类,这个类就不能被继承了! final以修饰方法,该方法可以被继承但是不能被重写.(覆盖 ...
随机推荐
- Android简易实战教程--第三十六话《电话录音》
今天完成一个简单的电话录音功能,即接通电话后,立即录下自己打电话的声音.实现起来比较简单:一个服务,一个TelephonyManager.一个MediaRecorder就够了. 1.布局提供一个开启录 ...
- [CSDN_Markdown]使用LaTeX基本数学公式
简介 以前我很头疼在博文里写公式,一直期盼CSDN的博文编辑器能支持LaTeX 公式输入,今天终于可以使用这个功能了!此文主要讨论如何在CSDN的Markdown编辑器中写 LaTeX 公式! 使用L ...
- Spark:Spark 编程模型及快速入门
http://blog.csdn.net/pipisorry/article/details/52366356 Spark编程模型 SparkContext类和SparkConf类 代码中初始化 我们 ...
- FLAnimatedImage -ios gif图片加载框架介绍
简介 FLAnimatedImage 是 Flipboard 团队开发的在它们 App 中渲染 GIF 图片使用的库. 后来 Flipboard 将 FLAnimatedImage 开源出来供大家使用 ...
- Apache shiro集群实现 (一) shiro入门介绍
近期在ITOO项目中研究使用Apache shiro集群中要解决的两个问题,一个是Session的共享问题,一个是授权信息的cache共享问题,官网上给的例子是Ehcache的实现,在配置说明上不算很 ...
- Spark技术内幕:Shuffle Pluggable框架详解,你怎么开发自己的Shuffle Service?
首先介绍一下需要实现的接口.框架的类图如图所示(今天CSDN抽风,竟然上传不了图片.如果需要实现新的Shuffle机制,那么需要实现这些接口. 1.1.1 org.apache.spark.shuf ...
- Redis 学习笔记4: Redis 3.2.1 集群搭建
在CenOS 6.7 linux环境下搭建Redis 集群环境 1.下载最新的Redis版本 本人下载的Redis版本是3.2.1版本,下载之后,解压,编译(make): 具体操作可以参考我的博文:R ...
- JAVA面向对象-----构造方法
我们人出生的时候,有些人一出生之后再起名字的,但是有些人一旦出生就已经起好名字的.那么我们在java里面怎么在对象一旦创建就赋值呢? 构造方法作用 构造方法作用:对对象进行初始化. 构造函数与普通的函 ...
- Python Skelve 库
在Python中有一个简单的轻量级的类似于Key-value的存储型数据库,那就是Skelve.下面就来一起看一看这个库的简单的使用吧. 小例子 我本人比较喜欢从例子出发,然后再来研究这些内部的行为. ...
- Android初级教程:屏幕分辨率
在app编码中经常需要获取手机的屏幕分辨率(宽*高),原来我直接上网拷贝代码,但在使用过程中却发现诸多不便. 不便一:下面代码中的getWidth和getHeight在adt上提示deprecated ...