首页 文章 精选 留言 我的

精选列表

搜索[基础模型],共10000篇文章
优秀的个人博客,低调大师

Python字符串基础操作

找到我就是缘分,为技术一起努力! 格式符 # price_width = 10 item_width = width - price_width header_format = '%-*s%*s' format = '%-*s%*.2f' print '=' * width print header_format % (item_width, 'Item', price_width, 'Price') print '-' * width print format % (item_width,'Apples',price_width,0.4) print format %(item_width,'Pears', price_width,0.5) print format %(item_width,'Cantaloupes',price_width,1.92) find(str,start,end):从start开始end结束寻找与str相匹配的字符,找到返回匹配项index,找不到返回-1 a='With a moo-moo here. and a moo-moo there'.find('moo',7) >>> print(a) 7 >>> a='With a moo-moo here. and a moo-moo there'.find('moo',1,8) >>> print(a) -1 join():在字符序列之间加入分隔符 >>> seq = ['1','2','3','4','5'] >>> sep '+' >>> sep.join(seq) '1+2+3+4+5' lower():全部转为小写 >>> 'ZDF'.lower() 'zdf' title():首字母大写 >>> 'zdf'.title() 'Zdf' replace(oldstr , newstr):替换字符 >>> 'zdf is a clever boy!'.replace('clever','handsome') 'zdf is a handsome boy!' split(/PATTERN):以模式来分割,模式的意思就是REGEX >>> 'zdf+zdf+zdf'.split('+') ['zdf', 'zdf', 'zdf'] strip():去除两侧空格(不包括内部的) >>> ' zdf '.strip() 'zdf' strip('*'):也可指定去除两侧特定的字符 ,如* >>> '*********zdf****************'.strip('*') 'zdf'

优秀的个人博客,低调大师

Java 基础 之 continue和 break

http://www.verejava.com/?id=17159306674727 public class Test2 { public static void main(String[] args) { for (int i = 1; i <= 64; i++) { //如果 i==13 当前循环不执行, 继续执行后面的循环 if (i == 13) { continue; //终止当前循环, 继续后面的循环 } if (i == 20) { break; //终止退出循环, 后面的循环不会再执行 } System.out.print("*" + i); if (i % 8 == 0) { System.out.println(""); } } } } http://www.verejava.com/?id=17159306674727

优秀的个人博客,低调大师

Java 基础 之 do while 循环

http://www.verejava.com/?id=16992623980921 /** do{ }while(判断表达式) : 直到 while 判断表达式为 false 退出循环 */ import java.util.Scanner; public class Test1 { public static void main(String[] args) { // 模拟切水果游戏, 键盘输入 1:西瓜,2:香蕉,3:水蜜桃,-1:雷 //输入数字打印对应的水果, 如果输入-1 终止游戏输入 Scanner in = new Scanner(System.in); int num = 0; //定义了一个变量 do { num = in.nextInt();//变量的生命周期 if (num == 1) { System.out.println("您切到了西瓜"); } else if (num == 2) { System.out.println("您切到了香蕉"); } else if (num == 3) { System.out.println("您切到了水蜜桃"); } else if (num == -1) { System.out.println("您切到了 雷 游戏终止"); } } while (num != -1); //如果输入-1 终止游戏输入 } } http://www.verejava.com/?id=16992623980921

优秀的个人博客,低调大师

Java 基础 之 三目运算

http://www.verejava.com/?id=16992606159717 public class Operation6 { public static void main(String[] args) { //三目运算 int score=90; String result=score>=60?"及格":"不及格"; System.out.println(result); } } /* 回顾总结 运算分为: 1.算数运算 包括 +,-,*,/,%,++,-- 2.赋值运算 =,+=,-=,%=,/=,*= 3.逻辑运算 &&,||,! 4.关系运算 >,>=,<,<=,!=,== 5.位运算 &,|,~,^,<<,>>,>> 6.字符串连接 + 7.三目运算 ? : */ http://www.verejava.com/?id=16992606159717

优秀的个人博客,低调大师

Java 基础 之 逻辑运算

http://www.verejava.com/?id=16992598459515 public class Operation4 { public static void main(String[] args) { //逻辑运算 /* 包括: 与&&(and) ,或||(or) 非! 1. && 当操作两边都为true时返回结果为true,否则为false 2. || 当操作两边都为false时返回结果为false,否则为true; 3. ! 取反,操作为true返回结果false,否则为true */ System.out.println(true&&false); System.out.println(false&&true); System.out.println(false&&false); System.out.println(true&&true); System.out.println("---------------"); System.out.println(true||false); System.out.println(false||true); System.out.println(true||true); System.out.println(false||false); System.out.println("---------------"); System.out.println(!true); System.out.println(!false); // ! 是单目运算 //System.out.println(true!false); System.out.println("----------------"); boolean b=true; System.out.println(b); System.out.println(1>2&&(b=3>4)); System.out.println(b); System.out.println(2>1&&(b=3>4)); System.out.println(b); /* 注意: &&的短路特性: 因为程序是从上往下,从左往右执行的,当判断左边为false时 &&的返回结果就已经注定是false ,所以后面的判断计算机就不执行了. */ System.out.println("--------------"); boolean b1=true; System.out.println(b1); System.out.println(2>1||3>4); System.out.println(2>1||(b1=3>4)); System.out.println(b1); System.out.println(1>2||(b1=3>4)); System.out.println(b1); /* 注意: || 的短路特性:因为程序是从左往右执行,当判断左边为true时 返回结果就已经注定是 true, 所以后面的判断计算机不执行 */ } } http://www.verejava.com/?id=16992598459515

优秀的个人博客,低调大师

Java 基础 之 常量类型转换

http://www.verejava.com/?id=16992572054911 /* 类型转换分为以下几种情况 1. 整型类型转换 2. 浮点类型转换 3. 布尔类型转换 4. 字符类型转换 */ public class TypeConvert { public static void main(String[] args) { byte a1=1; int b1=2; //小整数类型转换成大整数类型, 直接转换 b1=a1; System.out.println(b1); byte a2=1; int b2=2; int b3=128; //大整数类型转换成小整数类型, 需要强制类型转换, 并且可能损失精度. 将会把高位切除. a2=(byte)b2; a2=(byte)b3; System.out.println(a2); byte c1=1; float c2=10.3f; //整数转浮点型,直接转换 c2=c1; System.out.println(c2); byte d1=1; float d2=10.3f; float d3=128.2f; //浮点类型转整型 直接去掉小数部分, 需要强制类型转换, 并且可能丢失精度 d1=(byte)d2; d1=(byte)d3; System.out.println(d1); //布尔类型不能转换成其他类型, 其他类型也不能转换成布尔类型 boolean e1=true; //e1=(boolean)1; char f1='a'; int f2=1; char f3='b'; int f4='b'+1; char f5='b'+1; //整型可以转换成 字符类型,需要强制类型转换,整型也可以转换成字符型,转换的规则为 ACSII 码表 f1=(char)f2; f2=f3; System.out.println(f1); System.out.println(f2); System.out.println(f4); System.out.println(f5); //字符串连接 + 转换 String str="hello"; String str2=str+1; String str3=str+2.5; String str4=str+true; String str5=str+'F'; //字符串跟其他基本类型相加 其他类型自动转换成字符串连接 System.out.println(str2); System.out.println(str3); System.out.println(str4); System.out.println(str5); } } /* 总结: 1. 类型转换小数值到大数值转换 byte<short<int<float<long<double 2. 整型 默认是 int 型, 浮点型 默认是 double 型 */ http://www.verejava.com/?id=16992572054911

优秀的个人博客,低调大师

Java 基础 之 数据类型

http://www.verejava.com/?id=1699255932129 /** java 分为4类8种基本数据类型 4类: 1. 整型(byte,short,int,long) 2. 浮点型(float,double) 3. 字符型(char) 4. 布尔型(boolean) */ public class BaseDataType { public static void main(String[] args) { //整型 byte, short, int ,long byte a1=1; //byte 占 1个字节=8位 -2^7~2^7-1(-128~127) short a2=10; //short 占 2个字节=16位 -2^15~2^15-1 int a3=100; //int 占 4个字节=32位 -2^31~2^31-1 long a4=1000; //long 占 8个字节=64位 -2^63~2^63-1 System.out.println(a1); System.out.println(a2); System.out.println(a3); System.out.println(a4); /*注意: 1. 整型赋值的时候如果超出了存储范围 编译报错 丢失精度 */ //浮点型 float , double double b1=10.1; //double 占8个字节=64位 float b2=12.2f; //float 占4个字节=32位 float b3=(float)13.3; System.out.println(b1); System.out.println(b2); System.out.println(b3); /* 注意: 1. 浮点型数据默认是 double 型, 如果要赋值给 float型必须经过强制类型转换, 对于浮点数强制类型转换两种方式 一种是: 直接在后面加f 一种是:在前面加(float) */ //字符型 char 是由单引号括起来的单个字符 char c1='a'; // char 占2个字节=16位 char c2='1'; char c3='好'; System.out.println(c1); System.out.println(c2); System.out.println(c3); /* 注意: 1. 在计算的存储中数字和字母占1个字节,而汉字占2个字节, java为了解决这个问题所以定义了char占2个字节来统一存储字母和汉字 2. char 跟 String的区别是 字符串是双引号括起来的多个字符 */ //布尔型 boolean boolean d1=true; //布尔型占1个字节=8位 boolean d2=false; System.out.println(d1); System.out.println(d2); /* 注意: 1. 布尔类型的true 不能等于1 , false 也不等于0,这个跟c语言要区分 */ } } /* 回顾总结: 1.按所属的数据类型划分 基本数据类型变量 : 8种基本数据类型(byte,short,int,long,float,double,boolean,char) 引用数据类型变量 : 除了8种基本数据类型的变量都是引用变量 2. String 不属于基本数据类型 属于引用数据类型 */ http://www.verejava.com/?id=1699255932129

优秀的个人博客,低调大师

Java 基础 之 标识符

http://www.verejava.com/?id=1699254299287 /* 标识符的命名规则: 1. 是以字母,数字,下滑线_和美元符号$ 组成 2. 不能以数字开头 3. 区分大小写 4. 不能是java的保留关键字 5. 最好是见名思意 */ public class Identifier { public static void main(String[] args) { //不能以数字开头 //int 1number=1; //标识符区分大小写 int b=2; int B=3; System.out.println(b); System.out.println(B); //不能是java 的保留关键字 //int class=4; //年龄最好见名思意 int age=30; //两个字符串相连接用加号 + System.out.println("年龄是:"+age); } } http://www.verejava.com/?id=1699254299287

优秀的个人博客,低调大师

Linux最常用的基础命令

1.目录 1.1切换目录 cd usr # 切换到该目录下usr目录 cd ../ # 切换到上一层目录 cd / #切换到系统根目录 cd ~ #切换到用户主目录 cd - #切换到上一个所在目录 1.2 目录的增删改查 (1)增加目录 命令: mkdir 目录名称 (2)删除目录 命令: rm -rf 目录名 -r 递归(删除) -f 强制不询问(删除) 注意:rm不仅可以删除目录,也可以删除其他文件或压缩包,为了增强大家的记忆, 无论删除任何目录或文件,都直接使用rm -rf 目录/文件/压缩包 (3)修改目录 1)修改目录的名称 命令: mv 目录名称 新目录名称 注意:mv的语法不仅可以对目录进行重命名而且也可以对各种文件,压缩包等进行 重命名的操作 2)移动目录的位置—剪切 命令: mv 目录名称 目录的新位置 注意:mv语法不仅可以对目录进行剪切操作,对文件和压缩包等都可执行剪切操作 3)拷贝目录–复制 命令: cp -r 目录名称 目录拷贝的目标位置 -r代表递归(拷贝) 注意:cp命令不仅可以拷贝目录还可以拷贝文件,压缩包等,拷贝文件和压缩包时不 用写-r递归 (4)查看目录 命令: ls [-al] 父目录 -a,可以看到该目录下的所有文件和目录,包括隐藏的 -l,可以看到该目录下的所有目录和文件的详细信息 注意:ls -l 可以缩写成ll (5)寻找目录 命令: find 目录 参数 示例:查找/root下的与test相关的目录(文件) find /root -name ‘test*’ 1.3显示当前所在位置 pwd 2.文件 2.1文件的创建 命令: touch 文件名称 - 此时创建了一个新的空文件 2.2删除文件 熟记rm -rf 文件即可 2.3修改文件的内容 命令: vi 文件名 此时不能编辑,因为此时处于命令模式, 输入 i 进入编辑模式 编辑完成后,按下Esc,退回命令模式 需输入冒号:进入底行模式,在底行模式下 输入wq代表写入内容并退出,即保存; 输入q!代表强制退出不保存。 文件只需修改某个地方时,可以采用这种方式, 文件需大面积修改时,见Notepad++ 连接 FTP 实现Windows环境下同步编辑 Linux单个文件 2.4文件的查看(查) 命令: cat/more/less/tail 文件 使用cat查看文件,只能显示最后一屏内容 使用more查看文件,可以显示百分比,回车可以向下一行,空格可以向下一页,q可以退出查看 使用less查看文件,可以使用键盘上的PgUp和PgDn向上和向下翻页,q结束查看 使用tail -10 查看/etc/sudo.conf文件的后10行,Ctrl+C结束 注意:命令 tail -f 文件 可以对某个文件进行动态监控, 例如 可以使用 tail -f catalina.out 监控tomcat的日志文件 最常用的是 tail -f catalina.out 监控tomcat的日志文件 cat 某一文件名 2.5 打包并压缩文件 Linux中的打包文件一般是以.tar结尾的,压缩的命令一般是以.gz结尾的(只是为了方便区分是否为压缩文件) 命令: tar -zcvf 打包压缩后的文件名 要打包压缩的文件 z:调用gzip压缩命令进行压缩 c:打包文件 v:显示运行过程 f:指定文件名 2.6 解压压缩包 命令: tar -zxvf 压缩文件 tar -zxvf 压缩文件 -C 解压文件的位置 z:调用gzip压缩命令进行压缩 x:代表解压 v:显示运行过程 f:指定文件名 3.其他 3.1搜索命令(文件内部搜索) 命令: grep 要搜索的字符串 要搜索的文件 3.2 查看进程 命令: ps -ef 3.3 管道命令 命令: | 将前一个命令的输出作为本次目录的输入 常常与搜索命令结合使用,比如查看某个进程的情况: ps -ef | grep 某进程名 ps -ef | grep mysql ps -ef | grep tomcat 3.4 杀死进程 命令: kill -9 进程的pid 3.5网络通信命令 ifconfig # 查看当前系统的网卡信息 ping 某主机IP地址 # 查看与某台机器的连接情况 netstat -an #查看当前系统的端口使用 firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running) systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 3.6 关机重启 poweroff #关机 reboot #重启

优秀的个人博客,低调大师

java基础巩固-详解泛型

java泛型(generics)为jdk5引入的新特性,泛型提供了编译时类型安全检测机制,可以在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。 使用泛型的好处 它的主要目标是保障java的类型安全,简化编程,泛型可以使编译器知道一个对象限定类型是什么,所有的强制转换都为自动和隐式的。 举个简单的栗子 public class test1 { public static void main(String[] args) { List list = new ArrayList(); list.add("字符串"); list.add(1); for (Object a : list) { System.out.println("toString转换->" + a.toString()); System.out.println("强转->" + (String)a); } } } 执行结果 Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String toString转换字符串 强转字符串 toString转换1 at generics.test1.main(test1.java:13) 虽然编译的时候没有报错,但是运行的时候强转为String的时候出现类型转换的错,可以看出来这种写法是不安全的。 进一步做点改良(使用泛型后,编译器报错,这样可以预防一些后续编译通过但运行报错的情况) 泛型的一个重要特性:跟反射不同的是,泛型检查只在编译期间有效,而反射则是在运行时有效。 下面做个简单的测试 public class test2 { public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { //测试泛型 List<String> list1 = new ArrayList<String>(); List<Integer> list2 = new ArrayList<Integer>(); Class class1 = list1.getClass(); Class class2 = list2.getClass(); if(class1.equals(class2)) { System.out.println("类型相同"); } //测试反射 Map<String, String> map = new HashMap<String, String>(); String key = "key"; Integer val = 1; //通过反射获取方法 Method m = HashMap.class.getDeclaredMethod("put", new Class[] { Object.class, Object.class }); //invoke意在将方法参数化 动态调用Method类代表的方法 并传入参数 m.invoke(map, key, val); System.out.println(map); System.out.println(map.get(key)); //获取key为key的值 } } image.png 泛型的使用方式 1.泛型类 2.泛型接口 3.泛型方法 泛型类 //T,E,K,V等均表示为泛型 public class Generic<T> { private T key;//成员变量类型为T,由外部指定 public Generic(T key) { this.key = key; } public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定 return key; } public static void main(String[] args) { //在实例化泛型类时 需指定T的具体类型(这边5就代表integer) Generic<Integer> s1 = new Generic<Integer>(5); Generic<String> s2 = new Generic<String>("5"); System.out.println(s1.getClass());//class generics.Generic System.out.println(s2.getClass());//class generics.Generic System.out.println(s1.getKey().getClass()); //class java.lang.Integer System.out.println(s2.getKey().getClass()); //class java.lang.String /** * 定义泛型类不一定要传入泛型类型实参,如果传入的化会在编译时做限制,不传的化可以为任一类型, * 但处于安全考虑一般都定义否则一些场景容易出现ClassCastException错误 */ Generic t1 = new Generic(5); Generic t2 = new Generic(0.5); System.out.println(t1.getKey()); //5 System.out.println(t2.getKey()); //0.5 System.out.println(t1.getKey().getClass()); //class java.lang.Integer System.out.println(t2.getKey().getClass()); //class java.lang.Double } } } 泛型接口 泛型接口与类定义和使用大致相同,例如Map接口的一小段代码 public interface Map<K,V> { ... V put(K key, V value); void putAll(Map<? extends K, ? extends V> m);//指明泛型的上边界 ... } 实现泛型接口,假设实现map //假如一个类实现了泛型接口,需要将泛型声明(test3<K,V>) 一起加到类中 否则编译报错 public class test3<K,V> implements Map<K,V>{ @Override public int size() { return 0; } @Override public boolean isEmpty() { return false; } ... } 泛型方法 泛型类,是在实例化类的时候指明【泛型】的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。 这样说有点绕口 举两个栗子 /** 泛型类 **/ //定义泛型类 该类 public class Test<T> { public T key; public test5(T key) { this.key = key; }; } //通过实例化指明【泛型】T的类型为String Test<String> t = new Test<Sring>("123"); /** 泛型方法 定义泛型方法时 必须在返回值前面加一个 <T> 来声明这是一个泛型方法 **/ public class test5<T> { //在这里<T>表示返回的类型是T的 该方法的作用是新建任一指定类型并返回 public <T> T getObject(Class<T> c) throws IllegalAccessException, InstantiationException { T t = c.newInstance();//创建泛型对象 return t; } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { test5 t = new test5(); //调用泛型方法【在调用方法的时指明泛型具体类型 这边用User型】 //在这object就是User的实例 这边测试别用类似java.lang.xxx这样BootStrap类加载器加载的类 否则输出为空 Object object = t.getObject(Class.forName("generics.User")); System.out.println(object.getClass()); //输出class generics.User } } 泛型的上下边界 使用泛型的时,可以通过传入泛型类型实参进行上下边界的限制。 如定义一个泛型类 public class Generic<T extends Number> { //此处为上边界 意为给定T类型需为Number子类 T super XX 为下边界 private T key; public Generic(T key) { this.key = key; } public T getKey(){ return key; } } 如果这样实例化Generic类编译器会报错,因为String不是Number的子类。 Generic<String> generic = new Generic<String>("11111"); 一些思考 1.下面这个getKey是否为泛型方法 public class Generic<T> { private T key; public Generic(T key) { this.key = key; } public T getKey(){ return key; } } 并不是,虽然在方法中使用了泛型,这个是类中普通的成员方法,因为它的返回值是声明泛型类【Generic】时已经声明过的泛型【T】,所以在方法中可以继续使用T这个泛型。 2.经常在使用泛型的代码中看见通配符 【?】它的作用是什么,和T的区别在哪呢 比如Map源码 void putAll(Map<? extends K, ? extends V> m); 在这里?是通配符,泛指所有类型,常用于不确定类型的情况 ? extends T 指T类型或T的子类型 ? super T 指T类型或T的父类型 它们的区别在于 "T"是定义类或方法时声明的东西,"?"是调用时传入的东西 ①T常用于声明一个泛型类或者泛型方法 ②?常用于使用泛型类或泛型方法 声明泛型类时不能用无界通配符<?> //error example class demo<?> { private ? item; } 通配符是可以用来使用定义好的泛型的 但是T不能用来继续使用已经定义好的泛型 当我们在外面使用一个带泛型T的类或方法时,T应该用一个实际的数据类型替代它,也可以使用?通配符 public class User { HashMap<T,String> map = new HashMap<String, String>(); //error example HashMap<?,String> map = new HashMap<String, String>(); //right example } 看hashMap源码中的putAll方法 简单来说,T一般是声明时用(泛型类,泛型方法),而?通配符一般是使用时用,可以使用作为通用类。

优秀的个人博客,低调大师

Java基础巩固-枚举的使用

枚举:jdk1.5引入的新特性,允许用常量表示特定的数据片段,且全一类型安全的形式来表示。 常用的定义常量方式 public static final xxx ...例如: public static final int SEASON_SPRING = 1; public static final int SEASON_SUMMER = 2; public static final int SEASON_FALL = 3; public static final int SEASON_WINTER = 4; 使用常量的缺点 1.类型不安全,若一个方法要求传入季节参数。 public Object getSeasonXXX(int seasonType) { ... return xxx; } //如果这个时候要调用getSeasonXXX根据传入的天气获取天气的一些相关属性,用常量的话,形参就是int类型,这个时候getSeasonXXX(SEASON_WINTER)和getSeasonXXX(4)都能获取冬天的天气属性,那么getSeasonXXX(5)也能编译过去而不会警告,但这样就不安全了。 2.没有命名空间。开发者要在命名的时候以SEASON_开头,另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。 3.如果定义int值相同的变量,容易造成混淆。 使用枚举类 这个时候尝试利用枚举来定义常量,写个最简单的例子,例如 public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER; } 将该类的编译后的class文件 javap(对编译的文件进行反编译)一下,可以看到类型默认继承java.lang.Enum 简单用法 public class testEnum1 { enum EnumW { SPRING,SUMMER,FALL,WINTER; } public static void main(String[] args) { EnumW enumW = EnumW.SPRING; System.out.println(enumW); //输出SPRING System.out.println(enumW); //输出SPRING if (enumW.equals(enumW.toString())) { //这边不会输出相同 因为enumW不是String类型 但是有equals、toString()方法 System.out.println("相同"); } } } 枚举类也可以定义属性和方法,例如 public class testEnum2 { enum EnumW { SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天");//枚举类的实例必须放在第一行,如果放在下面编译会报错 private final String name; private EnumW(String name) {//枚举类的构造器只能是私有的 这边改为public编译会有警告(可以自定义多个参数然后再get获取多个属性) this.name = name; } public String getName() { return name; } } public static void main(String[] args) { EnumW enumW = EnumW.SPRING; System.out.println(enumW.getName());//春天 } } 从上述例子可以看出枚举类的几个特点 enum和class、interface的地位一样 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承,又因为继承了Enum类不能再继承其它类。 枚举类的构造器只能是私有的。 枚举类的常用用法 1.可以在switch case语句中直接使用枚举值,不需加入枚举类作为限定,使代码更加优雅 public class testEnum3 { enum EnumW { SPRING,SUMMER,FALL,WINTER; } public void judge(EnumW s) { switch(s) { case SPRING: //直接使用枚举值做限定 System.out.println("春天适合踏青。"); break; case SUMMER: System.out.println("夏天要去游泳啦。"); break; case FALL: System.out.println("秋天一定要去旅游哦。"); break; case WINTER: System.out.println("冬天要是下雪就好啦。"); break; } } public static void main(String[] args) { EnumW enumw = EnumW.SPRING; testEnum testEnum = new testEnum(); testEnum.judge(enumw);//春天适合踏青。 } } 思考 1.枚举类是否可以定义抽象方法 首先有抽象方法的类必然是抽象类,但是根据上面的反编译的类由final修饰而不是抽象类,但是枚举类又可以定义抽象方法,这是为什么呢。 首先编写这么一段代码 public enum AbstractTest { Spring { @Override public AbstractTest getSeason() { return Spring; } }, Summer { @Override public AbstractTest getSeason() { return Summer; } }, FALL { @Override public AbstractTest getSeason() { return FALL; } }, WINTER { @Override public AbstractTest getSeason() { return WINTER; } }; public abstract AbstractTest getSeason(); public static void main(String[] args) { System.out.println(AbstractTest.Spring.toString());//Spring } } 查看编译后的文件 javac AbstractTest.java 将java文件编译为class文件,会生成4个从1开始包含$+数字的class文件(匿名内部类)和一个主类(枚举类),这四个类继承了主类从而通过子类来实现抽象方法 所以枚举类是可以带有抽象方法的,含有抽象方法的枚举类将自动修饰abstract并通过内部类来实现。

优秀的个人博客,低调大师

Python基础 ——简介、变量及类型

一.Python简介 1.Python的诞生 Python是目前世界上最流行的变成语言之一,由荷兰人Guido von Rossum(吉多·范·罗苏姆,中国Python程序员都叫他 龟叔)于制作。1991年,第一个Python编译器诞生。 2.Python编译器 Python目前有很多编译器,常用的有CPython(官方版本的C语言实现)、Jython(可以运行在Java平台)、IronPython(可以运行在.Net和Mono平台)、Pypy(Python实现的,支持JIT即时编译)。 3.Python版本 Python目前有两个版本,Python2和Python3,最新版本为Python2.7.13和3.6.2。 4.Python优缺点 优点:简单、易学、免费、开源、高层语言、可移植性高、解释型语言、面对对象、可扩展性强、丰富的库、规范的代码缺点:Python语言非常完善,几乎没有明显的短板和缺点,唯一的不足就是执行效率慢(这是解释型语言的通病),随着计算机性能的逐步提高,这个缺点也会逐渐不那么明显。 5.Python主要应用场景 (1)Web应用开发 (2)操作系统管理、服务器运维的自动化脚本 (3)网络爬虫 (4)科学计算 (5)桌面软件开发 (6)服务器软件开发 (7)游戏开发 (8)产品早期原型和迭代 二.第一个Python程序 1.Python文件 Python源程序就是一个特殊格式的文本文件,其后缀名为“.py”(即文件扩展名为 .py),因此可以用任意的文本编辑软件做Python的开发。 2.第一个Python程序 Step1.在桌面新建记事本文件,命名为FirstPython image.png 此时的文件是一个后缀扩展名为txt文档,并不是以.py结尾的文件Step2.修改文件扩展名为 .py image.png image.png 点击 是 ,即可将文件更改为Python文件Step3.使用文本编辑器打开(编辑器使用Sublime Text或NotePad++都行) image.png 保存并退出Step4.在windows下运行 按 windows + R 输入cmd 打开windows终端(俗称黑窗口) image.png image.png 三.执行Python程序的三种方式 1.文本模式 Python代码保存在文本文件中,Python解释器对其逐行解释,即上面演示打印“Hello,Python”的操作。 2.交互模式 直接在终端中运行解释器 image.png (1)交互执行Python程序的优缺点: 优点:适合于学习/验证Python语法或者局部代码 缺点:代码不能保存 不适合运行太大程序 (2)退出Python终端交互模式 ①直接输入 exit() 即可 image.png ②使用热键退出 Ctrl + z 也可退出 3.IPython IPython 是一个 python 的 交互式工具,比官方默认送的 python shell 好用,支持自动补全,自动缩进,内置了许多很有用的功能和函数,IPython 是开源免费的 Python 2.x 使用的解释器是 ipython Python 3.x 使用的解释器是 ipython3 要退出IPython可以有以下两种方式: (1) 直接输入 exit In [1]: exit (2)使用热键退出 在 IPython 解释器中,按热键 ctrl + d,IPython 会询问是否退出解释器 四.Python编辑器——PyCharm 1.PyCharm简介 (1)集成开发环境(IDE) IDE —— Integrated Development Environment 集成了开发软件需要的所有工具,一般包括:图形界面、代码编辑器、代码解释器、代码调试器等 (2)PyCharm介绍 1)PyCharm是Python的一款非常优秀的继承开发环境软件 2)PyCharm除了具备一般IDE所具备的功能外,还同时可以在Windows、Linux、MacOS等多个操作系统上使用。 3)PyCharm适合开发大型项目 五.PyCharm使用 1.第一次启动界面 image.png 2.创建一个项目 image.png 3.用PyCharm编写并运行第一个Python程序 image.png image.png image.png 六. 注释 1.注释的作用 注释可以大大提高代码的可读性。2.Python的两种注释方式 (1)单行注释 使用 # 进行单行注释,即#号后为注释内容 image.png (2)多行注释 使用一对三个单引号或双引号,引号中间即为注释,通过这种方法可一次注释多行 七. 变量及类型 1.变量 (1)变量的定义及作用 在Python中每个变量在使用前都必须赋值,变量赋值以后,变量才会被创建,变量使用 = 号赋值,= 号左边为变量名,= 号右边为存储在变量中的值。 形式如下: 变量名=变量值 变量可以理解为一个容器,用来存储数据。这就是变量的作用。 (2) Blog: www.limiao.tech

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册