ASP.Net+Android+IOS开发------期待与您交流
<面向对象及总结-02>
(构造方法 构造代码块 静态static--的使用方法)
1. 构造方法
* 就具有重载特性,通过参数列表来进行区分和调用了
* this()语句,在构造方法之间的调用效果
* 错误: 递归构造器调用,构造方法,是不允许递归调用,就是方法自己调用自己
* this()语句,必须放在构造方法的第一行
2. 构造代码块
* 构造代码块,写在函数中,节约内存而已
* 构造代码块,写在类中 ***** 面试
* 优先于构造方法运行
* 建立对象,构造代码块就会先运行了
构造代码块在堆栈中的表现形式
3. 静态的由来 *****重点的掌握
* 给对象提供共享的数据
* 被static修饰的成员变量,变成所有对象的共享数据
* 被static修饰的成员变量,多了一种调用方式,类名.变量名
* 当数据被所有对象共享的时候,变量修饰为静态
* 如果数据是对像特有的话,不能使用静态修饰
* 静态修饰的成员变量,可以被类名调用,被对象调用
* 非静态成员变量,只能被对象调用
4. 静态内存图
* 被静态修饰内容存储在方法区的静态区中,有自己的所属,就是类
* 优先于对象存在于内存中
* 使用类名进行调用,不需要使用对象调用
* 静态区存储的内容生存时间,最长
* 静态区存储的静态变量,也有默认值
插入内存图如下
5. static关键字
* 只能修饰成员,不能修饰局部
* 静态不能直接调用非静态,静态进入内存的时候,堆中没有对象呢
先进内存的,不能访问,后进内存的,后进的,可以访问先进内存的
* 被静态修饰的方法中,不能写this,也不能写super
* 非静态方法中,可以直接访问静态变量
静态的使用:
//演示静态的使用
class Person
{
String name;
int age;
static String country;
public void show(){
System.out.println(name+".-----------.."+age+"...."+country);
}
}
class StaticDemo
{
public static void main(String[] args)
{
/*Person p1 = new Person();
p1.name = "张三" ;
p1.age = 20 ;
Person.country = "中国";
p1.show();
*/
System.out.println(Person.country) ;
Person p2 = new Person();
p2.name = "李四" ;
p2.age = 30 ;
p2.show();
Person p3 = new Person();
p3.name = "王五" ;
p3.age = 35 ;
p3.show();
}
}
6. 静态变量和实例变量的区别 *****重点的掌握
* 静态变量存储在方法区的静态区
* 实例变量跟对对象存储在堆内存中
* 静态变量直接被类名调用
* 实例变量,只能被对象调用
* 静态变量跟着类的加载而加载,随着类的消失而消失,生命最长
* 实例变量,跟随对象的加载而加载,跟对对像的消失而消失,生命相对较短
* 静态变量属于类
* 实例变量,属于对象
* 静态变量被所有对象共享
* 实例变量,是对象的特有数据
7. main方法
public
* 权限修饰符,最大权限,JVM调用main方法,必须保证main方法的权限足够大
static
* 调用main的时候,直接被类名调用
void
* 没有返回值 ,如果有返回值,返回给JVM
main
* 不是关键字,但是被java占用,不能再用这个名字了
String[] args
* main方法的参数,是一个字符串类型的数组
8. 静态什么时候使用,静态成员变量,静态成员方法
* 静态变量,就是对象中的共享数据
* 当需要完成一个功能的时候,发现有的数据,是这些功能共享的内容,使用static进行修饰
* 成员方法,什么时候用静态修饰呢
* 当方法,没有调用过,或者是访问过特有数据的时候,建立将方法定义成静态
* Arrays.sort(int[] arr);
使用方法:
class Person
{
String name;//非静态,对象特有数据
int age;//非静态,对象特有数据
static String country;//静态,对象共享数据
//show这个方法,访问了非静态的,方法,不能写成静态
public void show(){
System.out.println(name+"..."+age+"..."+country);
}
//method没有访问过,对象的特有数据,建议写成静态
public static void method(){
System.out.println(country);
}
public static void method_1(){
for (int x = 0 ;x < 5 ;x++ )
{
for (int y = 0 ; y <= x;y++ )
{
System.out.print("*");
}
System.out.println();
}
}
}
class StaticDemo2
{
public static void main(String[] args)
{
Person p = new Person();
p.method_1();
p.method();
}
}
9. 静态代码块
* 优先于构造代码块运行
* 静态代码块很多,上到下的顺序执行
* 运行一次
* 出现的原因,在运只要程序运行,会先执行静态代码块,可以调用方法的
* 面试:考察的是程序的运行顺序
/*
静态代码块
*/
class Person
{
private static int x ;
private String name;
Person(String name){
this.name = name;
System.out.println("------构造方法");
}
static void show(){
System.out.println("show...static");
}
{
System.out.println("Person----构造代码块");
}
static{
System.out.println("Person----静态代码块"+x);
show();
}
}
class StaticDemo3
{
public static void main(String[] args)
{
new Person("lisi");
//new Person("lisi");
//Person p = null;
}
}
ASP.Net+Android+IOS开发------期待与您交流
详细请查看:http://edu.csdn.net