本站已关停,现有内容仅作科研等非赢利用途使用。特此声明。
查看: 1088|回复: 0
打印 上一主题 下一主题

Android菜鸟饭团#Java中文学习#第十三课 活动笔记

[复制链接]
跳转到指定楼层
1#
发表于 2015-5-2 13:28:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Android菜鸟饭团#Java中文学习#第十三课 活动笔记

1.方法的重载:
指一个类中可以定义有相同的名字,但参数不同的多个方法。
调用时,会根据不同的参数表选择对应的方法。
class ChongZai{
   public void a(int a);
     public void a(Strting a);
     public void a(int a,int b);
}
如上就是一个重载了 而重载要满足一下条件:
1.必须是同一个类
2.方法名(也可以叫函数)一样
3.参数类型不一样或参数数量不一样
重载的作用  
ChongZai   cz =new ChongZai();
cz.a(1);                       //调用a(int a);
cz.a("传的参数");         //调用a(String a)
cz.a(1,2);                     //调用a(int a,int b)
上面已经说了调用哪个方法了  而这个调用方法是程序按照你输入的参数来判断调用哪个方法的

2.三元运算符
a>b?a:b
这个是三元运算符

?左边进行判断,右边进行取值
这是三元运算符等效于

if(a>b)

        c=a;

else

        c=b;
2.this  关键字
a)         在类的方法定义中使用的this关键字代表使用该方法的对象的引用。
b)         当必须指出当前使用方法的对象是谁时要用this
c)         有时使用this可以处理方法中的成员变量和参数重名的情况。
d)         This可以看作是一个变量,它的值是当前对象的引用。

例如,下面的代码:
class Person{
private String name;
private int age;
public Person(String n,int a)
{   name=n;
age=a;
public String getInfo()
{  
return "姓名:"+name+",年龄:"+age;
}
}
从Person类的构造方法中public Person(String n,int a),第一个参数使用n表示,第二个参数用a表示,那么从n和a中并不能明确的发现参数表示的集体含义。
代码的改进
public class Test
{
public static void main(String [] args){  
Person per=new Person("张三",30);
System.out.println(per.getInfo());
}
}  
class Person{
private String name;
private int age;
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getInfo()
{
return "姓名:"+name+",年龄:"+age;
}
}
注意点:
在使用this关键字调用其他构造方法的时候,有以下几点限制:
·this()调用构造方法的语句只能放在构造方法的首行。
·在使用this调用本类中其他构造方法的时候,至少有一个构造方法是不用this调用的。否则会进入无限的循环调用中,如下面的代码:
public Person()
{  
this("xzlmark",20);
  System.out.println("新对象实例化");
}
public Person(String name){
  this();//调用无参的构造方法
this.name=name;
}  
public Person(String name,int age)
{   this(name);//调用一个参数的构造方法
this.age=age;
}
4.     static 关键字
1. 静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法

声明为static的方法有以下几条限制:
· 它们仅能调用其他的static 方法。
· 它们只能访问static数据。
· 它们不能以任何方式引用this 或super。

class Simple {

static void go() {

System.out.println("Welcome");

}

}



public class Cal {

public static void main(String[] args) {

Simple.go();

}

}

调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。



2. 静态变量

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了

class Value {

static int c = 0;
static void inc() {
c++;
}
}
public class Count2 {
public static void prt(String s) {
System.out.print(s);
}
public static void main(String[] args) {
Value v1, v2;
v1 = new Value();
v2 = new Value();
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v1.inc();
prt(" v1.c=" + v1.c + " v2.c=" + v2.c);
}
}
结果为:v1.c=0 v2.c=0 v1.c=1 v2.c=1
由此可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。
值得探讨的是静态变量的初始化问题。
Static代码块
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:

class Value3 {
static int c = 0;
Value3() {
c = 15;
}
Value3(int i) {
c = i;
}
static void inc() {
c++;
}
}
public class Count {
public static void prt(String s) {
System.out.println(s);
}
Value3 v = new Value3(10);
static Value3 v1, v2;
static {//此即为static块
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v1 = new Value3(27);
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v2 = new Value3(15);
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
}
public static void main(String[] args) {
Count ct = new Count();
prt("ct.c=" + ct.v.c);
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
v1.inc();
prt("v1.c=" + v1.c + " v2.c=" + v2.c);
prt("ct.c=" + ct.v.c);
}
}
结果为:v1.c=0 v2.c=0
v1.c=27 v2.c=27
v1.c=15 v2.c=15
ct.c=10
v1.c=10 v2.c=10
v1.c=11 v2.c=11
ct.c=11
这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。



3.static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。
4补充:
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。

用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。
static 变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。
static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:
类名.静态方法名(参数列表...)
类名.静态变量名
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块。
static变量
按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
static方法
静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法 (就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!这个需要去理解,想明白其中的道理,不是记忆!!!
因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
最后为大家提供类修饰符的作用范围:

访问包位置
类修饰符
修饰符
Private
Protected
默认修饰符
Public
本类
可见
可见
可见
可见
同包其他类
不可见
可见
可见
可见
其他包的类
不可见
不可见
不可见
可见
同包的子类
不可见
可见
可见
可见
其他包的子类
不可见
可见
不可见
可见

【书记员:李振有】

每一个技术小白都有一个成为大神的梦想,现在Android菜鸟饭团就给你这个成就梦想的机会。我们提供最新的Android技术教学,只要你又耐心和毅力就一定会在这里有所收获。
Android菜鸟饭团南阳GDG组织发起,秉承着开放、分享、创新的原则,希望通过GDG社区的力量能够给更多的想要学习Android开发技术的小白们创造一个学习,交流,分享的环境。同往常的GDG活动一样,我们依然是任性的一个子都不要,并且还在周六的分享中提供盒饭和不定期的惊喜小礼物呦~所以快来加入我们吧,为你的大神梦想迈出第一步。
把你的个人信息和申请理由快快发送到android@chuang1.net,前来加入我们吧

ChinaGDG.com
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表