初学编程两年多学习的总结!

  写一篇文章 总结过去,从11年9月开始学习编程,选专业是因为喜欢玩电脑,在此之前对软件,硬件了解不多,有一个模糊的概念。因为看到,电视上那些程序员可以写出很厉害的程序,第一次觉得电脑很强大。最初对电脑有关的技术都有好奇心。

第一次看到代码,是高三的时候,同学在一个旧书店买了一个C语言程序设计,现在还记得,当时傻逼的拿笔记下了 Main()方法, 不知道什么是int,那个方法是输出两个变量的值。当时什么都不懂就抄了一遍,后来用塞班手机 下了一个python 编辑器 ,pirnt ‘hello world’ ,也什么都不懂。


高中和初中的时候什么英语单词都不认识几个也不想学,从初中到高中英语课不是睡过去就是发呆想其他的事。后来高考玩了,就随便选了个学校,专业是软件服务与外包(也不了解,只知道是要学写代码),后来到了学校,第一年主要学的是HTML CSS Java基础,用java写了“Hello World” ,当时上课也是对一些概念不懂,语法就记下来,只有少数几个知道意识, 我会的单词基本上就是从代码里学的几个。后来自己查查字典就记住了一些 。 第一年,主要是了解一下,上课学的也不好,记得学java的时候 不懂什么是类 什么是方法。

(后来查了金山词霸)class是类,method是方法 ,就是老师讲解我们就听听,记下来,后来忘记了很多。(学英语基本是高中以后,因为学编程,有时候也搜搜资料,上论坛看看,用google )

     第一年的时候基本上是在寝室玩,学校有网,第一年是同学的电脑,后来是自己有了电脑,陆陆续续 会了点基础,用我们现在老师的话说 会用不知道原理。 不知到什么是API ( Application  Programming Interface)学东西是通过 百度和谷歌 。 老师把一些基本的学习方法 。其他要靠自己学。当时学的时候一时一知半懂。 

真正开始认真学习是12年开始的,当时多门挂科,感觉压力剧增,什么都是老师当时讲的时候会,过后就忘了。 就在网上下了一些视频。最开始的时候是 马士兵的Java视频,对编程也有了一定的认识,知道了如何查官方 API  知道了System 类型 Object类 所有了类继承,基础语法,面向对象,看了两个多月。悲剧的是我学Java的时候我们已经开始学 C#面向对象了,不过Java和C#的一些基础都差不多,还是学到了一些东西。 

后来中间玩了一个月,有点厌学,学其他一些东西了( 批处理 、注册表、 灰鸽子怎么配置、web网站的渗透什么的、无线网络破解什么),学这个东西唯一的收获是 把Linux和python学好了, 为了破无线网 知道了BackTrack5 系统  一开始也不知道什么是Linux 什么都是百度 谷歌 ,勉强了解一些, 在网上找了一些基本命令 , 感觉和CMD差不多 ,也对命令行系统有一些了解,后来也是下了一些视频看 BackTrack基础讲解。

还有VPN 网络 通讯协议(TCP/UDP) 端口 (Socket),线程,进程,都是马士兵的视频里面讲的。

后来我们专业学ADO.Net 了(Connection、Command、ExectueReader),也学的不好不知道怎么写SqlHelper

我知道了我们以后都要学asp.net了 也是基础学的不好,很苦逼,我总是慢一点,当时刚刚把java基础学的差不多了,对asp.net一点也不了解一开始就是 拖控件,等到控件学完我也忘了。什么 Request,Response也不知道,对于Httl协议,最初是学HTMl的时候老师讲的那时候只是听了一下也没什么印象,不理解。后来看到了一些视频 了解一些了。

现在对于get post  submit 提交 有了一些了解。现在是复   习以前学过的内容,加深印象和了解。 

以前一直不知道MSDN怎么用,只知道JAVA的API   学英文也是用 一个中文的JDK文档和一个英文的对照着看会了一点。后来学的东西多了杂了 感觉都知道一点 都不精通(很苦恼)。

我的硬盘里面关于Java的视频, Python教程什么的。Linux也不研究了,也不找后台,其实一直想有个 webShell ,后来试了N多次,不能上传,只有放弃了,(最后只有在学校的机房里面开IIS 发布网站, 在里面留了一个上传控件,上传了一个aspx的文件)局域网了面试了一下什么是webShell,远程执行,查看文件都可以,就是一条可以执行存储过程的SQL语句 。关于注入,也找到过几个,搞的我现在看见网站就喜欢在地址栏后面 加个“,”或者是 and 1 =1 ,(强迫症了)。后来认真学了下 MSSQL 就发现原来在地址栏输一大堆SQL语句 ,就可以查东西了。 还有MD5算法对字符串加密解密。 

其实我就是喜欢 收集、下载。下了也不学,知识还是不是我的,今年9月份来这里。没有网 所有就把电脑里面下的视频找出来看,看到了 。 发现我以前下的传智播客的视频。觉得不错就学学,后来一看就看上瘾了。基本课程都是看 杨中科讲 C#知识。

   他说了一句话(学编程就想追女生,要专注行) 所以我就把其他一些乱七八糟的东西都删除了 只看 C# 只学一门语言,了解面向对象。 精力有限要合理分配,以前一直都没这个概念,什么都想学,什么都好奇。到头来什么都没有学会。

所以就开始从头学 这里做个总结,我要学的东西还很多:

学习编程为我打开了另一个世界,在编程中学习如何思考。以前是想学点东西找不到头绪,现在我已经知道自己要学什么了

基础知识 : .net是一个平台 C#是一门语言

.net可以开发 :

 桌面程序、网站程序,游戏开发,嵌入式,移动设备(平板和手机)

主函数 、方法入口 static void Main(string[] args) 

 Static 关键字 (表示这是一个静态方法) void 返回值类型 (空) 

挂号里面的是string类型数组参数 

一、编译原理 

1)编写源代码;

2)#编译器将C#源代码编译成MSIL;

3)将中间代码交给CLR的即时编译器(JIT)将微软中间语言转化成相对应  的机器码(CPU指令)

3)交给CPU运行机器码;

4)被CLR所管理的代码叫做托管代码,不能够被CLR管理的代码叫做非托管代码,非托管代码运行效率较高,但是相对安全性较低;托管代码运行效率较低,但代码相对是安全的; 

二、变量

1. 常见的数据类型:int double float char string 

2. 分值类型和引用类型 

   值类型存储于栈空间、值类型存储于堆空间

   结构也是值类型。对象类型是引用类型,

   Person p=New Person();

  栈空间的p指向堆空间的一块内存存储(New Person())

二、运算符

=:赋值运算符

+-*/算术运算符

+:将左右两边的字符串连接起来 

关系运算符: 

> , <  == , !=  ,>= , <= ,> <:

当运算两边的数值类型不一样时,将小范围的转换大范围再进行比较,仅限于数值类型之间的比较

关系运算符的比较结果永远只可能是bool类型的 

逻辑运算符

||  (或), &&(与), !(非)

&&   运算中,只要有一个条件为假,整个结果为假 -----

||   运算中,只要有一个条件为真,整个结果为真

!   取反

&、| 按位与和按位或 二进制 1110&0101 为0100 

三、命名规则

1)变量命名必须有意义必须以字母或者_或者@开头,定义一个变量时首字母小写,定义变量要用动词

2)方法名大写  

3)注释:给人看的,不是给编译器看的

3)文档注释的作用:当调用相对应的方法时给出智能提示

4)定义在方法里面的变量使用之前一定要先赋值 

四、类型转换

Person p=new China(); //隐式类型转换

China c=new China();

  Person p=(p)c; //显示类型转换

//把字符串转换为数值类型 int.Parse();

//把任意类型转换为字符串  ToString(); 如果是要转换一个对象类型的变量要重写ToString();

//把任意类型转换为任意类型 Conver.toXX();

引用类型 string 数组 类(只定义数据类型)、接口 、委托

引用类型都派生自 Object

引用类型可以继承 

值类型继承  System.ValueType

System.ValueType继承 Object

面向对象编程(OOP→  Object-Oriented  Programming)

OOA:面向对象分析

OOD:面向对象设计

面向对象三大特性:封装、继承、多态。

什么是类?什么是对象?类和对象的区别?如何写一个汽车类?

类是模具,创建对象的模具,抽象的。

类是一种数据类型,用户自定义的数据类型

类组成:字段、属性、方法、构造函数等

对象是具体的,是类的具体实例。对象具有属性(特征)和方法(行为)

在类中,用数据表示事物的状态,用函数实现事物的行为

字段 、 属性、  方法 、 构造函数

  1、创建一个类的时候 如果没有写构造函数,默认会自动添加一个构造函数

如果声明了一个有參的构造函数 会把默认的构造函数覆盖掉

  2、类的构造函数的特点 

    1)方法名必须与类同名

    2)构造函数不能有任何返回值   void也不可以

    3)访问修饰符一般都是 public 

    4)当类的构造函数 如果是 private\protected等的时候就不能在类外部,       所以就不能在类外部通过 new 关键字 来调用构造函数  

添加引用(前提) 添加程序集

1.程序集是.net中的一个概念

2. *.dll 或 *.exe都叫程序集。

变量的作用域 

离声明该变量最近的那对包含声明语句的大括号内部。

成员变量—直接属于某个类,作用域在该类内部。

局部变量—声明该变量的块语句或方法结束的封闭括号之前的作用域内(使用之前必须得赋值。)

封装 -----类和对象本身就是封装的体现。

1.属性封装了字段、

2.方法的多个参数封装成了一个对象

3.将一堆代码封装到了一个方法中、

4.将一些功能封装到了几个类中、

5.将一些具有相同功能的代码封装到了一个程序集中(dll、exe),并且对外提供统一的访问接口。(属性名、方法名等。)

继承  --(类与类之间的关系)

Base Class→基类、Parent Class→父类

Derived Class→派生类、Child Class→子类

判断继承关系是否合理 子类 is a 父类

代码重用  

里氏替换原则

子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用、以及多态。

类的单根继承性、传递性、继承时构造函数的问题。构造函数不能被继承。

所有的类都直接或间接的继承自object。查看IL代码(通过Reflect)。

Protected 保护

子类和当前类内部可以访问

This 

1.作为当前类的对象,可以调用类中的成员。this.成员(调用成员,自己)

2.调用本类的其他构造函数。:this()(调用构造函数,自己)

Base:

1.调用父类中的成员(调用成员,父类)base点不出子类独有成员。

2.调用父类中的构造函数(调用构造函数,父类)

子类构造函数必须指明调用父类哪个构造函数

//继承的时候,构造函数是不能被继承的。(构造函数不能被继承。)

私有成员不能被子类继承。

访问修饰符

private 当前类中可以访问,类中成员的默认访问修饰符。

protected 当前类及子类中可以访问(在继承中用。)

*internal 当前程序集内部可以访问

protected internal 当前程序集或子类中(不同程序集也可以访问)。

public 任何地方

多态

1)用父类对象 的变量 接收子类 对象类型的变量 

2)虚方法和抽象方法的区别

虚方法必须有实现,抽象方法必须没有实现

抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中

抽象方法必须在子类中重写,虚方法可以被重写

3)实现多态的主要手段:

1.虚方法virtual

2.抽象方法abstract

3.接口。

静态成员 静态类

 1)当多个对象共享同一个数据的时候就可以在实例类中加入静态成员。

 2)在项目中需要频繁用到的一些工具类,例如:Math、Console、Convert   等。 或者模拟“全局变量”的时候。

  4)静态类不能被其他类继承

静态类只能继承自Object类。(静态类不能继承自其它类。)

继承(多态)、静态本身就是相反的。静态类的本质abstract+sealed

开放封闭原则(对修改封闭,对扩展开放。)

继承→ 虚方法→ 接口

在程序中实现多态(前提:继承),需要使用父类的实例时,使用虚方法 反之抽象类(同一系列),而当不同系列具有相同功能的时候实现多态就要用到接口--抽象共同功能

→原则:优先使用接口→抽象类→虚方法

→面向对象的核心:一个思想(实现多态) 一种方式(继承) 三个方针(虚方法、抽象类、接口)

枚举

定义一个枚举类型

public enum Color:byte  //限制枚举了类型

{

Red,

Bloue,

Writh,

Black,

}

在编译的的时候还是值类型 只是方便使用

如何将一个字符串转换为枚举类型

string meiju="Red";

Color color=(Color)Enum.Parse(typeof(Color),meiju);

[Flags] 标志枚举加上这个特性后 枚举类型.ToString()返回的就是字符串了

集合

1.ArrayList  集合 弱类型

.Count属性 ,表示实际元素的个数

.Capacity属性 表示当前集合的容量

//.Capacity的容量衣每次翻倍扩展 4、6、8

Add()  添加元素

AddRange(Icollection c) 增加数组

Remove()

RemoveAt()根据索引删除

Clear() 清除

Contains() 判断当前元素中是否包含某个元素

ToArray()

Sort()  排序

Reverse() 反转

Ref和Out

ref 在方法中直接使用传进来的值,在原有的值的基础上进行修改

在传递进来之前必须赋初值 

int>

out在方法中必须赋值。

垃圾回收

CRL 的一个核心功能

垃圾回收 ,只能回收托管堆中的内存资源

(当对象没有变量指向的时候就可以被垃圾回收)

垃圾回收的分3代

共3代 :第0代、第1代、第2代。

     概念,避免每次垃圾回收都遍历所有的对象,减少垃圾回收的时间

各代的回收频率:第0代最高,其次是第1代,再次是第2代。也就是说越老的对象生存的几率越大。

.net中垃圾回收的机制:mark-and-compact(标记和压缩)

除了内存资源外的其他资源怎么办?~(析构函数)或者Dispose() 

要回收的类继承 IDisposeable

接口实现Dispose()方法

弱引用:WeakReference,对于创建比较耗时的对象可以使用弱引用。

泛型集合:

List<T>类似于ArrayList,ArrayList的升级版。

各种方法:Sort()、Max()、Min()、Sum()…

Dictionary<K,V>类似于Hashtable,Hashtable的升级版。

自定义泛型

泛型类、泛型接口、泛型方法、泛型委托(*)

(装箱、拆箱):box、unbox

     //int n = 12;

            //object o = n;  //装箱

            //int sa = (int)o;  //拆箱

            //Console.WriteLine(sa);

            //int n1 = 14;

            //string s = Convert.ToString(n1); //不是 只是传一个int返回一个string

            //int n2 = int.Parse(s);  //不是

            int m = 21;

            object obj = m;

            //double dou = (double)obj; //装箱是什么类型,拆箱就必须是什么类型

            double dou = (int)obj; //先拆箱再转换? 

            Console.WriteLine(dou);

            //由于int32是结构、结构是值类型

            //由于int32 还实现了IComparable 接口

            //所以可以在Int32 与IComparable之间发生类型转换?

            //由于接口是引用类型所以Int32到IComparable发生了装箱? 

            //Comparable到?Int32发生了拆箱?

            int n2 = 10;

            IComparable com = n2; 

            int m1 = (int)com;

            Console.WriteLine(m1);

Forech原理

  任何类型,只要想使用foreach 来实现遍历

        就必须存在public IEnumerator GetEnumerator()方法

一般通过实现IEnumerator接口,来创建该方法

最后在编程的路上我还有很多东西要学,感谢我的老师对我的教育,和一直以来一起学习的同学。 

我仅仅只是一个初学者。      

时刻保持一个对于知识的好奇心。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值