Java学习笔记1

来源:互联网 发布:复合材料的刚度矩阵 编辑:程序博客网 时间:2024/06/07 00:44

Java关键字是区分大小写的

标识符:

1.标识符由数字,字母,下划线,美元符组成,不能以数字开头。

2.标识符区分大小写

3.标识符不能是关键字和保留字

在Java中,我们通过三个元素描述变量,变量类型,变量名,变量值。Java中的标点符号是英文的。

给变量命名优秀习惯:

1.采用驼峰法,第一个单词的首字母小写,其后单词的首字母大写,例如myAge.

2.变量命名尽量见名知意

3.Java变量名的长度没有限制,但是区分大小写.


Java数据类型:

Java是一种强类型语言,数据类型分为两种,

float型变量赋值时需要加f,否则默认浮点数是double型

基本数据类型(数值型【整数类型,浮点类型】,字符型,布尔型),存储的是数据本身

引用数据类型(类,接口,数组),存储的是数据的空间地址。


Java里面有自动数据类型转换    需要满足一定条件:【向上类型转换(隐式/自动类型转换) 小类型到大类型】

1目标类型与源类型兼容,如double型兼容int型

2目标类型大于源类型,如double类型长度为8字节,int为4字节,double可以直接存放int类型,但是反过来就不可以。


强制类型转换,语法: (数据类型) 数值 【大类型到小类型的转换】

double  avg1=75.8;

int  avg2=(int) avg1;

此时会直接将数据小数位截断,avg2为75.

所以,强制类型转换可能会造成数据的丢失。

【instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题。能够检测引用类型是否是某一类的子类型,返回布尔值】


定义常量使用关键字 final 语法:final 类型名 变量名=值

final关键字

可以修饰类,方法,属性和变量

   final 修饰类,则该类不允许被继承

   final 修饰方法, 则该方法不允许被覆盖(重写)

   final 修饰属性(则该类的属性不会进行隐士的初始化,则必须在构造方法中赋值)(如果已经赋值,则该属性不能再改变)

  final  修饰变量,则该变量的值只能赋一次值,即为常量

如: final double PI=3.14;


注释,Java中有三种注释,

文档注释,(以  /** 开头,以 */ 结尾),我们可以通过javadoc命令从文档注释中提取内容,生成程序的API帮助文档。

PS:使用文档注释时还可以使用javadoc标记,生成更详细的文档信息。

【  

    @author 标明开发该类模块的作者

   @version 标明该类模块的版本

   @see  参考转向,也就是相关主题

    @param  对方法中某参数的说明

     @return  对方法返回值的说明

     @exception   对方法可能抛出的异常进行说明

多行注释,(以  /*  开头,以 */  结尾)

单行注释。(以 // 开头)


Java语言中常用的运算符分为如下几种:

算术运算符: +,-,*,/,取余%,自加++,自减--

赋值运算符:+=, -=,=, *=,/=,%=,

比较运算符:> , < ,  >=,  <=,  ==,  !=  比较运算符用于判断两个数据的大小,比较的结果是一个布尔值

【注意:

   1    >,<,>=,<=  只支持左右两边操作数是数值类型

    2 ==,!=   两边的操作数既可以是数值类型,也可以是引用类型】【==的操作数为对象即引用类型,则比较的也是引用地址】

逻辑运算符: &&与,||或,异或^(有且仅有一个为true),!  非

条件运算符: 也被称为  三元运算符 ,布尔表达式 ?表达式1 : 表达式2    值为true则返回表达式1的值,值为false则返回表达式2的值。


优先级:在实际开发中,使用小括号辅助进行优先级管理


【语句注意点:】

【1  switch后表达式的值必须是整型或字符型  2  case后面的值可以是常量数值,也可以是一个常量表达式   3  default语句可以出现在任意位置,也可以省略】

【for循环关键字后面括号中的三个表达式必须用;隔开】

【break只能用于循环语句和switch,用于if语句会直接无视】


数组

1 声明数组

数据类型  [  ]  数组名;

数据类型  数组名 [  ];

2 分配空间

数组名=new 数据类型 [  数组长度 ]  或者直接将上面两个步骤合并 【int [ ] scores=new int [5]】

3 赋值

4 处理数组中的数据

【直接创建数组的方式:

 int [  ]  scores={48,54,548,54};

等价于 int [  ] scores=new int [ ]{78,84,54,89};【注意:声明数组并赋值时不能指定长度】


Arrays类是Java中提供的一个工具类,在java.util包中,utility是多用途的意思。

常用方法:Arrays.sort(数组名)  Arrays.toString( 数组名)


foreach并不是Java中的关键字,是for语句的特殊简化版本,在遍历数组,集合时,foreach简单方便。

用法: for(元素类型  元素变量: 遍历对象){

          执行代码

}


Java中的二维数组:

1 声明数组并分配二维空间

 数据类型  [ ] [ ] 数组名=new 数据类型 [行的个数 ] [列的个数 ];

或者

数据类型 [ ] [ ] 数组名;

数组名=new 数据类型 [ 行的个数 ][列的个数 ];

 【注意,在定义二维数组的时候也可以只指定行的个数,然后再为每一行分别指定列的个数,如果每行的列数不同,则创建的是不规则的二维数组】


 定义Java一个方法

访问修饰符 返回值类型 方法名 (参数列表 ){  方法体 }

修饰符:可以是public ,protected,private,甚至可以省略

返回值类型:没有返回值指定 void

方法名: 定义方法的名字,必须使用合法的标识符

参数列表:参数可以有多个,多个参数间以逗号隔开,每个参数由数据类型和参数名组成,以空格隔开。


方法的重载

如果同一个类中包含了两个或两个以上方法名相同,方法参数的个数,顺序或类型不同的方法。则称为重载。

判断方法重载的依据:

1 必须是在同一个类中

2  方法名相同

3  方法参数的个数,顺序或类型不同

4 与方法的修饰符或返回值没有关系


成员变量和局部变量

1成员变量

  在类中定义,用来描述对象的属性

2 局部变量

 在类的方法中定义,在方法中保存临时数据

【1  Java会给成员变量一个初始值0,不会给局部变量赋予初始值。 2 两类变量重名时,方法会优先选取局部变量】


构造方法

当没有指定构造方法的时候,系统会自动添加无参的构造方法。

当有指定构造方法时,无论是有参,无参的构造方法,都不会自动添加无参的构造方法。

构造方法的重载:方法名相同,但参数不同的多个方法,调用时会自动根据不同的参数选择相应的方法。


静态方法可以直接调用同类中的   静态成员和静态方法,但是不能直接调用    非静态成员和非静态方法。

普通方法可以直接调用同类的      非静态变量和静态变量。


静态初始化块

Java中可以通过初始化块进行数据赋值。

在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。

使用static 修饰初始化块,就称 为 静态 初始化块

静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量

顺序:先执行静态初始化块,再执行普通初始化块,最后是构造方法。【并且静态初始化块只执行一次】


封装的实现步骤

1 修改属性的可见性

2 创建getter/setter方法

3 在getter/setter方法中加入属性控制语句


包的作用:

1 管理Java文件,解决同名文件冲突。

2 定义包:package包名【注:必须放在Java源程序的第一行,包名间可以用“ .”隔开】

3 系统中的包  java.(功能).(类)

4 包的使用:可以通过使用import关键字,在某个文件使用其它文件中的类。

5 包的命名最好用小写字母


访问修饰符

private   类   

默认       类    包

protected 类   包   子类

public    类    包    子类  其它


内部类

Inner Class 就是定义在另一个类里面的类,与之对应,包含内部类的类被称为外部类。

作用如下:

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

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

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

分为以下几种:成员内部类   静态内部类  方法内部类  匿名内部类

成员内部类的使用方法:

1  Inner类定义在Outer类的内部,相当于Outer类的一个成员变量的位置,Inner类可以使用任意访问控制符。

2 Inner类中定义的方法可以直接访问Outer类中的数据,而不受访问控制符的影响。

3  定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个类对象

如: 内部类  对象名=外部类对象.new  内部类( )

4 含有内部类的源文件编译后会产生两个class文件

5  外部类不能直接使用内部类的成员和方法

6  如果外部类和内部类具有相同的成员变量和方法,内部类默认访问自己的成员变量或方法,如果要访问外部类的成员变量,可以使用this关键字


静态内部类

1 静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类( ).成员 的方式访问(通过对象的方式访问)

2 如果外部类的静态成员和内部类成员名称相同,可以通过“类名.静态成员 ”访问外部类的静态成员。不相同,可直接调用

3 创建静态内部类的对象时,不需要外部类的对象,可以直接创建  内部类  对象名=new  内部类 (  );


方法内部类

方法内部类就是内部类定义在外部类的方法中,方法内部类只在该方法内部可以使用。【由于方法内部类不能在外部类的方法以外的地方使用,

因此,内部类不能使用访问控制符和   static 修饰符】



继承

关键字:extends

重写:子类对继承父类的方法不满意,可以重写父类继承的方法,当调用方法时,会优先调用子类的方法。

语法规则:返回值类型    方法名   参数类型及个数都要与父类继承的方法相同,才叫方法的重写

创建对象顺序:父类对象——>属性初始化——>构造方法——>子类对象——>属性初始化——>构造方法




super关键字:在对象内部使用,可以代表父类对象

子类的构造过程中必须调用其父类的构造方法

如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类无参的构造方法。

如果显式的调用构造方法,必须在子类的构造方法的第一行.

如果子类构造方法中既没有显式调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。


Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类

toString方法:Object类定义的是返回对象的哈希code码(对象地址字符串)

equals()方法  比较的是对象的引用是否指向同一块内存地址【==的操作数为对象,则比较的也是引用地址】


多态

1引用多态

 父类的引用可以指向本类的对象

 父类的引用可以指向子类的对象

2 方法多态

  创建本类对象时,调用的方法为本类方法

  创建子类对象时,调用的方法为子类重写的方法或者继承的方法【如果为子类特有的方法,则无法调用】


抽象类

作用:限制规定子类必须实现某些方法,但不关注实现细节

使用规则:abstract  定义抽象类     abstract定义抽象方法,只有声明,不需要实现    包含抽象方法的类是抽象类       抽象类中可以包含普通的方法,也可以没有抽象方法

抽象类不能直接创建,可以定义引用变量。

关键字为:abstract class


接口

概念:接口可以理解为一种特殊的类,由全局常量和公共的抽象方法组成【如果没有显式的用abstract,系统会自动定义为abstract】

语法: 【修饰符】  interface  接口名【extends  父接口1,父接口2...】

{

      零个到多个常量定义

     零个到多个抽象方法的定义

}

接口是用来被继承,被实现的,修饰符一般建议用public【不能用private和protected修饰接口】

接口中的属性是常量,即使定义时不添加,public static  final 修饰符,系统也会自动加上

接口中的方法只能是抽象方法,总是使用,即使定义时不添加public abstract 修饰符,系统也会自动加上

使用:一个类可以实现一个或多个接口,实现接口用关键字implements 关键字。【如果要继承父类,继承父类必须在实现接口之前。如: [修饰符] class 类名  extends 父类 implements  接口1, 接口2...】


在Java中,字符串被作为String 类型的对象处理,String  类位于java.lang  包中,默认情况下,该包被自动导入所有的程序。

【多次出现的字符常量,Java编译程序只创建一个】

String是一个特殊的包装类数据。可以用:
String str = new String("abc");
String str = "abc";
两种的形式来创建,第一种是用new()来新建对象的,它会在存放于堆中。每调用一次就会创建一个新的对象。 而第二种是先在栈中创建一个对String类的对象引用变量str,然后查找栈中有没有存放"abc",如果没有,则将"abc"存放进栈,并令str指 向”abc”,如果已经有”abc” 则直接令str指向“abc”。

String类是不可变的,操作过程中会产生很多临时变量,StringBuilder和StringBuffer  可以避免这个问题,基本相似,StringBuffer是线程安全的,StringBuilder没有实现线程安全功能,所以性能略高。要创建一个内容可变的字符串对象,应优先考虑使用StringBuilder 类

StringBuilder类常用方法:append(参数)   insert(位置,参数)   toString()  length()


包装类

原由:基本数据类型是不具备对象的特性的,不能调用方法。为了让基本数据类型也具备对象的特性。为每个基本数据类型都提供了一个包装类。

两大类方法: 包装类主要提供了两大类方法:1 将本类型和其他基本类型进行转换的方法  2  将字符串和本类型及包装类互相转换的方法

基本类型对应的包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean

基本类型和包装类之间可以互相转换。例如

Integer a=new Integer(3);

int b=a.intValue( );

把基本类型转换为字符串有三种方法:

1 使用包装类的toString( ) 方法

2  使用String 类的valueOf( )方法

3  用一个空字符串加上基本类型,得到的就是基本类型数据对应的字符串


处理时间使用java.util 包中的Date类

使用Date类的默认无参构造方法创建出的对象就代表当前时间

可以使用java.text 包中的SimpleDateFormat 类来对日期时间进行格式化【有format ( ) 方法对Date对象进行格式处理,parse方法对文本进行解析】

调用SimpleDateFormat 对象的parse( )方法时可能会出现转换一场,因此需要进行异常处理。


Calendar 类的应用

Date类设计有问题,使用java.util.Calendar 类来获取时间。如:

1 获取calendar实例  Calendar c= new Calendar( );

2 调用get 方法获取时间值。 c.get(Calendar.Year);

【getTime 方法用来获取Date对象】


Math类

Math 类位于 java.lang 包中,类中的所有方法都是静态方法。


java的集合框架

Collection 接口

【子接口:List  实现类 ArrayList【可能会数组下标越界异常】

 序列 Queue    实现类 Linked List

 队列 set 集 实现类 HashSet】

Map接口【Map也有很多的子接口,但最常用的还是HashMap类】

对象存入集合都变成Object 类型,取出时需要进行类型转换


泛型集合

如:List <Integer> list=new ArrayList<Integer>( );

1 除了可以存储 泛型 指定类型,还可以存储 指定类型的  子类型

 2 泛型集合中的限定类型不能使用基本数据类型,只能是引用类型

3  可以通过使用包装类限定允许存入的基本数据类型


List 接口及其实现类——ArrayList

ArrayList 底层是数组实现的,可以当作长度可变的数组


Set  接口及其实现类——HashSet

Set 是元素无序并且不可以重复的集合,被称为集

HashSet——哈希集,是Set 的一个重要实现类【Set  可以添加空对象 null 】


Map接口

Map  提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key 快速查找 value

Map  中的键值对以Entry 类型的对象实例形式存在

key 值不可重复,value 值可以

Map支持泛型,形如:Map<k,v>


HashMap 类是Map 的一个重要实现类,基于哈希表实现

HashMap  中的Entry 对象是无序排列的

Key 值 和 value 值都可以为null


Contains 方法是遍历List 然后,对其中的每个元素进行equals( ).

equals( )方法是基于hash算法的,比较内存地址。

所以需要改写equal 方法

HashSet 的contains 基于hascode 和equal,必须两个都返回true,才可以认为是一个元素。

需要同时改写hascode  和 equal 方法



原创粉丝点击