JAVA入门



  • 基本语法

    数组

    几种声明数组的方法

    array = new int[5];
    int[] array = new int[]{1,2,3,4};
    int array[] = new int[]{1,2,3,4};
    int[] array = {1,2,3,4};
    int array[] = {1,2,3,4};
    
    import java.util.Arrays;
    Arrays.sort(hobbys); //用于排序
    
    

    foreach 不能用于给数组赋值 因为是临时变量,只读不写。

    类与对象

    注意事项

    • float型变量赋值时需加f,否则会被当做double

    静态方法

    • 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
    • 如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量
    • 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
    • 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。

    初始化

    • 构造方法与类同名没有返回值

    • 初始化块

      public HelloWorld() { 
      		System.out.println("通过构造方法初始化name");
      		name = "tom";
      	}
          // 初始化块
      	{ 
      		System.out.println("通过初始化块初始化sex");
      		sex = "男";
      	}
          // 静态初始化块
      	static { 
      		System.out.println("通过静态初始化块初始化age");
      		age = 20;
      	}
      

    封装

    • 使用封装,在属性的名字前边加上private,可以限制对象属性的直接修改和访问。用户通过对象的set和get方法对属性进行读写。
    • 右键编辑器,generate可以自动生成set get方法;
    • this关键字可以避免类方法中的形参与类的属性同名的情况,使用this即可访问类的属性。

    内部类

    • 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类

    • 内部类的方法可以直接访问外部类的所有数据,包括私有的数据

    • 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便

      public class HelloWorld{
          
          //外部类的私有属性name
          private String name = "imooc";
          
          //外部类的成员属性
          int age = 20;
          
      	//成员内部类Inner
      	public class Inner {
      		String name = "爱慕课";
              //内部类中的方法
      		public void show() { 
      			System.out.println("外部类中的name:" + HelloWorld.this.name);
      			System.out.println("内部类中的name:" + name);
      			System.out.println("外部类中的age:" + HelloWorld.this.age);
      		}
      	}
          
      	//测试成员内部类
      	public static void main(String[] args) {
              //创建外部类的对象
      		HelloWorld o = new HelloWorld (); 
              //创建内部类的对象
      		Inner inn = o.new Inner();
              //调用内部类对象的show方法
      		inn.show();
      	}
      }
      }
      

    静态内部类

    • 静态内部类不能直接访问外部类的非静态成员,但可以通过 new 外部类().成员 的方式访问
    • 创建静态内部类的对象时,不需要外部类的对象,可以直接创建 内部类 对象名= new 内部类();

    方法内部类

    • 方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法的内部可见,即只在该方法内可以使用。
    • 由于方法内部类不能在外部类的方法以外的地方使用,因此方法内部类不能使用访问控制符和 static 修饰符 。

    系统中的包

    包的命名都是小写字母

    包名称 功能
    java.lang.(类) 包含java语言基础的类
    java.util.(类) 包含java语言中各种工具类
    java.io.(类) 包含输入、输出相关功能的类

    1539917025552

    //类名相同的情况下import包
    import testP.testClass
    testClass hello = new testClass(); //是testP的Class
    testP.testClass helloP = new testP.testClass(); //是testP的Class
    //类名相同的情况下不import包
    testClass hello = new testClass(); //是test的Class
    testP.testClass helloP = new testP.testClass(); //是testP的Class
    

    1539917652123

    继承

    • 构造子类对象时,先构造一个父对象,然后再调用子对象的构造函数。
    • 属性里的值是先初始化的,然后才调用构造方法里的对值得安排。
    • super.属性or方法 可以调用父类得属性和方法
    • 要用super();作为父类的构造方法,一定要放在第一行。否则自动调用无参的父类构造方法。
    • 如果父类定义了有参数的构造方法,则子类构造方法中若缺省super()就会报错。

    Object

    toString()

    • 默认返回这个类在内存中的地址。
    • 重写这个可以返回属性。
    • 使用时,System.out.PrintIn(ClassA)

    equals()

    • 比较两个是否指向同一地址。
    • 重写可以 判断某些属性是否一样。
    • 使用时,ClassA.equal(ClassB)

    getclass()

    • 用于判断,是否为同一个类。
    ClassA.getclass() == ClassB.getclass()
    

    final

    • 修饰类,不可以被继承。
    • 修饰方法,不允许被覆盖。
    • 修饰属性,将其变为常量,不会进行隐式得初始化(类得初始化属性必须有值),或在构造方法中赋值。

    多态

    引用多态

    • 父类的引用可以指向子类的对象
    • 子类的引用不可以指向父类的对象
    Animal obj1 = new Animal();
    Animal obj2 = new Dog(); //可以  用父类的引用指向子类的对象
    Dog obj3 = new Animal(); //不可以用子类的引用指向父类的对象
    

    方法多态

    • 创建本类对象时,调用的方法为本类方法
    • 创建子类对象时,调用的方法为子类重写的方法或者继承的方法
    • 子类独有的新方法,是不能通过obj2调用的
    Animal obj1 = new Animal(); //本类有Eat方法
    Animal obj2 = new Dog(); //Dog有重写的方法
    Animal obj3 = new Cat(); //Cat无方法
    obj1.eat(); //父类的方法	
    obj2.eat(); //Dog重写的方法
    obj3.eat(); //父类的方法
    

    抽象类

    • 某些情况下,某个父类只是知道其子类应该包含的怎样的方法,但不知道这些子类如何实现这些方法。
    • 从多个具有相同特征的类中抽象出一个抽象类,从这个抽象类作为子类的模板,从而避免了子类设计的随意性。

    使用规则

    • abstract 定义抽象类
    • abstract定义抽象方法,只有声明,不需要实现
    • 包含抽象方法的类是抽象类
    • 抽象类中可以包含普通的方法,也可以没有抽象方法
    • 抽象类不能直接创建,可以测定仪引用变量。
    public abstract class absClass {
        public abstract void call();
        public abstract void message();
    }
    
    //抽象模板上规定的两个函数都不可以缺少,可以多其他的函数,否则会报错
    public class subClass extends absClass {
        public void call() {
            System.out.println("call");
        }
    
        public void message() {
            System.out.println("message");
        }
        public void fuck() {
        }
    }
    //调用时
    absClass class1 = new subClass();
    class1.call();
    class1.message();
    
    

    友元

    类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

    class Box
    {
       double width;
    public:
       double length;
       friend void printWidth( Box box );
       void setWidth( double wid );
    };
    
    // 成员函数定义
    void Box::setWidth( double wid )
    {
        width = wid;
    }
    
    // 请注意:printWidth() 不是任何类的成员函数
    void printWidth( Box box )
    {
       /* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */
       cout << "Width of box : " << box.width <<endl;
    }
    

    接口

    • 接口限制了这些类中必须提供某些方法
    • interface关键字声明 implements调用
    • 接口中只可以有常量和抽象方法
    • 常量自动添加public static final 修饰符
    • 方法自动添加public abstract修饰符
    [修饰词] interface 接口名 extends 父类[extends 父接口1,父接口2]
    {
    	零到多个常量定义
    	领导多个抽象方法的定义
    }
    

    匿名内部类的方法实现接口

    //声明一个接口
    interface ItestClass{
        void playGame();
    }
    //正常使用接口
    public class subClass implements ItestClass {
        @Override
        public void playGame() {
    		System.out.println("实现接口");
        }
    }
    //匿名内部类实现接口
    ItestClass class2 = new ItestClass() {
                @Override
                public void playGame() {
                    System.out.println("匿名内部类实现接口1");
                }
            };//这里有一个分号
    
    new ItestClass()
    {
        @Override
        public void playGame() {
        System.out.println("匿名内部类实现接口2");
    }
    }.playGame();
    


  • @pencilJAVA入门 中说:

    friend

    友元函数什么鬼?C++的吧,java使用package替代


 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待