java学习笔记--基础、类

来源:互联网 发布:身份证复印件软件v3.4 编辑:程序博客网 时间:2024/06/06 12:45

1、环境变量的配置
(1)安装jdk
(2)配置环境变量
JAVA_HOME:jdk的安装路径—新建系统变量赋值jdk路径
PATH:jdk命令文件的位置即bin目录—直接复制bin的路径
CLASSPATH:开发所用到的类库文件的位置即lib目录—新建系统变量,.;+lib的路径

2、多练、多问、自己动手调试错误、多复习总结。

3、java中的关键字区分大小写。

4、使用标识符时,需要遵守几条规则:

 1.  标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等其它特殊字符,不能以数字开头。譬如:123name 就是不合法滴2.  标识符不能是 Java 关键字和保留字( Java 预留的关键字,以后的升级版本中有可能作为关键字),但可以包含关键字和保留字。如:不可以使用 void 作为标识符,但是 Myvoid 可以3.  标识符是严格区分大小写的。 所以涅,一定要分清楚 imooc 和 IMooc 是两个不同的标识符哦!4.  标识符的命名最好能反映出其作用,做到见名知意。

5、变量命名
字母or下划线or线.
骆驼式命名法、长度无限制

6、数据类型
这里写图片描述

这里写图片描述

String:是引用类型数据
引用类型:存储保存数据的空间地址
基本数据类型变量:存储数据本身

这里写图片描述

7、自动类型转化:两种类型兼容(char和int就不兼容),短的类型可以自动转化成长的,反之不行。

例如:System.out.println((double)(5.0/3)); 结果:1.6666666666666667System.out.println((float)(5.0/3));结果:1.6666666System.out.println((double)(5/3)); 结果:1.0System.out.println((float)(5/3));结果:1.0

8、java中常量用final修饰一般为大写。

9、数组

1、声明数组:int[] scores;    2、分配空间:scores = new int [5];    3、赋值合并写法:int[] scores={1,2,2,2,2};等价于:int[] scores=new int[]{1,2,2,2,2};//这里中括号内必须为空不能指定长度。    4、Arrays类提供很多对数组进行操作的方法。(sort()方法、同String()方法)    5、二维数组        可以只指定行的个数,再为每一行分别分配列的个数。
    ![这里写图片描述](http://img.blog.csdn.net/20170429092221069?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmlnaHRlcjEyMjY=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

10、方法的重载

1、必须是在同一个类中    2、方法名相同    3、方法参数的个数,顺序,或类型不同    4、与方法的修饰符和返回值没关系

11、类是存储在文件中的,对象被存储在内存中。

12、局部变量和成员变量同名时,局部变量具有更高的优先级。

13、构造方法:new+构造方法创建一个对象、无返回值

14、静态成员方法可以直接使用静态成员变量,但需通过对象使用非静态成员变量。

15、静态初始化块最先被执行,然后执行普通初始化块,在执行构造函数。且静态初始化块只在类加载是执行一次(第一次创建对象时执行,第二次就不执行了)

16、封装的实现步骤:修改属性的可见性—创建getter、setter方法—在getter、setter方法中加入属性的控制语句(对属性值的合法性进行判断)

17、系统中的包的层次:java.(功能).(类)
java.lang.(类):包含java语言基础的类
java.util.(类):包含java中各种工具的类
java.io.(类):包含输入输出相关功能的类
包名全小写。

18、访问修饰符
private:本类
默认:本类、同包
protected:本类、同包、子类
public:本类、同包、子类、其他

19、普通内部类

1、必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象。    2、 外部类不能直接使用内部类的属性和方法,需通过内部类对象引用。

20、静态内部类

1、不能直接访问外部类的非静态方法,可以通过外部类的对象访问    2、外部静态成员名与内部类相同是可通过类名访问,当不同是可直接访问    3、创建静态内部类的对象是不用 外部类的对象可直接new一个。            内部类 对象名 = new 内部类();

21、方法内部类

1、只在该方法内部可以使用,因此不能使用修饰符和static

22、继承:is a的关系(dog is a animal,dog继承animal类)
(1)子类不能继承父类中用private修饰的成员
(2)方法的重写

1、重写父类的方法,优先调用重写的方法        2、语法规则:返回值类型、方法名、参数类型及个数都要与继承父类的方法相同


(3)执行顺序

1、先执行父类的构造方法,在执行子类的构造方法        2、先执行属性的初始化在执行构造函数的初始化(即构造函数中对属性的初始化会覆盖掉直接对属性的初始化)

(4)final关键字

1、修饰类,则该类不能被继承       2、修饰方法,则该方法不能被覆盖(重写)       3、修饰属性,则该类的属性不会被隐式的初始化,所以必须直接属性赋值或者在构造方法中初始化,但两者只能选其一。

(5)super:代表父类对象,可以用来调用父类的属性和方法
子类的构造方法中隐式的调用了super();即调用了父类的无参构造方法。
子类如果显示的调用父类的构造方法必须在第一行
若子类没有显示的调用父类的构造方法而父类中又没有无参的构造方法,那么编译出错。

(6)Object类:所有类的父类
常用方法:
1)toString()
当toString(对象引用)会输出这个对象当 哈希code码(对象地址字符串),可以通过重写toString方法表示出对象的属性

public string toString(){            return “dog[age=”+age+"]";}

这样在调用toString(对象引用)时会输出return的部分。myeclipse可以自动为指定属性生成toString()方法。

2)equals()方法
默认情况比较对象的引用是否指向同一块内存。
可以通过重写此方法来比较两个对象(这两个对象是同一个类的对象)的值是否相同。
getClass()方法获得类对象,即类的代码对象,即类的类型和类的对象不同。

      System.out.println(ph1.getClass());     //结果:classcom.imooc.array.Phone1     System.out.println(ph2.getClass());    //结果:class com.imooc.array.Phone2这两个结果是不相同的

equals()方法的重写代码:
public boolean equals(Object obj) {
if (this == obj)//相等时指向同一块内存
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())//判断类的类型是否相同
return false;
Phone1 other = (Phone1) obj;//将obj转化成phone1类型
if (cpu != other.cpu)//比较两个对象的属性
return false;
if (mex != other.mex)
return false;
if (size != other.size)
return false;
return true;
}

23、多态性(1)引用的多态性    父类引用指向本类对象    父类引用指向子类对象(2)方法的多态性    创建本类对象 时,调用的是本类的方法    创建子类对象时,调用的是子类重写的方法或者继承的方法,但是不能用父类的引用去调用子类独有的方法  (3)类型转换  子类类型转换成父类类型:向上类型转换是自动进行的  父类类型转换成子类类型:需强制类型转换  可以用a  instanceof  B关键字判断a是否是类B的实例或这类B的子类的实例,当有这种关系时才可以进行类型转换

public class Test {
public final static void main(String[] argS){
Phone1 phone1 = new Phone1();
Phone phone = phone1;//向上类型转换,自动类型转换

    if (phone instanceof Phone1) {        Phone1 phone2 = (Phone1)phone;    }    else{        System.out.println("不能进行类型转换");    }    if(phone instanceof Phone2){        Phone2 ph2 = (Phone2)phone;    }    else {        System.out.println("不能进行类型转换2");    }

}
}

//运行结果:不能进行类型转换2

4)使用父类引用指向子类的对象的好处      例如:      Phone phone = new Phone1();       phone.call();               当由于某些原因我们要该用Phone2中的call()方法时我们只需要改第一句代码为Phone phone = new Phone2();即可。这样提高了代码的扩展性,便于以后的维护工作。所以当我们不需要访问子类独有的方法是,尽量使用父类的引用。23、抽象类(1)用abstract修饰(2)不关注子类方法的实现,但是要约束子类必须有那些方法(3abstract定义的抽象方法,只有声明,不需要实现(没有花括号)(4)抽象类中可以有普通方法,也可以没有抽象方法。(5)抽象类不能直接创建,但可以定义引用变量24、接口(1)一种特殊的类,由全局常量和公共的抽象方法组成(2)类是一种具体的实现,而接口定义了某一批类所要遵循的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,他只规定这些类里必须提供某些方法。(3)接口定义的基本语法[修饰符] abstract (系统会自动添加)interface 接口名[extends 父接口1、父接口2。。。]{    零到多个常量定义;(用public static final修饰 系统会自动添加)    零到多个抽象方法定义;(用public abstract修饰,系统会自动添加)}接口是用来实现或继承的所以一般建议用public修饰符。不能使用privateprotected(接口中的方法的修饰符同接口的修饰符)(4)类用implements可继承多个接口,必须实现抽象方法(5)继承父类必须在实现接口之前,extends关键字在implements之前(6)给接口命名时通常一大写i开头(7)可以用接口的引用指向实现接口的类的对象。(8)使用匿名内部方式实现接口例如:

//匿名内部类实现接口写法1
IPlayGame sp = new IPlayGame() {

        @Override        public void playGame() {            System.out.println("使用匿名内部类实现接口1");        }    };//注意此处的分号    sp.playGame();//调用实现的方法    //匿名内部类实现接口写法2    new IPlayGame() {        @Override        public void playGame() {            System.out.println("使用匿名内部类实现接口2");        }    }.playGame();//直接调用类里的方法 

“`

25、UML(Unified Modeling Language 统一建模语言或标准建模语言)
(1)用例图
(2)序列图
(3)类图
(4)UML建模工具:Visio、Rational Rose、PowerDesign

26、当需要重写父类中的方法而用不到父类中的方法是,将父类设计成抽象类更加合理。

27、项目分析
(1)数据模型分析(将现实问题抽象成数据结构包括方法、属性)
(2)业务模型分析(程序主要执行的任务)
(3)显示和流程分析

1 0