第Ⅱ期Android菜鸟饭团#Java学习#第八课 活动笔记
一.This 关键字:
在类的方法定义中使用的this关键字代表使用该方法的对象的使用。 当必须指出当前使用方法的对象是谁要使用this 又是使用this可以处理方法中成员变量和参数重名的情况。 this可以看作是一个变量,它的值是当前对象的引用
【示例】 Public class leaf{ Int i=0; Leaf (int i) { this.i=i;} Leaf increament(){ I++; Return this; } Void print (){System.out.println(“i=”+i);} Public static void main (String[] args){ Leaf leaf =new Leaf(100); Leaf.increament().increament().print(); } } |
二.Static 关键字:
再类中,用static声明的成员变量为静态变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有都想来说,static成员变量只有一份。 用static声明的方法为静态法法,在调用该方法是,不会讲该对象的引用传递给它,所以在static法中不可访问非static成员。 静态方法不再是针对于某个对象调用,所以不能访问非静态成员 可以通过对象引用或类名(不需要实例化)访问静态成员。
三.Package 和 import语句:
(若缺省该语句,则指定为无名包)。 他的格式: 7.package pkg1[.pkg2[pkg3...]]; java编译器把包对应于文件系统目录管理,package语句中,用’.’来指明包目录的层次,例如如何使用语句 package com.sxt;则该文件中所有的类位于.\com\sxt目录下 如果将一个类打包,则使用该类时,必须使用该类的全名(例如:com.sxt.Myclass),java 编译器才会在找到该类。 也可以使用import在文件的开头引入要使用到的类;例如:
Import com.sxt.Myclass; Import java.util.*;//引入java.util包中所有的类 ... ... ... Myclass myclass = new Myclass();//可以直接使用类名 |
可以不需要import语句直接使用java.lang包中的类。 如果想将一个雷放入包中,在这个类源文件第一句写package 必须保证该类的class文件位于正确目录下(该类的源码可能会产生影响,删除或转移到另外的目录) 另外的类想访问的话:写全名;引入;*;具体类名;访问位于同一个包中的类不需要引入 必须class文件的最上层包的父目录位于classpath下
四.J2SDK中主要的包介绍:
java lang—包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。 java awt—包含了构成敞口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。 java applet—包含applet运行所需的一些类。 java net—包含执行与网络相关的操作的类。 java io—包含能提供多种输入/输出功能的类。 java util—包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。
五.静态方法能否重载:
静态方法只能控制静态变量(他们本身没有),静态方法不能被重载和覆盖。
六.Static的作用域:
作用域只在他所在的那语句块内,也就是static后的面的这组大括号内
七.静态方法和非静态方法
● 生命周期(Lifecycle): 静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。 非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。 ● 在内存中存储位置 静态方法和静态变量创建后始终使用同一块内存,是连续的。 非静态方法会存在于内存的多个地方,是离散的。 ● 效率 静态方法的使用效率比非静态方法的效率高。 ● 线程安全 静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。 非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。 ● 使用范围 静态方法:⒈ 有静态属性的类,一般会定义静态方法。⒉ 没有属性的类,一般会定义静态方法。⒊ 如果一个方法与他所在类的实例对象无关,那么它就应该是静态的。静态方法可以被继承但是不能被覆盖。 ● 总计 如果静态方法在系统中定义太多,会占用大量的资源,最后造成内存溢出,所以静态方法不能滥用。如果从线程安全、性能、兼容性上来看,选用实例化方法为宜。 八.静态变量和动态变量区别: 静态变量可以用方法直接调用。非静态变量只能有此类的对象调用。 内存中的各种区: 堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。 方法区: 1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。 2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。 小问题:sid++是先赋值再加加;++sid是先加加再赋值
每一个技术小白都有一个成为大神的梦想,现在Android菜鸟饭团就给你这个成就梦想的机会。我们提供最新的Android技术教学,只要你又耐心和毅力就一定会在这里有所收获。 Android菜鸟饭团由 南阳GDG组织发起,秉承着开放、分享、创新的原则,希望通过GDG社区的力量能够给更多的想要学习Android开发技术的小白们创造一个学习,交流,分享的环境。同往常的GDG活动一样,我们依然是任性的一个子都不要,并且还在周六的分享中提供盒饭和不定期的惊喜小礼物呦~所以快来加入我们吧,为你的大神梦想迈出第一步。 |