《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以修饰方法,该方法可以被继承但是不能被重写.(覆盖 ...
随机推荐
- Device Mapper 代码分析
Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备. DM以块设备的形式注册到Linux内核中,凡是挂载(或者说&quo ...
- HDFS:NameNode、DataNode、SecondaryNameNode
可以一句话描述 HDFS:把客户端的大文件存放在很多节点的数据块中. HDFS设计原则: 1,文件以块(block)方式存储: 2,通过副本机制提高可靠度和读取吞吐量: 3,每个区块至少分到三台Dat ...
- Android之触摸手势检测GestureDetector使用详解
在Android中,当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing,onSingleTapConfirmed(单击),onDoubleTap(双击)等等. 一般情 ...
- Struts 2之Servlet API
Struts 2对Servlet API进行了封装,是业务层更加独立,如果需要调用Request.Response等Servlet API有两种途径 利用ServletActinContext的静态方 ...
- UNIX网络编程——ioctl 函数的用法详解
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...
- EBS应付(AP)模块常用表
select * from ap_invoices_all INVOICE头 select * from ap_invoice_distributions_all INVOICE行 select ...
- Dynamics CRM 在Visual Studio中开启XML编辑的智能提示
对于.net开发人员来说Visual Studio这一开发工具自然是再熟悉不过,它强大的功能给我们的编程带来了极大的方便,代码智能提示就属其中一项. 在Dynamic CRM的开发中在各种工具出来之前 ...
- 4、Android UI测试
为你的APP进行UI测试是为了确保不出现意料之外的结果,提升用户的体验.如果你需要验证你的APP UI的正确性,你需要养成创建UI测试的习惯. Espresso测试框架是由Android Testin ...
- Java数据类型及类型转换
http://blog.csdn.net/pipisorry/article/details/51290064 java浮点数保留n位小数 import java.text.DecimalFormat ...
- androidstudio各版本下载地址
文件夹如下,含android studio多个版本的下载地址:http://pan.baidu.com/s/1ntmdCPN 目前有以下版本: 0.5.2: windows 0.5.4: linux ...