java学习记录笔记

来源:互联网 发布:迅速出效果图软件 编辑:程序博客网 时间:2024/05/26 12:57

判断方法重载的依据:

1.必须是在同一个类中
2.方法名相同
3.方法参数的个数,顺序或类型不同
最重要的是④-_-||
4.与方法的修饰符或返回值没有关系

static 出现的必要性:

希望基于一个类创建的所有对象能共享同一个成员,
此时用到了static。

java中被static修饰的成员成为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。

**静态成员可以使用类名直接访问,也可以使用对象名进行访问。
更推荐使用类名访问~****重点内容**

静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收!

使用static修饰的部分,可以通过两种方法调用:
1*.使用类名调用静态*
eg: Outer.a
2*.创建对象,然后通过对象名调用,更推荐类名调用*
Outer o = new Outer();
o.a;

注意:

1.静态方法中可以 直接调用同类中的静态成员,但不能直接调用非静态成员。

public class HelloWorld{    String name="imooc";    static String hobby ="imooc";    public static void print(){        System.out.println(name);//不能直接调用非静态变量,会报错        System.out.println(hobby);    }}

如果希望在静态方法中调用非静态变量,可以通过创建类的对象来访问非静态变量。
HelloWorld hw = new HelloWorld();
System.out.println(hw.name);

2.在普通成员方法中,可以直接访问同类的非静态变量和静态变量。

String name = "imooc";static String hobby = "imooc";public void show(){    System.out.println(name);    System.out.println(hobby);}

3.静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。

public void show(){    System.out.println("welcom to imooc");}public static void print(){    System.out.println("welcome to imooc");}public static void main(String[] args){    //静态方法调用非静态方法,必须通过对象来调用    HelloWorld hello = new HelloWorld();    hello.show();    //但是可以随便调用静态方法    print();}

即:静态调用非静态必须通过对象来调用,静态调用静态,非静态调用非静态,非静态调用静态都可以直接调用!

Java中的static使用之静态初始化块

Java中可以通过初始化块进行数据赋值。
eg:
public class HelloWorld{
String name;//定义一个成员变量
{
name=”imooc”;
}
}

在类的声明中,可以包含多个初始化块,当创建类的实例时,就会一次执行这些代码块。如果使用static修饰初始化块,就称为静态初始化块。

**注意:
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。**

package com.edu.hpu.test;public class StaticTest1 {    int num1;    int num2;    static int num3;    public StaticTest1(){        num1 = 91;        System.out.println("通过构造方法为变量num1赋值");    }    {//初始化块        num2=74;        System.out.println("通过初始化块为变量num2赋值");    }    static {//  静态初始化块        num3= 89;        System.out.println("通过静态初始化块为变量num3赋值");    }    public static void main(String[] args) {        // TODO Auto-generated method stub        StaticTest1 st = new StaticTest1();        System.out.println("num1:"+st.num1);        System.out.println("num2:"+st.num2);        System.out.println("num3:"+st.num3);        StaticTest1 st1 = new StaticTest1();    }}

代码运行结果如下:

通过静态初始化块为变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:91
num2:74
num3:89
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值

可以看出在指定代码的时候是优先执行初始化块的,在执行初始化块的时候也是有先后顺序的,优先执行静态初始化块。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 st1 时并未执行静态初始化块。

Java中的封装:

封装实现的步骤:
(一)修改属性的可见性:
设为private
(二)创建getter/setter方法:
用于属性的读写
(三)在getter/setter方法中加入属性控制语句:
对属性值的合法性进行判断。

封装的类名称冲突从而引入了 包 的概念.

包的作用:

  • 管理Java文件,解决名称冲突。
    包的命名规范:
  • 包名间用‘.’隔开。 必须放在Java源程序的第一行。
  • 通过import 关键字,在某个文件使用其他文件中的类。
  • java中包的命名规范,全小写字母拼写。

this关键字:

1.this关键字代表当前的对象

this.属性 :操作当前对象的属性。
this.方法 :调用当前对象的方法。

2.封装对象的属性的时候,经常会使用this关键字。

Java中的内部类

1.内部类就是定义在另一个类里面的类。
与之对应,包含内部类的类被称为外部类。
注意:
内部类也是一个类,可以有自己的成员方法和成员变量。

2.内部类的主要作用是:
1)内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。
2)内部类的方法可以直接访问外部类的所有数据,包括私有的数据。
3)内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便。

**3.内部类的种类:
1)成员内部类
2)静态内部类
3)方法内部类
4)匿名内部类**

1. 成员内部类:

内部类中最常见的内部类,也称为普通内部类。

1.Inner类定义在Outer类的内部,相当于Outer类的一个成员变量的位置,Inner类可以使用任意访问控制符,如public ,protected,private等

2.Inner类中定义的test()方法可以直接访问Outer类中的数据,而不受访问控制符的影响,如直接访问Outer类中的私有属性a;

3.定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象,
即:内部类 对象名 = 外部类对象.new 内部类();

4.编译上面的程序后,会发现产生两个.class文件。
包括内部类的.class 文件,和内部类的.class文件,
但是成员内部类的.class文件是这样的格式的:
外部类名$内部类名.class

重点:
1.外部类是不能直接使用内部类的成员和方法的。可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法。

2.如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用this关键字。

public class Outer{    int b=1;    public class Inner{        int b=2;        public void test(){            System.out.println("访问外部类的b:"+Outer.this.b);            //访问外部类中的成员属性b            System.out.println("访问内部类的b:"+b);        }    }}

2.Java中的静态内部类

静态内部类是static修饰的内部类,特点如下:

1.静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员 的方式访问

2.如果外部类的静态成员与内部类的成员名称相同,可通过”类名.静态成员”访问外部类的静态成员。如果外部类的静态成员与内部类的成员名称不相同,则可以通过”成员名”直接调用外部类的静态成员。

3.创建静态内部类的对象时,不需要外部类的对象,可以直接创建
内部类 对象名 = new 内部类();

//外部类public class Souter{    private int a = 99;    static int b=1;    //静态内部类    public static class SInner{        int b=2;        public void test(){            System.out.println("访问外部类中的b:"+SOuter.b);            System.out.println("访问内部类中的b:"+b);        }    }    public static void main(String[] args){    //直接创建内部类的对象。    SInner si = new SInner();    //调用test()方法    si.test();    }}

成员内部类与静态内部类的异同:

相当于静态变量与非静态变量的异同有类似之处。
静态内部类可以直接访问外部类的静态变量,但是不能直接访问外部类的非静态变量。
雷同于:
即:静态调用非静态必须通过对象来调用,静态调用静态,非静态调用非静态,非静态调用静态都可以直接调用!
但是两者在内部类的变量名与外部类的变量名一致时,在调用外部类的变量时,需要添加外部类名+变量名。成员内部类还需要+this关键字。

3.Java中的方法内部类:

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。

//外部类public class Mouter{    public void show(){            final int a=25;//常量            int b=13;            //方法内部类            class MInner{                int c=2;                public void print(){                System.out.println("访问外部类的方法中的常量a:"+a);                System.out.println("访问内部类的变量c:"+c);            }        }        MInner mi = new MInner();        mi.print();    }    public static void main(String[] args){    Mouter mo = new MOuter();    mo.show();    }}

注意:
由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和static修饰符。

零碎知识点:

可以通过(int)(Math.random()*100)生成100以内的随机数
java里面给成员变量默认赋初始值。
局部变量不会给赋予初始值。
如何声明数组
语法:
数据类型[] 数组名; //int[] scores;
数据类型 数组名[]; //int scores[];

数组名 = new 数据类型[数组长度]; //scores = new int[29];

可以合并,即声明数组的同时为它分配空间。
int[] scores =new int[5];

Java中还提供了另外一种直接创建数组的方式,它将声明数组,分配空间和赋值合并完成。
int[] scores = {23,435,546,4351};
它等价于 :
int[] scores = new int[]{23,435,546,4351}; //后面的[ ]内必须为空,不能指定长度。

0 0
原创粉丝点击