面向对象的特征主要有哪些:
封装
继承
多态
输入,输出
输出:System.out.println("Hello");
输入:
//在Java中的输入需要使用Scanner的对象读取来自System.in的输入,Scanner类在包java.util中,使用时须导入:
import java.util.Scanner;
Scanner对象中常用的获取用户输入的方法有:
String nextLine();
boolean nextBoolean();
short nextShort();
int nextInt();
long nextLong();
double nextDouble();
Scanner input = new Scanner(System.in);
System.out.print("请输入圆的半径");
double radius = input.nextDouble();
double area = radius*radius*3.14;
System.out.println("圆的面积是:"+area);
标识符的组成:
Java标识符由:字母,数字,下划线,美元符号$组成,并且只能以字符,下划线,$开头。
标识符是大小写敏感的并且未规定最大长度
数据类型:程序设计语言描述事物,对象的方法。Java数据类型分为基本类型和引用类型两大类。
基本类型
整数类型:byte,short,int,long
浮点类型:float,double
字符类型:char
布尔类型:boolean
引用类型:
类
接口
数组
枚举
Java是一种强类型语言。这就意味着必须为每一个变量声明一个类型。在java中,一共有8种基本类型:4种整数类型,2种浮点类型,1种字符类型,一种布尔类型。
byte:1字节
short:2个字节
int:4个字节
long:8个字节
char:2个字节
boolean:1个字节
float:4个字节
double:8个字节
常量的定义:
final int NUM = 12; //常量一旦被初始化,就不能再改变值
1. java种支持的运算符
1. 类型转换:
隐式转换:int n = 5;double f = n;
强制转换:double f = 5.5;int n = (int )f;
数据类型按容量大小排序:byte--short--char--int--long--float--double
静态初始化
int ids[] = {1,2,3}
1. 动态初始化
int ids[] = new int[4]; for(int i = 0;i<3;i++){ ids[i]=i; }
1. 数组的使用
int i = ids[0];
1. 二维数组
```
1.int[][] ids;
2.int [] ids[];
3.int ids[][];
```1. 初始化
```
int num [][] = {{1,2},{3,4}};
```1. 动态初始化
String[][] names = new Stirng[3][4];
Arrays类的引入
```
1.copyOf:实现数组的赋值
2.fill:可以为数组填充相同的值
Arrays.fill(names,"Hello!");
3.sort:实现数组的排序
Arrays.sort(names);
Arrays.sort(names,0,3); //对第一个到第四个进行排序
4.binarySearch:实现排序后的数组元素查找
5.copyOfRange();
int[] b = Arrays.copyOfRange();
```1. 初始化
List<String> str = new ArrayList<>();
str.add("Hello!");
封装:将属性(数据)和处理这些属性的行为结合起来,仅对外公开接口以达到信息隐藏的目的。
继承:在软件开发种,若已有类A,要创建类B,而类A和B属性,行为基本相同,则只需要在A的基础上增加些新内容即可,提高了代码的重用率,提高了编程的效率。
多态:同一个操作作用于不同的类的对象,将产生不同的执行结果。
new是一个关键字,它为新创建的对象开辟内存空间,用于保存对象的成员变量和成员方法
继承过程:
吸收基类成员:派生类把基类全部的成员接收过来
增加派生类成员:这部分内容是派生类对基类功能的扩展,要根据需要仔细考虑应当增加那些成员。在声明派生类时,一般还应当自己定义派生类的构造方法。因为构造风法时不能从基类继承的。
调整基类成员:隐藏同名基类成员。
方法重写的规则:
重写的方法返回值类型时基类方法返回值类型的子类或者相同
重写的方法具有相同的方法名
重写的方法参数列表必须相同
不能重写被标记为final的方法
重写的方法不能缩小访问权限。
不能重写基类私有的方法。
基类的引用可以指向派生类的对象:向上转型
好处:可以使用派生类强大的功能。可以抽取基类的共性。
指向派生类对象的基类的引用可以调用基类中定义的属性和方法
包:命名空间,避免命名冲突。
包的名称就像是我们的姓,而class名称就像是我们的名字。
如果希望自己的类从属于一个包,可以使用package关键字
package com.baidu.www;
abstract修饰的类称为抽象类,抽象类的特点:
不能实例化对象
类中可以定义抽象方法(abstract修饰的方法)
抽象类和接口
接口中的方法默认修饰符为public abstract
接口中所有的属性的修饰符默认为public static final;
接口和抽象类的区别:
抽象类描述的是“是不是”的问题,而接口描述的是“有没有”的问题
接口只有定义,不能有方法的实现,抽象类可以有定义和实现,方法可以在抽象类中实现。
接口interface,抽象类abstract。
interface Test{ int compareTo(); }
1. 每个类只能拥有一个超类,但是可以实现多个接口,接口中的方法默认是public类型,即不写权限修饰符。在其实现类中,不能降低权限。接口中的属性都是常量,即便不写关键字finalclass Student implements 接口名{ ... }
1. 一个类实现接口必须实现接口中所有的抽象方法,否则必须定义为抽象类。抽象类
不能实例化,但是可以声明抽象类的引用。
包含抽象方法的类必须定义为抽象类
不包含抽象方法的类不一定不是抽象类
抽象方法不含方法体,必须显式定义为abstract
接口
弥补Java单一继承机制的不足
不能实例化,但是可以声明接口变量
包含常量和方法的声明,不包含变量和方法的实现(常量可以没有final修饰,但是必须初始化,在接口实现类中不能修改值,方法可以没有abstract,在交界口裂实现类中必须实现)
接口中的抽象方法不能有方法体
Object类:所有Java类的祖先,每个类都可以使用Object作为基类。所有对象都是先这个类的方法。
在不明确给出超累的情况下,Java会自动把Object作为要定义类的超类。
可以使用类型为Object的变量指向任意类型的对象。
Object类有一个默认构造方法public Object(),在构造派生类实例时,都会先调用这个默认构造方法。
Object类的变量只能用作各种值的通用持有者。要对他们进行任何专门的操作,都要知道他们的原始类型并进行类型转换。
```
Object obj = new MyObject();
MyObject x = (MyObject)obj;
```1. Object方法
Object():默认构造方法
clone():创建并返回此对象的一个副本
equals(Object obj):指示某个其他对象是否与此对象相等。
finalize():当垃圾回收期确定不存在对改对象更对的运用时,由杜希昂的垃圾回收器调用此方法。
getClass():返回一个对象运行时类。
hashCode():返回该对象的哈希码值
notify():唤醒在此对象监视器上等待的单个线程。
notifuAll():唤醒在此对象监视器上等待的所有线程。
toString():返回该对象的字符串表示
wait():导致当前的线程等待,直到其他线程调用此对象的notify或者notifyAll方法。
equals方法:用于测试某个对象是否和另一个对象相等,它在Object类中的实现是判断两个对象是否指向同一块内存区域。
toString方法:
getClass().getName()+"@"+Integer.toHexString(hashCode())
创建包装器类型的对象:
Java可以直接处理基本数据类型,但是在有些情况下需要将其作为对象来处理,这时就需要将其转化为包装器类型,在一定的场合,运用Java包装器类来解决问题,能大大提高编程效率。
创建的两种方法
```
1.Integer i = new Integer(1);
2.Double d = Double.valueOf(3.14);
对象一旦赋值,其值将不能再改变。
```1. 有时也需要将包装器类型的对象转换为基本数据类型
特点:
内部类是一种编译时的语法,编译后生成的两个类是独立的两个类。(对于一个名为other的外部类和其内部定义的名为inner的内部类。编译完成后出现other.class和other$inner.class两个类)
内部类可以访问外部类的任何成员(包括私有成员),但是外部类不能直接访问内部类的成员。
内部类可为静态,可以用procected,private修饰,而外部类只能使用public和缺省的包访问权限。
内部类的形式:
成员内部类
作为外部类的一个成员存在,与外部类的属性,方法并列。内部类和外部类的实例变量可以共存。
在外部类中使用内部类首先在外部类中new出内部类。
局部内部类
局部内部类不能声明为接口
想要使用局部内部类时,需要生成外部类对象,通过外部类对象调用外包方法,在方法中才能调用局部内部类。
匿名内部类
静态内部类
静态属性特点:
声明为static的属性也被称为类属性。
当创建一个对象时,并不产生static属性的拷贝。
该类所有的实例共享同一个static属性
访问形式:
通过类名.共有静态属性名
使用规则:
在静态方法中,仅能直接调用其他的static类型的方法。
在静态方法中,只能直接访问static类型的属性。
在静态方法中,不能以任何方式使用this或者super。
静态代码块尽在该类贝介在时执行一次。
总结:
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。
被static修饰的成员变量和成员方法独立于该类的任何对象,他不依赖特定的实例,被类的所有实例共享。
static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用,但是不饿能在其他类中通过类名来直接引用。
用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块。
enum enum_name{num1,num2,num3} 定义星期的枚举: enum day{monday,tuesday,wensday,thursday,friday} 使用 day.monday
1. 枚举的本质:Java中枚举的本质就是一个class异常分为两大类:
Error:描述了Java运行系统中的内部错误以及资源耗尽错误,唯一的解决方法:尽力使程序安全的终止。
小结:
系统自动排出的异常:所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且Java强烈要求程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。
语句抛出的异常:用户程序自定义的异常和应用程序特ing的异常,必须借助于throws和throw语句来定义抛出的异常。
throw和throws的区别:
throws语句用在方法声明后面,表示该方法会抛出哪些异常,使它的调用者知道要捕获这些异常
throw语句用在方法体内,表示抛出异常,是具体向外抛异常的动作,它抛出一个异常实例。
断言:assert
当需要在一个值为FALSE时中断当前操作的话,可以使用断言。
assert后买你跟着冒号表达式,如果冒号之前为true,则冒号后面的被忽略,否则抛出AssertionError,错误内容为冒号后面的文字。
日期的格式化和解析:
DateFormate
java.time:
瞬时时间:Instant
年月日:LocalDate
时间:LocalTime
java.time.format
Instant类---时间戳
获取当前时间,类似于java.util.Date:
Instant now = Instant.now();
Instant t = Instant.ofEpochSecond(100)
和Date的转换
Date.from(now);
LocalDate类
LocalDate类只有年月日部分,没有小时分钟秒
实例化
LocalDate today = LocalDate.now();
LocalTime
LocalTime类只有小时分钟秒,没有年月日
实例化:
LocalTime now = LocalTime.now();
LocalTime zero = LocalTime.of(0,0,0);//00:00:00
LocalTime mid
字符串常量类:String
String对象一经赋值,其值不可修改
字符串变量类:StringBuffer,StringBuilder
```
String name = new String("Hello!");
```1. 字符串常量初始化
```
String name = "Hello!";
```1. 区别
String str = "a"; 这个只是一个引用,内存中如果有“a"的话,str就指向它;如果没有,才创建它;
如果你以后还用到"a"这个字符串的话并且是这样用:
String str1 = "a"; String str2 = "a"; String str2 = "a"; 这4个变量都共享一个字符串"a"。
而String str = new String("a");是根据"a"这个String对象再次构造一个String对象,将新构造出来的String对象的引用赋给str。
String类:
出于安全考虑,String类实现了值的不可变
String中常用的字符串处理方法:
字符串连接:concat(String str)/“+”运算符
字符串查找:
indexOf(String str);
lastIndexOf(String str);
charAt(int indexOf);
startsWith(String prefix);
字符串分割:
split(String regex)字符串分割
compareTo(String str)字符串比较
equalslgnoreCase(String str)忽略大小写
字符串替换:
字符串求子串
字符串大小写转换
toUpperCase()小写转大写
StringBuffer类
StringBuffer类是一个字符串变量类
StringBuffer对象的值可以修改
主要用于对字符串做大量修改的操作时
StringBuffer变量的初始化:
构造方法初始化
StringBuffer stringBuffer = new StringBuffer(“Hello”);
StringBuffer类中常用的方法:
字符串连接:append(Object obj);
字符串删除:delete(int start,int end);
字符串插入:insert(int offset,Object obj);
StringBuilser类:
StringBuilder类和StringBuffer类的调用是一致的。
StringBuilder类和StringBuffer类的区别:
StringBuffer是线程安全的
StringTokenzier类
StringTokenizer类主要用途是将字符串以界定符为界,分析为一个个独立的token(单词)
StringTokenizer中的定界符可以自己指定。
StringTokenizer常用的方法:
hasMoreTokens:是否有更多的分隔符
日期的格式化:
Java中用于表示日期的类
Date类
Calendar类
日期的格式化和解析
DateFormate
SimpleDateFormate
Date类
java.util.Date类实际上是一个包裹类,它包含的是一个长整型数据,表示的是从GMT1970年1月1日00:00:00这一刻之前或者之后经历的毫秒数
Date类提供了两个重载的构造方法
Date():以本地当前时间构造一个Date对象。
Date(long date):以距离基准时间的毫秒数构造Date对象,
Date date = new Date();
System.out.println(date.getTime)
Calendar类
日历类,Calendar类定义了足够的方法来表述日历的规则
Calendar是一个抽象类,Java中提供了Calendar的一个具体的实现类GregorianCalendar
Calender和Date的转换
```
Calendar calendar6
```1.
原文:https://www.cnblogs.com/charlottepl/p/12538563.html