快速上手一门编程语言

  • 概述
    • 图灵完备性语言
    • 识别类型
  • 学习路径
    • 一 掌握该语言的背景 - 2h
    • 二 掌握该语言的基本程序逻辑语法 - 1h
      • 1、顺序结构
        • 2、分支结构
          • 1)if语句
          • 2)switch ... case多分支语句
        • 3、循环结构
          • 1)while
          • 2)do......while
          • 3)for
          • 4)foreach 【java5的新特征之一】
    • 三 掌握该语言的变量 - 2h
      • 1 明确语言的类型
      • 2 基本类型和封装类型
        • 1)基本数据类型
          • (1)内置数据类型
          • (2)引用数据类型
          • (3)常量
          • (4)特殊转义字符
          • (5)类型转换
      • 运算符
        • 1)算数运算符
        • 2)关系运算符
        • 3)位运算符
        • 4)逻辑运算符
        • 5)赋值运算符
        • 6)其他运算符
          • 泛型
  • 3 时间和日期的类型和处理
      • 4 字符串的实现和种类
    • 四 容器对象学习 - 1h
    • 五 实现抽象的方法、类、接口与函数的实现、使用 - 2h - coder
    • 六 函数式编程的支持
    • 七 依赖与项目管理工具与生态支持 - developer
    • 八 内置高级功能 - professional
    • 九 文件读取和写入

概述

图灵完备性语言

图灵完备的语言,有循环执行语句,判断分支语句等。理论上能解决任何算法。但有可能进入死循环而程序崩溃。
Pyhton java php等都是图灵完备的

识别类型

https://blog.csdn.net/sinat_38682860/article/details/86492429?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromBaidu-1.control
四个概念:
强类型 & 弱类型
动态类型 & 静态类型
因此:
Python是动态强类型语言 编程语言环境帮助我们判断类型
Java是静态强类型的
C是静态弱类型的 char a -> %c显示a %d显示65 人来判断是什么类型 (PHP也是弱类型)
强弱是指本身能够判断这个变量是什么类型
动静是指声明变量时指定变量类型是静态类型(有强制类型转换),不需要指定的是动态类型(可以自动转换)。

学习路径

一 掌握该语言的背景 - 2h

二 掌握该语言的基本程序逻辑语法 - 1h

1、顺序结构

2、分支结构
1)if语句
if(表达式){语句块;
}
else if(表达式){语句块;
}
else{语句块;
}
2)switch … case多分支语句
switch(表达式){case 常量1:{语句块;break;}case 常量2:{语句块;break;}[default:{语句块;}]
}
3、循环结构

break和continue语句:break是终止本层循环,跳到外层继续执行代码;continue终止本次循环,继续下一次循环;

1)while
public static void main(String args[]){int result = 0;int i = 0;while(i<=100){result += i;i++;}System.out.println("result = "+result);
}
2)do…while
public static void main(String args[]){int result = 0;int i=0;do{result += i;i++;}while(i<=100);System.out.println("result = "+result);
}
3)for
public static void main(String args[]){for (int i=0;i<10;i++){if(i==3) break;System.out.println("i = "+i);}System.out.println("Game over!");
}
4)foreach 【java5的新特征之一】
for(元素类型t 元素变量x:遍历对象obj){ 引用了x的java语句;
}
public void test(){int arr[] = {2,3,4};System.out.println("-----排序前一维数组-----");for(int x:arr){System.out.println(x);//逐个输出数组元素}Arrays.sort(arr);System.out.println("-----排序后一维数组-----");for(int x:arr){System.out.println(x);}//输出二维数组int arr2[][] = {{1,2,3},{4,5,6}};System.out.println("二维数组输出测试");for(int x[] : arr2){for(int e:x){System.out.println(e);}}//输出三维数组int arr3[][][] = {{{1,2},{3,4}},{{5,6},{7,8}}};System.out.println("三维数组输出测试");for(int[][] a2:arr){for(int[] a1:a2){for(int x:a1){System.out.println(x);}}}
}

三 掌握该语言的变量 - 2h

1 明确语言的类型

静态?动态?
强 or 弱 ?

2 基本类型和封装类型

变量类型是值 or 引用类型?
C、C++ - 值类型(保存地址) Python、Javascrip - 引用类型(保存指针 判断时用equal判断,否则判断指针指的是否是同一个地址了) Java 两者都有

1)基本数据类型
(1)内置数据类型

八种基本类型:六种数字类型(四种整数型、两个浮点型),一种字符类型,一种布尔类型。

byte:8位,有符号
short:16位,有符号
int:32位,有符号
long:64位,有符号
float:单精度、32位
double:双精度、64位
boolean:表示一位的信息,取值true和false
char:单个的16位Unicode字符

(2)引用数据类型

类似于C/C++的指针,引用类型指向一个对象,指向对象的变量是引用变量。这些变量在声明时被指定为一个特定的类型(Employee,Puppy),变量一旦声明后,类型就不能改变了。

  • 对象、数组都是引用数据类型。
  • array.clone() 否则传过去的是地址
  • 所有引用类型的默认值都是null。
  • 一个引用类型可以用来引用任何与之兼容的类型。
Site site = new Site("Jacob")
(3)常量

常量在程序运行时不能被修改,使用final关键字来修饰,声明方式和变量类似,变量名常使用大写字母:

final double PI = 3.14159;
(4)特殊转义字符
(5)类型转换

运算符

1)算数运算符
符号 含义
-
*
/
% 求余
++ 自增
自减
2)关系运算符
符号 含义
== 判断是否相等
!= 判断是否不等
> 大于?
< 小于?
>= 大于等于?
<= 小于等于?
3)位运算符
符号 含义
&
^
~ 按位取反
<< 按位左移
>> 按位右移
4)逻辑运算符
符号 含义
&& 逻辑与
逻辑非
5)赋值运算符
6)其他运算符
泛型
** 自定义泛型* 泛型字母:T Type*            K V key value*          E Element* 泛型类:只能用在成员变量上,只能使用引用类型* 泛型接口:只能用在抽象方法上* 泛型方法:返回值前加上* */* //利用泛型方法打印不同的字符串元素
public class GenericMethodTest {public static <E> void printArray(E[] inputArray) {for(E x:inputArray) {System.out.printf("%s ",x);}System.out.println();}public static void main(String[] args) {Integer[] intArray = {1,2,3,4,5};Double[] doubleArray = {1.1,1.2,1.3,1.4};Character[] charArray = {'a','b','c','d'};System.out.println("整型数组元素为:");printArray(intArray);System.out.println("浮点型数组元素为:");printArray(doubleArray);System.out.println("字符串型数组元素为:");printArray(charArray);}
}//  <任意字符extends类/接口> 表示泛型的上限, 同样的super表示泛型的下限
public static  <T extends Comparable<T>> T maximum(T x,T y,T z) {T max = x;if(y.compareTo(max)>0) {max = y;}if(z.compareTo(max)>0) {max = z;}return max;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);       System.out.println("请输入三个整型数字:");int a = scan.nextInt();int b = scan.nextInt();int c = scan.nextInt();System.out.println("最大的数为:"+maximum(a,b,c));System.out.println("请输入三个浮点型数字:");float d = scan.nextFloat();float e = scan.nextFloat();float f = scan.nextFloat();System.out.println("最大的数为:"+maximum(d,e,f));}

3 时间和日期的类型和处理

保存时间1970年格林威治到现在的时间戳
Date类

public static void main(String[] args) {Date date = new Date(); //初始化Date对象System.out.println(date.toString());/*日期比较1. getTime()方法获取两个时间,然后比较2. before() after() equals()方法eg:new Date(99,2,12).before(new Date(99,2,18)) 返回true3. 使用compareTo()方法*//** 解析字符串为时间* SimpleDateFormat类* */SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");String input = args.length == 0? "1818-11-11 " : args[0];System.out.print(input + "Parse as ");Date t;try {t = ft.parse(input);System.out.println(t);}catch(ParseException e) {System.out.println("Unparseable using"+ft);}/** Sleep休眠 阻塞当前进程* */try {System.out.println(new Date() +"\n");Thread.sleep(3*1000);System.out.println(new Date() + "\n");}catch (Exception e) {System.out.println("GOT an exception!");}}

Calendar类

4 字符串的实现和种类

可变 or 不可变?
字符串常量池 :String创建的字符串存储在公共池中,而new创建的字符串对象在堆上

//初始化方式
String s1 = "runoob";  //String直接创建
String s2 = "runoob";
String s3 = s2;//相同引用String s4 = new String("runoob");//对象创建
String s5 = new String("runoob");//也可以提供字符数组
char[] helloArray = new char[] {'h','e','l','l','o'};
String helloSrting = new String(helloArray);//字符串也可以直接转换成字符数组
char[] arr = helloString.toCharArray();//内置字符串函数
1.连接concat()或者+
2.equals() compareTo(Object o)
equalsIgnoreCase()//忽略大小写
compareTo(String otherstring)
contentEquals(StringBuffer sb)  //与stringbuffer有相同顺序的字符时,返回真
length()
replace(oldChar, newChar) replaceAll() replaceFirst()
split() trim()
startsWith() endsWith()
toUpperCase() toLowerCase()
indexOf() contains() subString()
isEmpty()

StringBuffer类、StringBuilder比StringBuffer速度快
使用stringBuffer类时,每次都会对Stringuffer对象本身进行操作,而不是生成新的对象,要求线程安全的情况下,必须使用StringBuffer类

StringBuffer sBuffer = new StringBuffer("cainiaoguanwang:");
sBuffer.append("www");
sBuffer.append(".runoob");
sBuffer.append(".com");
System.out.println(sBuffer);StringBuilder sb = new StringBuilder(10);
sb.append("Runoob....");
System.out.println(sb);
sb.append("!");
sb.insert(8,"java");
sb.delete(5,8);
System.out.println(sb);

正则表达式函数 Matcher类
特殊点:
在 Java 中,\ 表示:我要插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义。正常反斜杠表示:\\

String line = "This line is a test!";
String pattern = "(\\D*)(\\d+)(.*)";Pattern r = Pattern.compile(pattern);
Match m = r.matcher(line);
if(m.find()){System.out.println(m.group(0));System.out.println(m.group(1));System.out.println(m.group(2));}else {System.out.println("No match!");}
/** ^ 开始位置* $ 结束位置* * 零次或多次匹配* + 一次或多次匹配* ? 零次或一次匹配* {n} 正好匹配n次* {n,} 至少匹配n次* {n,m} 至少n次,至多m次* (pattern) 匹配pattern并捕获该匹配的子表达式* x|y  匹配x或者y* [xyz] 字符集,匹配集合中的任意一个字符* [a-z] 字符范围* \d 数字字符 \D非数字字符* */

四 容器对象学习 - 1h

Hash map、字典、数组等等
Java -
C++ 导入模板库
1、容器对象的种类和实现原理
2、遍历
3、深浅复制
4、序列化和反序列化
5、查阅手册,了解全部容器支持的函数并掌握常用容器操作函数

public static void main(String args[]) {//枚举  一次获得一个元素  很少使用Enumeration<String> days;Vector<String> dayNames = new Vector<String>();dayNames.add("Sunday");dayNames.add("Monday");dayNames.add("Tuesday");dayNames.add("Wednesday");days = dayNames.elements();while (days.hasMoreElements()) {System.out.println(days.nextElement());}//位集合测试BitSet bits1 = new BitSet(16);BitSet bits2 = new BitSet(16);for(int i=0;i<16;i++) {if((i%2) == 0) bits1.set(i);if((i%5) != 0) bits2.set(i);}System.out.println("bits1: "+bits1);System.out.println("bits2: "+bits2);//Vector类  动态数组和arraylist类似,但两者不同//1.四种构造方法Vector v = new Vector(3,2);System.out.println("Initial Size:"+v.size());v.addElement(new Integer(1));v.addElement(new Integer(2));v.addElement(new Integer(3));System.out.println(v);System.out.println("Initial capacity:"+v.capacity());//栈stack 本质是vector 除此之外自己也定义了一些方法Stack st = new Stack();st.push(new Integer(1));st.push(new Integer(2));st.push(new Integer(3));st.push(new Integer(4));Integer x = (Integer) st.pop();System.out.println(x);x = (Integer) st.pop();System.out.println(x);x = (Integer) st.pop();System.out.println(x);x = (Integer) st.pop();System.out.println(x);//MAP接口 提供了键映射到值,可以通过键来获取值Map m1 = new HashMap();m1.put("zhang",18);m1.put("gao", 22);m1.put("li",23);m1.put("han",31);System.out.println(m1.size());System.out.println(m1.get("gao"));System.out.println(m1.hashCode());System.out.println(m1.remove("gao"));System.out.println(m1.values());
//  for(int i=0;i<m1.size();i++) {//   System.out.println(m1.get(i));
//  }//迭代器  通常情况下使用迭代器遍历一个集合的元素//可以使用Iterator接口或者ListIterator接口List<String> list = new ArrayList<String>();//1.使用foreach遍历listlist.add("hello");list.add("world");list.add("hahahah");for(String str:list) {System.out.println(str);}//2.把链表变为数组相关的内容进行遍历String[] strArray = new String[list.size()];list.toArray(strArray);for(int i=0;i<strArray.length;i++) {System.out.println(strArray[i]);}//3.使用迭代器进行相关遍历Iterator<String> ite = list.iterator();while(ite.hasNext())//判断下一个元素之后有值{System.out.println(ite.next());}}
深浅复制
序列化和反序列化
transient关键字修饰的变量不能够被序列化//首先实现一个employee类
public class Employee implements java.io.Serializable{public String name;public String address;public transient int SSN;//transient关键字 某个字段不被序列化public int number;public void mailCheck() {System.out.println("Mailing a check to "+name+" "+address);}
}
//实现序列化
public class SerializeDemo {public static void main(String[] args) {Employee e = new Employee();e.name = "a";e.address = "absn";e.SSN = 123454;e.number = 101;File file = new File("./employ.ser");try {if(!file.exists()) {file.createNewFile();}FileOutputStream fout = new FileOutputStream(file);ObjectOutputStream o = new ObjectOutputStream(fout);o.writeObject(e);o.close();fout.close();}catch(IOException i) {i.printStackTrace();}}
}//反序列化
public class SerializeDemo2 {public static void main(String[] args) {Employee e = new Employee();String fileName = "./employ.ser";File file = new File(fileName);try {FileInputStream fin = new FileInputStream(file);ObjectInputStream o = new ObjectInputStream(fin);e = (Employee) o.readObject();System.out.println(e.name);System.out.println(e.address);System.out.println(e.SSN);  // 未被序列化未保存,反序列化结果0System.out.println(e.number);o.close();fin.close();}catch(IOException | ClassNotFoundException i) {i.printStackTrace();}}
}

五 实现抽象的方法、类、接口与函数的实现、使用 - 2h - coder

1、函数的定义与调用
2、参数使用与传递方式
3、类和对象的实现方式 - 封装继承多态
4、多继承还是接口
5、常见的设计模式的实现,单例模式、代理模式(委托),观察者模式

六 函数式编程的支持

1、高阶函数对象
2、语法特性与编程习惯(如链式语法、闭包等)

七 依赖与项目管理工具与生态支持 - developer

java的maven、gradle

八 内置高级功能 - professional

并发模型、多线程,多进程,系统调用,磁盘管理,数据库管理,网络支持等特性
至少要会查看手册

任务:
1、完成一个支持消息循环的交互程序
开始运行之后不结束 while循环之类的 通过输入某个命令,再退出
rpg小程序 完成六步以上的剧情??
精细的控制 二进制位进行操作
交互应用程序 凯撒密码对数据进行加密
加密前选择位移的序号 在输入一串字符串 回车后输出加密字符串 放到文本 在解密程序 导入标准输入流 输入一个序号
破解 不知道加密序号 导入文本中数据 找到加密序号 找出加密前的 正确的字符串需要人为判断 机器只是工具 人才知道要的是什么

public class HomeWork1 {public static void jiami() {Scanner scan = new Scanner(System.in);System.out.println("请输入待编码的数据(英文):");String data1 = scan.nextLine();System.out.println("请输入位移位数:");int number = scan.nextInt();int i=0;char[] data_arr = data1.toCharArray();for(i=0;i<data_arr.length;i++) {if(data_arr[i]>='a' && data_arr[i]<='z') {data_arr[i]+=number;if(data_arr[i]>='z') {data_arr[i] -= 26;}}else if(data_arr[i]>='A' && data_arr[i]<='Z') {data_arr[i] += number;if(data_arr[i]>='Z') {data_arr[i] -= 26;}}}System.out.println();System.out.println("加密结果:");System.out.println(data_arr);}public static void jiemi() {Scanner scan = new Scanner(System.in);System.out.println("请输入待解密的数据(英文):");String data1 = scan.nextLine();System.out.println("请输入秘钥:");int number = scan.nextInt();int i=0;char[] data_arr = data1.toCharArray();for(i=0;i<data_arr.length;i++) {if(data_arr[i]>='a' && data_arr[i]<='z') {data_arr[i]-=number;if(data_arr[i]<'a') {data_arr[i] += 26;}}else if(data_arr[i]>='A'&&data_arr[i]<='Z') {data_arr[i] -= number;if(data_arr[i]<'A') {data_arr[i] += 26;}}}System.out.println();System.out.println("解密结果:");System.out.println(data_arr);}public static char[] jie(char[] data_arr,int key) {int i=0;for(i=0;i<data_arr.length;i++) {if(data_arr[i]>='a' && data_arr[i]<='z') {data_arr[i]-=key;if(data_arr[i]<'a') {data_arr[i] += 26;}}else if(data_arr[i]>='A'&&data_arr[i]<='Z') {data_arr[i] -= key;if(data_arr[i]<'A') {data_arr[i] += 26;}}}return data_arr;}public static void pojie() {Scanner scan = new Scanner(System.in);System.out.println("请输入待破解的数据(英文):");String data1 = scan.nextLine();char[] data2 = data1.toCharArray();for(int i=0;i<26;i++) {char[] temp = data2;temp = jie(temp,i);System.out.println("key #:"+i);System.out.println(temp);}}public static void main(String[] args) {while(true) {System.out.println("*****凯撒密码******");Scanner scan = new Scanner(System.in);System.out.println("请输入想要进行的功能:");System.out.println("***1.加密功能***");System.out.println("***2.解密功能***");System.out.println("***3.破解功能***");System.out.println("***0.退出***");int choose1 = scan.nextInt();switch(choose1) {case 0:return;case 1:jiami();break;case 2:jiemi();break;case 3:pojie();break;default:break;}}}
}

九 文件读取和写入

1、文件类继承关系

2、文件读取
(2)按行读取
使用BufferedReader中的readLine()方法。无参数,返回包含改行的内容字符串,不包含任何行终止符,如果已经到达流末尾,则返回null。

int position=0;
String[] bufstring = new String[1024];
//打开带读取的文件
BufferedReader br = new BufferedReader(new FileReader("text.txt"));
String line = null;
while((line=br.readLine())!=null){bufstrig[position]=line;positon++;
}
br.close(); //关闭文件
for(int i;i<position;i++){System.out.println(bufstring[i]);
}

(3)自动换行写入
利用OutputStream中的Println()方法

int number = 1;
OutputStream os = new FileOutputStream("output.txt");
PrintWriter pw = new PrintWriter(os);
for(int i=0;i<10;i++){String s = ""+number;pw.println(s);//每输入一个数据,自动换行//pw.println(s+",");//不会自动换行,必要时可自己添加分隔符number++;
}
pw.close();
os.close();

Forth Week :快速上手一门编程语言相关推荐

  1. 新手编程:程序员 5 种编程入门方法,快速学会一门编程语言!

    程序员要精通一门语言,还是要掌握多门语言? 对于这个问题,公说公有理,婆说婆有理. 技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢? 不过呢,当你精通一门语言同时,涉猎一下其 ...

  2. 编程达人教你如何快速掌握一门编程语言附技术书阅读方法论

    附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读书籍书单大全: 书单导航页(点击右侧 极客侠栈 即可打开个人博客):极客侠栈 ①[Java]学习之路吐血整理技术书 ...

  3. 编程达人教你如何快速掌握一门编程语言

    现在的开发工作要求我们能够快速掌握一门编程语言.怎样才能快速掌握一门编程语言呢?一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习:其二是花很多时间完整地把整个 ...

  4. 如何学习编程、一门编程语言怎么算入门、快速掌握一门编程语言

    ninechapter 美帝代码搬运工,资深面试官,微信公众号-九章算法(ninechapter) 当你提出这个问题的时候,总有人会告诉你,你应该学习这个,学习那个,亦或者是刷题根本没用,你应该去做项 ...

  5. 如何快速学习一门编程语言

    之前自己想学一门语言,总是上b站来找一门教学视频从头到尾来看.这种学习方式属于培训班式 的学习,学习的虽然比较系统,但是到最后自己掌握的知识往往是做项目时候所用到的那些,其他的回想起来可能也只是记住一 ...

  6. 如何快速上手一门新语言

    现在的开发工作要求我们能够快速掌握一门语言.一般来说应对这种挑战有两种态度:其一,粗粗看看语法,就撸起袖子开干,边查Google边学习:其二是花很多时间完整地把整个语言学习一遍,做到胸有成竹,然后再开 ...

  7. 【Scala教程】如何在已掌握的Java知识基础上快速上手Scala?【个人学习记录】

    如何在已掌握的Java知识基础上学习Scala 前言 正文开始! 1. 编译运行 2. 声明变量 3. 输出 4. 显式指定变量类型 5. 范围区间 6. 写入文本文件 7. 读取文本文件 8. if ...

  8. 干货|怎样在1小时内学会任何一门编程语言? 如Python/Go/JAVA/C++

    学习一门编程语言是有套路的,套路是可以传承的 今天向大家介绍1小时内掌握一门编程语言的方法 此刻挨踢哥仿佛听到达内蓝翔技校挖土机的抗议 这是一场将绳命别在裤腰带上的分享 50分钟了解语言特性 天下编程 ...

  9. 如何快速学习一门语言

    作者:colin 版权声明:自由转载-非商用-非衍生-保持署名 4月初到新公司,如今已近一个月时间,由于项目的原因,这一个月来我学习了Python,ActionScript,Lua,JavaScrip ...

最新文章

  1. mysql root的密码忘了?linux下重置mysql的root用户密码。
  2. 由于不知线程池的bug,某Java程序员叕被祭天
  3. Redis 日志篇:无畏宕机实现高可用的杀手锏
  4. OpenAI推出数学推理证明模型,推理结果首次被数学家接受
  5. 怎样看待大学期间的代码练习
  6. java类结构图_java 集合类结构图
  7. 如何区分普通感冒流感和新型冠状病毒肺炎?
  8. H3C认证云计算高级工程师
  9. 中剪取一种颜色的板块_不知道UI设计中APP界面版式如何排版?来看这个!
  10. Linux Kernel Git国内镜像源
  11. es6 Iterator(迭代器)的概念
  12. python lambda 判断_在Python的Filter中使用lambda函数时,为何达不到预期效果?
  13. Verilog代码实例化的简单理解(以38译码器为例)
  14. u-boot之mkconfig分析
  15. 考研数据结构程序题常见代码【C语言实现】
  16. [Go实战]简单使用scylladb
  17. 计算机视觉论文-2021-03-01
  18. oracle not in minus,Oracle Minus关键字 不包含...
  19. 我的世界服务器无限装备指令2020,我的世界手机版指令表
  20. 所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置!

热门文章

  1. 【GPS信号】GPS信号的读取以及kalman滤波预测
  2. nohup 命令(设置后台进程): appending output to ‘nohup.out’ 问题
  3. RxAndroid2 / RxJava2简单的CompletableObserver
  4. 不要使用字符串常量作为对象锁去同步代码
  5. Android activity 参数传递
  6. mysql metadata lock(一)
  7. Linux 上的高可用中间件
  8. windows mobile开发循序渐进(4)移动应用程序的数据存储之本地数据存储第二篇
  9. SSL证书安装指南 - Winodws 2003 Server IIS 6.0
  10. PAT甲级1150 Travelling Salesman Problem:[C++题解]旅行商问题、图论