Java基础2

unit2 面向对象

1.面向对象特点:封装  继承  多态

 面向对象强调结果  面向过程强调步骤

2.类与对象:对象是具体的实体(行为+属性),类是抽象的模板(成员方法+成员变量) ,类是对象的模板,对象是类的实例 

   作用在psvm里面的: 导包--创建对象--使用:

import cn.itcast.first.demo06.Student;//导包
Student stu = new Student();//创建对象
System.out.println(stu.age);//使用对象成员变量,此时age属性在domain层里
stu.eat();//使用对象成员方法,此时eat方法在service层里

   成员变量:直接定义在类中的,在方法外,有默认值,堆内存,随着对象的创建回收而诞生和消失

    局部变量:定义在方法内,无默认值,栈内存,随着方法的进栈出栈而诞生和消失

 成员变量:属性    成员方法:行为

   成员方法:public void run(){...}    不用写static

   内存划分:栈    堆      方法区           

下列是一个对象使用一个方法 

 下列是两个对象使用一个方法

下列是亮两个引用指向同一个对象的空间

 使用对象的类型作为方法参数:                                      使用对象的类型作为方法返回值:

                     

封装性:核心思想,一个方法就是一种封装,调用方法就玩了,为了隐藏内部细节

3.private关键字:保护本成员变量,提高安全性

 private int age;  
//用private关键字将需要保护的成员变量进行修饰,但是private只能在本类内直接访问,超出则报错
//间接访问private变量,就是定义一对set和get方法
public void setAge(int num){ age = num;}
public int getAge(){ return age;}
//对于setter而言,不能有返回值,参数类型和成员变量对应
//对于getter而言,不能有参数,返回值类型和成员变量对应

 

4.  this关键字:成员变量和局部变量重名时,就近原则,优先访问局部变量

  this.name = name;  this.成员变量名====调用局部变量名
  //this用来区别成员变量和局部变量,避免变量重名,通过谁调用的方法,谁就是this

5.构造方法:

6.构造方法也是可以进行重载的Overlord

 定义标准类:

   补充:this.num就是在运用本类的一个对象。方法重载同名字不同参数也即是构造方法的重载。

    API:application programming interface,应用程序编程接口

   快捷键: Alt+Insert------generate-------Getter and Setter///////toString/////////Constructor无参构造,全参构造

    //set往里放,有参数无返回
    public void setAge(int num) { }

    //get往外拿,有返回无参数    
    public int getAge() {return age;}
-------------------------------------------------------------------------------------------

unit3 类的学习

1.Scanner类:实现键盘输入数据,到程序中   

  导包:import java.util.Scanner;                              只有java.lang包下的内容不用导包,其余全要

  创建:Scanner sc = new Scanner(System.in);     里面参数:System.in,代表键盘输入

  使用:int num = sc.nextInt();  String str = sc.next();

2.匿名对象:

  只有右边的对象,即没有左边的名字和赋值运算符。  

  当对象对方法仅进行一次调用的时候,就可以简化成匿名对象.

  对象只能使用唯一一次,下次再用需要重新创建

  例子:new  Car().run();      new Person().name = "sjw";

  匿名对象作为方法的参数:

3.Random类:生成随机数

  导包:import java.util.Random;                              只有java.lang包下的内容不用导包,其余全要

  创建:Random r = new Random();     

  使用:int num = r.nextInt();          String str = sc.next();

  例子:生成指定范围的随机数:

        int num = r.nextInt(3);                      // [0,3)    左闭右开:0,1,2,

4.对象数组:一旦创建,程序运行期间长度不可以改变

array[1],地址值        .getName(),数值

ArrayList数组:一般数组长度不可以改变,但是她可以!

ArrayList<E>,泛型,装在集合中的所有元素都是统一 的类型,长度可变,引用类型数据。泛型只能是引用类型,不能是基本类型

创建:ArrayList<String>  list  =  new  ArrayList< >();      打印的是内容,而不是地址值,如果内容为空,就是[ ]

添加:list.add("sjw");             对于ArrayList的add(),添加的动作一定是success的,boolean=true

  

泛型只能是引用类型,不能是基本类型。单是也可以进行转换的,见下:

自动装箱:基本类型-->包装类  反之自动拆箱

5.String类

StringPool(字符串常量池) ,双引号直接写入到的,new的不是,存放于堆中

==:对于基本类型是数值比较       对于引用类型是地址值比较

方法:

  内容比较:equals()   

  

   内容获取: 

           字符串截取:

   字符串转换:

    字符串拆分成char[]数组:

  char[] chars = "hello".toCharArray();        

    字符串拆分成byte[]数组:

  byte[] bytes = "sjw".getBytes();

字符串转换回卷:
  
String lang = short.replace("去死","**");

  字符串分割:

 

6.static关键字:静态方法与对象无关,只与类有关,只要是本类对象,共享同一份;不能有this,super

  没有的话,是“类名.方法名()”  有的话,是“方法名()”

       静态代码块:首次执行时候,有且只能执行唯一一次,可以一次性对static成员变量赋值

7.Arrays类:数组工具类,提供了大量静态方法,实现数组的常见的操作

8.Math类:数学工具类

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

unit4 继承

1.类的继承,覆盖重写:继承是多态的前提,继承就是为了“共性抽取”

  子类 extends 父类 {  } 方法覆盖重写:@Override。此注解起到安全监测作用。创建子类对象,优先用子类的。

  成员变量重名:                                    成员方法重名:

super关键字:调用父类的变量    super.num

this关键字:调用本类的变量    this.num

@Override:覆盖重写,名称一样,参数列表一样,用于继承类,此注解是可选的安全检测手段

@Overlord:方法重载,名称一样,参数列表不一样

所以,继承用于对父类的拓展,重复其中的共性,添加改动新内容

super:访问父类

 this:访问本类

2.抽象:如果父类当中的方法不确定如何进行()方法的实现,他就是一个抽象方法

    abstract关键字,本身没有方法体,除非他被重写

      子类 extends 父类 { 覆盖重写父类方法 }    不可以new对象,要创建子类对象使用

  //抽象方法  public abstract void eat();

  //普通方法  public void normal(){}

3.接口:公共的规范标准,引用数据类型,最重要的是里面的抽象方法

  接口定义的任何字段都是static和final的,接口定义的方法也必须是public 和 abstract 的

  例子四个:抽象方法,默认方法,静态方法,私有方法,成员变量:常量

 

   public class Impl implements InterFaceTest {

    //接口使用:对于抽象方法,要有实现类Impl,Alt+Insert,选中Implements,完成了抽象方法的覆盖重写      @Override

    public void method() {  System.out.println("first");    }

A:默认方法:public default void 方法(),解决接口升级

B:静态方法:public static void 方法(),带上方法体

C:私有方法:private void 方法()

D:常量定义:成员变量,必须使用    public static final String name =  "sjw";  来修饰

E:补充:

类和接口:类之间单继承,类与接口之间多实现,接口之间多继承

4.多态:extends继承或者implements实现,都是多态的前提,polymorphism=mutil

    提升代码的可拓展性,继承和接口是多态的前提

    new的是对象,很多的对象体现了多态,用法是:父类引用指向子类对象,左父右子就是多台

    会用到:向上转型,向下转型

      例子:我,是学生,是女儿。我没变为父,学生和女儿角色在变为子

      Fu obj = new Zi();//使用多态,左边父类引用指向子类对象
      if(fu instanceof Zi){//采用向下转型,才可以调用子类自己的方法
       Zi zi = (Zi) fu;
      zi.methodZi();
      }
成员变量:
成员方法:
使用:new谁优先用谁,没有则向上找;编译看左边,运行看右边
好处:无论右边new的时候换成哪个子类对象,左边用的父类的方法都不用改变,节省了代码书写
向上转型:就是多态的用法,小--->大,自动的安全的------Up a = new UpZi();
向下转型:还原动作,大---->小,类似于强制类型转换------UpZi b = (UpZi) a;
  ps:会出现类出错异常:ClassCastException

5.instanceof关键字:向下转型一定要有instanceof判断,不然发生类转换异常

6.final关键字:修饰类,成员方法,局部变量,成员变量

类:public final class A    当前类不可以有任何子类

成员方法:public final void B(...)     不可以被子类覆盖重写    不可以和abstract同时出现

局部变量:final int c = 10;     一次赋值终生不变   对于基本类型是数值,对于引用类型是地址值

成员变量:public final String name; 加上final之后必须手动赋值才可以,要不直接赋值,要不通过构造方法赋值

//final int n = 10;
// 报错,局部变量加上final之后,
// 有且只可以写一次,即使第二次赋值都一样也报错
//如果FinalFu类是final类,则FinalZi是不可以继承Fu的
public class FinalZi extends FinalFu{
  //报错,原来父类方法是final,现在子类方法是不可以覆盖重写的  }

7.四种权限修饰符:public 》 protected 》 (default) 》private  ?是否可以访问

    同类    √    √      √      √

    同包    √    √      √

    不同包子类  √    √

    不同包非子类  √

原文地址:https://www.cnblogs.com/only666/p/12274522.html