Java入门知识 Java(二)

Java入门知识
1、封装
将对象的属性和行为封装起来。而将对象的属性和行为封装起来的载体就是类,类通常对客户隐藏其实现的细节,这就是封装的思想。
2、继承
Java语言中,一个类只可以有一个父类。子类不仅会覆盖父类的方法,还会覆盖父类的属性。
3、Object类
public String getclass()
//类方法,返回对象的类名
toString()
//类方法,返回类名加上十六进制的哈希值,其中String类和Integer类重写了toString方法。
equals()
//类方法,使用时尽量重写
4、重载
(1)方法名相同,参数不同(数量)
(2)方法名相同,参数顺序不同
(3)方法名相同,参数类型不同
5、类的向下转型
Parents p = new Parents();
Child c = (Child)p
注:上述方法错误,正确的方法如下:
Parents p = new Child();
Chilld c = (Child)p;
6、instanceof关键字
Boolean resault = child instanceof Parents
其中:child,子类对象;Parents,父类。
7、抽象方法
系统构架师用抽象方法设计出一个程序的整体构架,然后再有程序员来实现这些方法。
抽象类实例化必须借助它的非抽象子类。abstract
8、接口
创建接口,用interface,实现接口使用implements
接口的实例化只能借助于实现它的类
接口可以实现多重继承,即一个类可以实现多个接口。
例:class Test implements Interface1, Inteface2, Interface3, …
9、抽象类于接口对比
抽象类是对根源的抽象,例:人类
接口是对动作的抽象,例:吃东西
五个不同点:
(1)子类只能继承一个抽象类,但可以实现任意多个接口。
(2)接口中的方法都是抽象方法。抽象类可以有非抽象方法。
(3)抽象类中的成员变量可以是各种类型,接口中的成员变量只能是静态常量。
(4)抽象类中可以有静态方法和静态的代码块等,接口中不可以。
(5)接口没有构造方法,抽象类可以有构造方法。
10、java类包
import java.lang.Math
其中:java.lang为包名;Math为类名。
对java类包中的类进行实例化可以使用【包名.类名】的方式进行实例化

11、访问控制
访问控制
pubilc(共有的) protected(受保护的) default(省略) private(私有的)
本类 √ √ √ √
本类所在的包 √ √ √
其他包子类 √ √
其他包非子类 √

12、final
(1)final修饰的类无法被继承
(2)final修饰的方法无法被重写
(3)final修饰的变量为常量
13、内部类
(1)成员内部类:类的成员类,调用成员内部类的方法,必须借助外部类的对象,同时在外部类中实例化内部类,添加成员方法用以调用内部类的方法。对内部类实例化也必须在外部类中进行(无法在main()方法中进行实例化)。
(2)局部内部类:方法体中的类。调用局部内部类也要借助外部类的方法。
(3)匿名内部类:没有类名的内部类。在调用的时候才对类进行编写。调用方法:new 父类() {方法体}.方法名字
(4)
例:return new OutInterface() {
public void prt() {
System.out.println(“匿名内部类”);
}
};
(5)静态内部类:静态内部类前加上static,在静态内部类中可以创建main方法。
14、内部类的继承
语法:
class ClassA{
class ClassB{ }
}
class OutputInnerClass extends ClassA.ClassB
15、异常的分类:
Throwable
(1)Exception -> RuntimeException
(2)Error(不应该试图捕获的严重错误)
16、捕捉异常—try…catch语句
(1)自动捕捉异常
(2)try…catch语句捕捉异常
try{
被捕获的代码
}catch(异常类型 e){
对异常的处理
}
(3)多重try…catch代码块
try{
语句1;
语句2;

}catch(异常类型1 e){

}catch(异常类型2 e){

}catch…
/*
*1.NullPointerException 空指针异常
*2.ArithmeticException 算数异常
*3.ClassCastException 类转换异常
*4.InterruptedException 线程中断异常
/
17、捕获异常—finally代码块
try{

}catch(…){

}finally{
最后一定会执行的代码
}
有四种情况不会执行finally代码块:
(1)finally代码块中发生了异常
(2)finally之前的代码中使用了System.exit()
(3)程序所在的线程死亡
(4)关闭CPU
18、throw关键字制造异常
使用throw关键字手动制造一个异常
throw new 异常类型
例:if (count < 0) {
throw new ArithmeticException(“人员数量为负:” + count);
}
19、throws关键字抛出异常
throws将代码块中可能产生的异常交给别人来处理
例:public static void show() throws InterruptedException, NullPointerException, Exception {
for (int i = 0; i < 10; i++) {
System.out.println(i);
Thread.sleep(100);
}
}
try {
show();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println(“结束!!!”);
}
/

  • 注:能自己处理的异常千万别抛出,自己处理不了的异常一定要抛出。
  • main()方法抛出的异常无法被处理
    /
    Thread.sleep(毫秒数);
    //线程睡眠n毫秒
    20、自定义异常
    自己创建一个API中没有的异常
    语法:
    class 自定义异常类 extends 已有异常类{}
    在使用自定义异常类的时候可以使用throws(throw new 自定义异常类();)也可以重写printStackTrace()方法
    例:
    public void printStackTrace() {
    super.printStackTrace();
    JOptionPane.showMessageDialog(null, message, “标题:发生异常”, JOptionPane.ERROR_MESSAGE);
    }
    其中:JOptionPane.showMessageDialog(null, message, “标题:发生异常”, JOptionPane.ERROR_MESSAGE);为错误提示对话框
    21、异常的使用原则
    (1)不要忽略捕捉到的异常
    (2)不要过度使用异常
    (3)不要使用过度庞大的try…catch代码块
    (4)子类抛出的异常不能比父类更高级(特例:RuntimeException异常及 其子类不受此原则约束)
    22、数字类型包装类
    Byte -> byte Short -> short Integer -> int Long -> long Float -> float
    Double -> double Boolean -> boolean Character -> char
    Integer.MAX_VALUE 最大值 Integer.MIN_VALUE 最小值
    Integer.size 长度 Integer.TYPE 类型
    三种构造方法:
    (1)new Integer(123);
    (2)New Integer(“123”);
    (3)Integer.valueOf(“123”);
    (4)Integer.parseInt(“123”);
    //将字符串转成int类型
    (5)inte.intValue();
    //取Integer对象inte的int值
    (6)Integer.toBinaryString(n);
    //将n转化成二进制,返回字符串String类型的值
    (7)Integer.toOctalString(n);
    //将n转化成八进制,返回字符串String类型的值
    (8)Integer.toHexString(n);
    //将n转化成十六进制,返回字符串String类型的值
    (9)Integer.toString(n, m);
    //将n转化成m进制,返回字符串String类型的值
    23、Double类
    构造方法:
    new Double(double value);
    new Double(String str);
    Double.isNaN(num.doubleValue());
    //判断是否是非数字,其余方法与Integer大致相同
    24、Boolean类
    构造方法:
    new Boolean(boolean value);
    new Boolean(String str);
    //Boolean类默认值为false
    25、Character类
    构造方法:
    new Character(char ch);
    new Character(String str);
    判断大小写:ch.isUpperCase()/ch.isLowerCase(),返回布尔值。
    判断是否是字母:ch.isLetter(),返回布尔值
    判断是否是数字:ch.isDigit(),返回布尔值
    26、Number类(abstract)
    方法:
    byteValue();
    doubleValue();
    floatValue();
    intValue();
    longValue();
    shortValue();
    27、自动装箱和自动拆箱
    int -> Integer(自动装箱):Integer num = 100;
    Integer -> int(自动拆箱):int i = new Integer(100);
    在Java JDK1.5以后java会将相同的byte值和boolean值存在同一个对象中。因此会有以下结果:
    例:Integer a1 = 200;
    Integer a2 = 200;
    Integer a3 = 127;
    Integer a4 = 127;
    a1 == a2的值为:false
    a3 == a4 的值为:true
    byte值的范围为-128—127,a3和a4在byte值的范围内,因此默认为同一个Byte对象。
    28、Math类
    java.lang.Math
    (1)java.lang包不需要引入,系统会自动调用
    (2)Math类提供的都是静态方法
    (3)常用方法:
    取最大值max(double a, double b);
    取最小值 min(double a, double b);
    绝对值 abs(double a);
    三角函数:
    sin(double a);正弦
    toRadians(double angdeg);角度数转化为弧度
    todegrees(double angdeg);弧度转化为角度数
    指数函数:
    sqrt(double a);算数平方根
    cbrt(double a);立方根
    pow(double a, double b);a的b次方
    取整:
    round(double a);近似int值
    floor(double a);向下取整
    ceil(double a);向上取整
    29、Math.random()方法
    Math.random()返回double(0<=double<1)即[1, 0)之间的double值。
    【扫描器】Scanner sc = new Scanner(System.in);
    guss = sc.nextInt();
    30、Random类
    Random r = new Random();
    方法:
    nextInt();返回随机int值
    nextLong();返回随机long值
    nextDouble();返回随机double值
    nextFloat();返回随机float值
    nextBoolean();返回随机boolean值
    31、Date类
    java.util.Date
    java.sql.Date
    构造方法:
    Date date = new Date();
    Date date = new Date(long time);//此处time为毫秒值
    类方法:long getTime();返回毫秒值
    32、DateFormat类 (abstract)
    语法:
    (1)构造方法
    DateFormat format = new SimpleDateFormat(“yyyy-MM-dd”);
    /
  • 注:DateFormat为抽象类,可以借助其子类SimpleDateFormat进 * 行实例化。其作用是设置时间格式。
  • 例1:Date date = new Date();
  •  DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
    
  •    format1.format(date); -> 2019-12-14
    
  • 例2:DateFormat format2 = new SimpleDateFormat(“yyyy-MM-dd a * * HH:mm:ss”");
  •    format.format2(date); -> 2019-12-14 下午 22:27:04
    

/
(2)设置时区
TimeZone z = TimeZone.getTimeZone(“GMT+9”);
//北京时区为东八区(GMT+8)
Format2.setTimeZone(z);
Format2.format(date) -> 2019-12-14 下午 23:27:04
33、Calendar类 (abstract)
语法:
(1)构造方法:
Calendar rightNow = Calendar.getInstance();
(2)成员方法:
set();设置日历字段
get();获取日历字段
add()/roll();添加时间量
/

  • 获取设置的年月日时分秒,使用:c.get(Calendar.YEAR/MONTH
  • / DAY_OF_MONTH /HOUR_OF_DAY/MINUTE/SECOND);
  • add()方法支持向前进位;roll()方法不支持向前进位
    /
    34、集合
    Map:HashMap/TreeMap
    Collection:Set/List
    Set:HashSet/TreeSet
    List:ArrayList/LinkedList
    以上都是java.util包
    35、Collection接口
    (1)add();将制定的对象添加到该集合中
    (2)remove();将制定的对象从该集合中移除
    (3)isEmpty();判断当前集合是否为空,返回布尔值
    (4)size();获取集合中元素个数,返回int值
    (5)iterator();返回在此Collection接口的元素上进行迭代的迭代器,用于遍历 集合中的对象
    (6)Iterator迭代器的使用方法:
    例:Collection c = new ArrayList();
    c.add(“This”);
    c.add(“is”);
    c.add(“my”);
    c.add(“world”);
    Iterator it = c.iterator();
    while (it.hasNext()) {
    Object o = it.next();
    System.out.println(o);
    }
    其中:it.hasNext()判空操作,集合为空返回false,集合不为空返回true;it.next(), 取出下一个元素
    36、List接口 (interface)
    ArrayList:数组列表,善于查找
    LinkedList:链表,善于增,删,改
    两者的使用方法使用效果完全相同,只是在内存中的存储结构不同
    37、Iterator迭代器 (interface)
    hasNext();判空操作,集合为空返回false,集合不为空返回true;
    it.next();取出下一个元素
    Iterator it = List.iterator();
    //,泛型可省略;由于Collection接口中有iterator()成员方法,返回
    //一个Iterator对象,因此可以使用任意实现Collection接口的对象调用 //iterator()成员方法对迭代器Iterator实例化。
    38、Set接口 (interface)
    语法:Set set = new TreeSet();
    /
  • 注:要想指定集合的存放顺序,被排序的对象需要实现Comparable接 * 口,实现Comparable接口要重写CompareTo方法。
    例:
public int compareTo(Object o) {
*			Person1 p = null;
*			if (o instanceof Person1) {
*				p = (Person1)o;
*			}else {
*				return -1;
*			}
*			int diff = this.id - p.id;
*		
*			//按id 排序
*
*			/*
*			 * Person [id=201, name=UZI, age=24]
*			 * Person [id=202, name=xiaohu, age=25]
*			 * Person [id=203, name=ming, age=23]
*			 */
*			// int diff = this.age - p.age;
*		
*			//按age 排序
*		
*			/*
*			 * Person [id=203, name=ming, age=23]
*			 * Person [id=201, name=UZI, age=24]
*			 * Person [id=202, name=xiaohu, age=25]
*			 */
*			
*			if (diff != 0) {
*				diff = diff / Math.abs(diff);
*			}
*			return diff;
*		}
*		//this.id比参数大返回1,比参数小返回-1,相等返回0,
*		//不是this的类并且不是其子类返回-1
*/
(1)TreeSet:不能添加空值(null)用迭代输出重写Comparable接口的		int 	compareTo()方法。
(2)HashSet:可以添加空值(null)。
(3)Set:不允许添加相同元素
/*
*	注:HashSet用iterator输出顺序按哈希值排列
*	注:虽然哈希值相同,因为集合中对象不同,HashSet加入同值	*		元素。
*	例:Person p = new Person(“s”, 1);
*		hashset.add(p);
*		p.id = 2;
*		hashset.add(p);
*	则用iterator迭代输出的结果为:
* 	-> Person [name = s, id = 2]
*	-> Person [name = s, id = 2]
*/ 

39、Map接口
Map<k, v>
k -> 键(key),v -> 值(value)
方法:
put(k key, v value);将键值数据放入Map中。
get(Object key);通过键获取值。
containsKey(Object key);查找Map中是否存在某个键。
containsValue(Object value);查找Map中是否存在某个值。
keySet();将Map的key转化成Set。
实现的类:
HashMap:散列码键值对,速度快。
TreeMap:树状键值对,存放有序。
40、三种集合的应用
(1)List关心的是索引。
(2)Set关心唯一性,它不允许重复。
(3)Map关心的是唯一标识符(key)。
41、枚举 Enum
java.lang.Enum
语法:
Public enum 枚举名{
枚举1,枚举2,枚举3,…,枚举n;
//默认final public static

}
Switch() case: 中switch可以匹配的类型除了整型和字符型外,也可以是枚举类型
42、枚举常用的方法
(1)values()
该方法可以将枚举类型的成员以数组的形式返回。
例:
Constants[] enumArray = Constants.values();
//此处Constants是枚举类型
(2)valueOf()
该方法可以将普通字符串转换为枚举实例。
String -> enum
例:Constants c = Constants.valueOf(“Constants_A”);
/*

  • 注:使用valueOf()将字符串转换为枚举实例时,转换的字符串必须是 * 该枚举类型中的枚举成员。
    */
    (3)compareTo()
    该方法用于比较两个枚举对象在定义时的顺序
    Constants_B --CompareTo–> Constants_A => 1
    Constants_B --CompareTo–> Constants_B => 0
    Constants_B --CompareTo–> Constants_C => -1
    (4)Ordinal()
    该方法用于得到枚举成员的位置索引。
    Constants_A -> 索引0
    Constants_B -> 索引1

Constants_C -> 索引2
43、枚举的类成员
例:
public enum Constants{
Constants_A(3);
private i = 4;
public int getI(){
return i;
}
private Constants(int i){
this.i = i;
}
}
/*

  • 注:
  • (1)枚举中,枚举属性和方法可以放在所有枚举对象后面,但最后一个枚 * 举对象后面要加“;”;也可以放在某个枚举成员后面,仅作用于该枚举成 * 员。
  • (2)若枚举中有带参数的构造方法,枚举对象后面也要加上实参对其进行 * 实例化。
  • (3)枚举类型中的常量成员(枚举对象)必须在其他成员之前定义,否则 * 这个枚举类型不会产生对象。
  • (4)构造方法必须是private修饰符或者无修饰符的。
    /
    44、泛型类
    定义泛型类:
    语法:
    类名<参数1, 参数2, …>{}
    例:
    public class Demo{
    T attribute;
    T method(T t){}
    }
    /
  • 注:如果定义了泛型却不使用,Eclipse会发出警告。
  • 注:“<>”中泛型可以是任意字母组合,但是用API中的类名(预定义 * 标识符)会导致使用他们的时候必须使用全称
  • 使用反省不可以进行强制类型转换;在实例化泛型类的时候,new * 后的构造方法泛型可以只写一对尖括号“<>”它可以自动匹配对应的 * 泛型。
  • 在定义声明的时候有几个泛型,对泛型类实例化的时候就要实例化 * 几个泛型,如果一个反省都不用,那么他们默认的是Object
    /
    45、泛型的继承类或接口
    限制泛型的类型:
    语法:
    A a;
    //泛型必须是anyClass的子类,anyClass也可以是接口。
    46、泛型通配符
    限制泛型类型,并可以限制泛型对象的使用
    语法:
    A<?> a;//?,泛型通配符
    A<? extends anyClass> a;
    A<? super anyClass> a;
    /
  • 注:extends,泛型必须是anyClass的子类,且对此对象不能作增加和改写 * 的操作。super,泛型必须是anyClass的父类
  • 泛型通配符不允许使用在类中,在实例化对象的时候可以使用通配符。
  • 例:List<?> l2 = new ArrayList();
    /
    47、继承泛型类和泛型接口
    class ExtendClass{}
    class SubClass extends ExtendClass{}
    interface TestInterface{}
    class SubClass implements TestInterface{}
    继承泛型的四种情况:
    父类: abstract class Father<T1, T2>{}
    (1)全部继承:
    class Child<T1, T2, T3> extends Father<T1, T2>{}
    (2)部分继承
    class Child<T1, A, B> extends Father<T1, String>{}
    (3)实现父类泛型
    class Child<A, B> extends Father<Integer, String>{}
    (4)不实现父类泛型
    class Child<T1, T2, T3> extends Father{}
    /
  • 注:若子类不继承父类泛型(或父类字啊继承时泛型已经实例化),在实 * 例化子类的时候,子类尖括号中的泛型不影响后面构造方法的泛型。
    */
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值