《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以修饰方法,该方法可以被继承但是不能被重写.(覆盖 ...
随机推荐
- Redis监控工具,命令和调优
Redis监控工具,命令和调优 1.图形化监控 因为要对Redis做性能测试,发现了GitHub上有个python写的RedisLive监控工具评价不错.结果鼓捣了半天,最后发现其主页中引用了Goog ...
- Android桌面小插件——Widget
Android桌面小插件--Widget 效果图 实现 1. 创建Widget类 创建一个Widget类,并实现页面创建的时候,就实现显示时间 package com.kongqw.kqwwidget ...
- AsyncTask还要知道的一些知识
在之前的博客中,对AsyncTask做过详细分析,而且也以小案例的形式,介绍如何基本的使用它.今天再来探讨它,更多的认识,尤其在面试中以下面方式回答,可能印象分更多一些. 面试题:讲一讲您对Async ...
- android Spinner控件详解
Spinner提供了从一个数据集合中快速选择一项值的办法.默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner ...
- 【SSH系列】Hibernate映射 -- 继承映射
开篇前言 在前面的博文中,小编介绍了hibernate中的映射,一对一,一对多,多对多,单向,双向等,今天这篇博文,小编主要来介绍一下hibernate中的继承映射,小伙伴都知道在C#中,如果想要实现 ...
- Detailed Item Cost Report (XML) timed out waiting for the Output Post-processor to finish
In this Document Symptoms Cause Solution References APPLIES TO: Oracle Cost Management - Ver ...
- Leetcode解题-链表(2.2.6)RotateList
1 题目:Rotate List Given a list, rotate the list to the right by k places, where k is non-negative. Fo ...
- Android App之间通过Intent交互
Android 最重要的功能之一是应用能够基于它要执行的"操作"向另一个应用发送用户. 例如,如果您的应用有您要在地图上显示的公司地址,您无需在显示地图的应用中构建 Activit ...
- [struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤
本文地址:http://blog.csdn.net/sushengmiyan/article/details/40349201 官方文档:http://struts.apache.org/releas ...
- OpenMP基础----以图像处理中的问题为例
OpenMP2.5规范中,对于可以多线程执行的循环有如下5点约束: 1.循环语句中的循环变量必须是有符号整形,如果是无符号整形就无法使用,OpenMP3.0中取消了这个约束 2.循环语句中的比 ...