java基础梳理--朝花夕拾

Posted 何年何月生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java基础梳理--朝花夕拾相关的知识,希望对你有一定的参考价值。

1、了解面向对象的编程思想以及面向对象的特性;

对象:
    EveryThing is Object; 万物皆是对象,在程序中,我们可以将类、接口、方法、属性等都认为是对象;
面向对象:
    是一种程序设计方法,它以对象作为基本的单元来构建系统,它利用对象将系统的复杂性隐藏在对象里(即封装),从而构建大型的工业级系统和大型系统。
面向对象包括三个过程:
    面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)。
面向对象的三个特性:
    继承、封装、多态
面向对象和面向过程的区别?
    面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 
    面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。 

2、类、属性、方法以及return关键词的使用;

类:
  Java是面向对象的,class(类)可以看做是java中的对象,类中包含:方法(这个对象能做什么)、属性(这个对象具有什么特点)
  类:汽车
  属性:颜色、品牌、引擎等
  方法:启动、行驶、刹车
  我们可以将具有不同特点的不同的事物归为不同的类;
  
类的声明:
    [访问修饰符] class 类名{

    }

例如:
  public class Person{//访问修饰符 public class Person //类名
     private String name;//类的属性
     private String city;
     private String cardno;
     private String eyesColor;
     private String faceColor;
     public void wakeUp(String name,String time){//起床方法
      System.out.println(name+”起床时间:”+time);
      }
     public void sleep(String name,String time){//睡觉方法
      System.out.println(name+”睡觉时间:”+time);
      }
  }
  
属性:
    类的属性即类中声明的变量,也叫做类变量、成员变量、全局变量,可供多个方法调用;
    要掌握:全局变量、局部变量开发中的使用;

方法:
(1)定义无返回值方法:
  [public|private|protected|final]  void 方法名(参数可有可无){

  }
(2)定义有返回值方法:
 [public|private|protected|final]   返回值类型   方法名(参数可有可无){
   操作...
  return 返回值(跟方法名前面类型必须一致);
 }
 p.s. void关键词:用于方法的声明,void表示无返回值,表示此方法执行完毕后,不反回任何结果;
      return 关键词:用于方法体中,表示该方法执行完毕后,会返回一个指定类型的结果或者数据值;
     
returnbreak、continue区别:
    return 跳出整个方法体,表示该方法具有返回值;return后面任何语句不会被执行;
    break:表示退出当前循环,用于循环或者switch case语句段中;
    continue:只能用在循环中,表示退出当前循环,继续下面循环;

3、构造方法、实例化(new关键词的使用);

构造方法:
构造方法必须满足如下几个条件:
1、声明时方法名必须跟当前类名一致;
2、不能使用return,即构造方法无返回值;但也不能使用void关键词;
3、不能被static、finalsynchronizedabstract、native修饰;
任何一个类都具有一个隐式无参构造方法;

例如:
    public class Test{
        private String x,y;
        public Test(){}//无参数构造方法
          public Test(String x,String y){//有参数的构造方法
          this.x=x;
          this.y=y;
         }
    }
    
构造方法主要用于:初始化成员变量;
构造方法执行过程:new实例化时直接执行;
例如:
public class Person{
  private String username;
  private int age;
  public Person(){}
  public Person(String username,int age){//构造方法初始化成员变量
      System.out.println(username);
      System.out.println(age);
      this.age=age;
      this.username=username;
  }
  public static void main(String args[]){
    Person person1=new Person("张三",23);
        System.out.println(person1.username);
    Person person1=new Person("张三",23);
        System.out.println(person2.username);
  }
}

实例化(new):
    在面向对象中,实例化过程即通过类实现对象的创建(类创建对象的过程);
    实例化过程中,会执行相应类的构造方法;对象是类的引用,类是对象的模板;
    例如:
       1.人是一个类,而名字叫“张三”的这个人,他是人类中一个具体实例;
       2.实例化一个字符串对象:
           String str=new String(“admin”);
       3.实例化类对象:
      public class Person{
        private String cardno;private String name;
        public Person(){ }
        public Person(String cardno,String name){
         this.name=name;
         this.cardno=cardno;
       }
       public void sleep(){
         System.out.println(“sleeping....”);
       }
       public static void main(String args[]){
           Person person=new Person(“2323123123”,“SMITH”);//实例化Person类对象,此时执行有两个参数的构造方法;
           person.sleep();
       }
      }

 

4、static 、this关键词的使用;

static 关键词:
    1、static 修饰方法,该方法叫做静态方法(也叫做类方法),可直接通过这个类的类名打点直接调用;
    2、静态方法中不能使用this/super关键词,静态方法不能直接调用当前类中的非静态方法(或非静态属性),必须通过new实例化后在调用;而对于非静态成员方法,它访问静态成员方法/变量显然是毫无限制的。
    3、static声明的方法和属性,该对象已经被实例化,且只能被实例化一次
    4、static修饰的属性,被相同对象的不同实例所共享;
例1:
public class Person{
  public static int age;
  
  public void run(){
    System.out.println(“RUN”);
   }
   
  public static void sleep(){
        System.out.println(“SLEEP”);
  }
  
  public static void test(){
    run();//错误,静态方法中不可直接调用非静态方法或者非静态变量;
    int age=this.age;//错误,当前方法是静态方法,不能使用this关键字
    Person person=new Person();
    person.run();
    
    sleep();//正确
    Person.sleep();//正确   
  }
}

例2:
public class Test {
   //静态属性:姓名
    private static String name;
    //非静态属性 :年龄
    private String age;
    
    
    public static void main(String[] args) {
        Test test1 = new Test();
        test1.name="何东飞";
        test1.age="12";        
        System.out.println(test1.age);//结果为12
        System.out.println(test1.name);//结果为何东飞
        
        Test test2=new Test();
        test2.age="14";
        System.out.println(test2.age);//结果为12
        System.out.println(test2.name);//结果为何东飞
        //test1及test2的name相同,诠释了“static修饰的属性,被相同对象的不同实例所共享”这一特性
    }
}

static代码块:
  static关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
  为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。下面看个例子:
    class Person{
        private Date birthDate;
         
        public Person(Date birthDate) {
            this.birthDate = birthDate;
        }
         
        boolean isBornBoomer() {
            Date startDate = Date.valueOf("1946");
            Date endDate = Date.valueOf("1964");
            return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
        }
    }
    
    isBornBoomer是用来这个人是否是1946-1964年出生的,而每次isBornBoomer被调用的时候,都会生成startDate和birthDate两个对象,造成了空间浪费,如果改成这样效率会更好:
        class Person{
            private Date birthDate;
            private static Date startDate,endDate;
            static{
                startDate = Date.valueOf("1946");
                endDate = Date.valueOf("1964");
            }
             
            public Person(Date birthDate) {
                this.birthDate = birthDate;
            }
             
            boolean isBornBoomer() {
                return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
            }
        }
        因此,很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。

 


5、程序包package;import 关键词的使用;
6、访问修饰符public、private、final、protected;
8、方法的重载;
9、继承、super关键词用法;
10、方法的重写(覆盖);
11、抽象类;
12、接口;

p.s. 《java基础梳理-朝花夕拾》系列由何东飞根据自己工作几年以来对java的理解梳理而成,笔者闲暇时将持续更新,有不对的地方请各位指教。QQ:983489147








以上是关于java基础梳理--朝花夕拾的主要内容,如果未能解决你的问题,请参考以下文章

java基础梳理--朝花夕拾

朝花夕拾Broadcast篇

朝花夕拾Android自定义View篇之多点触控(下)实践出真知

朝花夕拾Android自定义View篇之多点触控(上)基础知识

java线程基础梳理

Java朝花夕拾-基本数据类型