疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java基础语法学习笔记


 

   

  判断方法重载的依据:

  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}; //后面的[ ]内必须为空,不能指定长度。