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 方法
- java学习笔记-1
- Java学习笔记1
- java学习笔记(1)
- java学习笔记1
- Java学习笔记1
- java学习笔记1
- java学习笔记(1)
- Java学习笔记1
- java学习笔记(1)
- JAVA学习笔记1
- java学习笔记1
- Java学习笔记(1)
- java学习笔记1
- JAVA学习笔记 1
- JAVA学习笔记(1)
- java学习笔记1
- java学习笔记 1
- java 学习笔记《1》
- codeforces 883 I. Photo Processing(dp+二分)
- Struts2和spring mvc的区别
- AngularJS学习总结
- Date日期验证及获取
- Python学习笔记—常用库简介
- Java学习笔记1
- luarocks install audio 艰辛安装之路
- 任学堂---人工智能真的来了,这些职业会消失!生活也会发生翻天覆地的变化
- The Two Routes CodeForces
- jquery validate单独校验某一字段
- Python 安装(pip)
- Java 实现HTTP协议
- python-Error Message: 'float' object cannot be interpreted as an integer
- SpringBoot学习-简单QuartZ定时器设置