java基础语法:泛型和枚举

一、泛型

(1)泛型集合

概念: 数据安全性的集合,强制要求集合中存储的数据类型统一
a.list<数据类型> list = new ArrayList<数据类型>();
list<数据类型> list = new ArrayList<>();// 简略写法
b.集合中存储的元素必须是<>中指定的数据类型

	例如:list<String> list = new ArrayList<String>();  //常规写法
	     list<String> list = new ArrayList<>(); //简略写法
(2)自定义的泛型类

a.class 类名<泛型标识>{
//在类中将泛型标识作为一种数据类型
}

	例如: class Person<T>{
			private T t;
			public T getT(){
				return T;
			}
			public void setT(T t){
				this.t = t;
			}
		}

注意: 通常会用K/V/T/E等单个大写字母作为泛型标识。

b.泛型类中泛型标识具体的数据类型是根据对象创建时指定:
类名<具体的数据类型> 引用名 = new 类名<具体的数据类型>();

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

注意: 基本数据类型必须使用其包装类型作为泛型类型

(3)泛型的通配符

? 表示任何类型
? extends Number: 表示Number类或Number的任何子类
? super Number: 表示Number类或Number的任何父类
? extends Comparable: 表示任何实现Comparable接口的类
代码演示:

	public static void main(String []args){
		List<String>  s1 = new ArrayList<String>();
		List<Integer> s2 = new ArrayList<Integer>();
		List<Double>  s3 = new ArrayList<Double>();
		List<Object>  s4 = new ArrayList<Object>();
		List<Number>  s5 = new ArrayList<Number>();
		print(s1);
		print(s2);
		print(s3);
		print(s4);
		print(s5);
	}
	//可以将s1,s2,s3,s4,s5作为实参调用该方法
	static void print(List< ? > list){}
	//只能将s2,s3,s5作为实参调用该方法
	static void print(List< ? extends Number > list){}
	//只能将s1,s2,s3作为实参调用该方法
	static void print(List< ? extends Comparable>){}
	//只能将s4,s5作为实参调用该方法
	static void print(List< ? super Number>){}
(4)泛型方法

语法: 泛型写在修饰符和返回值的中间

		//表示 T既是Number的子类,还得实现Comparable接口
例如: public <T extends Number & Comparable> void method(){}

二、jdk5.0出现的一些语法

(1)静态引入

作用: 用到一个类中静态成员时,可以省略类名
语法: import static 静态成员所在的类.*;

	  //意思就是导入lang包中的Scanner类里面的所有静态成员
例如: import static java.lang.Sacnner.*; 
	 import static java.util.Math.*
	 out.println(random()); //等同于System.our.println(Math.ramdom());
(2)格式化输入输出:printf
String name = "zhang3";
int age = 20;
double score = 96.5;
System.out.printf("name: %s , age: %d ,score: %f",name,age,score);
//打印结果: name: zhang3,age: 20,score: 96.5
//等同于System.out.println("name:" + name + ",age:" + age + ",score:" + score);
//区别: printf是直接格式化打印,println是字符串拼接,而String是不可变长字符串,效率会比printf稍微慢点

%s:字符串占位符
%d:整数占位符
%f:浮点数占位符
%1.3f:保留3位小数 1表示小数点前有1位 3表示小数点后有3位

例如: double d = 1.69541516;
     System.out.printf("d= %1.2f",d);// 打印结果1.70

三、枚举

(1)枚举类

概念: 这个类的对象是构造好的,不允许用户构造该类的新对象

特殊的类 默认是Enum的子类 默认被final修饰

  例如:
	  enum Season{
			SPRING,
			SUMMER,
			AUTUMN,
			WINTER;
	  }
  完全等价于:
     class Season{
     	public static final Season SPRING = new Season();
     	public static final Season SUMMER = new Season();
     	public static final Season AUTUMN = new Season();
     	public static final Season SPRING = new Season();
     	private Season(){}
	 }
(2)枚举值

概念:该枚举类型的对象,也是枚举类中的公开静态常量

  例如:
	  enum Season{
			SPRING("春天"),
			SUMMER("夏天"),
			AUTUMN("秋天"),
			WINTER("冬天");
			String name;
			Season(String name){
				this.name = name;
			}
			public void getName(){
				return name;
			}
	  }
(3)语法

(1)所有的构造方法必须是私有的 可以不写,默认添加private(跟接口差不多)
(2)枚举中可以定义抽象方法,由枚举值分别实现

  例如:
	  enum Operator{
		 ADD{
			public double calculate(double a,double b){
				return a+b;
			}
		 },
		 SUBSTRACT{
			public double calculate(double a,double b){
				return a-b;
			}
		 },
		 MULTIPLY{
			public double calculate(double a,double b){
				return a*b;
			}
		 },
		 DIVISION{
			public double calculate(double a,double b){
				return a/b;
			}
		 };
		 public abstract double calculate(double a,double b);
	  }

这些是我预习整理的一些笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值