python学习笔记----面向对象
面向对象
类:成员变量(属性)
方法(操作成员变量)
玩过游戏。主人公,进入了一个场景,有10个小怪物
是一样的。有攻击力,血(100格)。如果小怪物有
多个数值需要管理,小怪物的血量、小怪物出现在屏幕的地点。
[[100,(10,10)]]
函数你实现的时候,你觉得需要实现哪些功能?
blood+=1
blood-=1
x-=10
y-=10
class soldier(): #小怪物的类 """小怪物的类""" def __init__(self,blood,location_x,location_y): self.blood = blood self.location_x = location_x self.lcoation_y = location_y def add_blood(self,num): if self.blood<=100: self.blood+=num if self.blood>100: self.blood = 100 def minus_blood(self,num): if self.blood>=0: self.blood-=num if self.blood<0: self.blood = 0 def tell_blood(self): return self.blood s1= soldier(100,10,10) s2= soldier(90,10,20) s3= soldier(80,10,30) print(s1.tell_blood()) print(s2.tell_blood()) print(s3.tell_blood())
属性(数据)
方法(类里面写的函数叫做方法。)
类比说明:
生产杯子,杯子的模具(类),可以设定不同的参数来
生产杯子。
设定好不同的参数(通过构造函数传参)
生产出具体的杯子(实例化)
类:soldier
实例化:传入不同的参数(调用构造函数)
s1
s2
s3
import math class circle(object): def __init__(self,radius): self.radius = radius def get_area(self): return math.pi*self.radius*self.radius def get_perimeter(self): return 2*math.pi*self.radius for i in range(1,6): a= circle(i) print(a.get_area()) print(a.get_perimeter())
#self.xxxx实例变量
return a+b
import math class circle(object): def __init__(self,radius): if radius<=0: self.radius = 1 else: self.radius = radius def modify_radius(self,radius): if radius<0: self.radius = abs(radius) elif radius==0: self.radius = 1 def get_area(self): return math.pi*self.radius*self.radius def get_perimeter(self): return 2*math.pi*self.radius c=circle(-1) print(c.get_area()) c.modify_radius(-2) print(c.get_area())
封装了数据,和操作数据的规则,保证数据的安全。
def set(a,index,new_value):
if new_value>=0:
a[index] = new_value
print(a)
set(a,0,-50)
print(a)
print(a)
def __init__(self,a):
self.__value = a
def set(self,index,value):
if value<0:
return
self.__value[index] = value
def get(self):
return self.__value
p= positive_num_list([1,2,3,4])
p.__value[0]=-100
class P: def __init__(self,value): #构造方法,初始化的 self.__value = value #value局部变量 #self.value叫做实例变量 def get(self): #实例方法 return "***:"+str(self.__value) def set(self,value): #实例方法 if isinstance(value,(int,float)): self.__value = value return None
p1 =P(1)
p2 =P(2)
p3 =P(3)
内存中的位置:A
P:类变量
类定义的方法
内存中的位置:b
p1的实例:self.__value=1
内存中的位置:c
p2的实例:self.__value=2
内存中的位置:d
p3的实例:self.__value=3
p1.get()--->会把内存位置b发送给类定义的方法P.get
self:是一个方法的参数,内存位置b。
get方法慧聪从内存b的位置找到,__value值,然后执行
方法中的代码。
self传递的是某个实例的地址。实例地址里面的所有变量
都可以在方法中进行使用。
实例在内存中:有0个,1个或多个。
每个实例方法,只能操作本实例中的实例变量。
如果不加self.的叫做局部变量
1 可以封装数据,制定数据的存储规则,保证数据的安全
2 类相当于模板,可以通过构造函数做初始化,快速生成实例
3 基于类,可以进行扩展。(设计模式)
4 内存中存储的类变量和方法,只有一份。每个类的实例,都在
内存中有一个地址(类产生的实例可以有0个、1个或多个)
5 类中定义的实例方法(方法中有self参数),可以操作每个
实例中封装的变量
6 实例变量(self.开头的)可以在不同的实例方法中被访问。
实现变量都存在对应的实例所在的内存地址中。
7 __变量是私有变量,除了类中的实例方法可以访问,外部不可以
直接访问和修改。
pass
class P2(object):
pass
p1=P1() #实例化
p2=P2()#实例化
print(p1)
print(p2)
可以把数据放在类的实例里面去管理,
使用类里面的实例方法来管理这些数据,保证数据的安全性
def __init__(self,name,age):
if isinstance(age,int) and age >0:
self.age = age
else:
self.age = 0
self.name = name
def set_age(self,age):
if isinstance(age,int) and age >0:
self.age = age
def get_age(self):
return self.age
p1=Person("wulaoshi",18)
p2=Person("lilaoshi",28)
p1.age=-1
print(p1.age)
def __init__(self,name,age):
if isinstance(age,int) and age >0:
self.__age = age
else:
self.__age = 0
self.name = name
def set_age(self,age):
if isinstance(age,int) and age >0:
self.__age = age
def get_age(self):
return self.__age
p1=Person("wulaoshi",18)
p2=Person("lilaoshi",28)
#print(p1.__age)
p1.__age=100#这里相当于重新定义一个__age
print(p1.__age)
print(p1.get_age())#这里获取的是return返回的self.__age
def __init__(self,name,age):
if isinstance(age,int) and age >0:
self.__age = age
else:
self.__age = 0
self.name = name
def set_age(self,age):
if isinstance(age,int) and age >0:
self.__age = age
def __print_age(self):
print(self.__age)
def get_age(self):
self.__print_age()#方法内部调用私有方法前面要加self
return self.__age
p1=Person("wulaoshi",18)
p2=Person("lilaoshi",28)
p1.__print_age()
... pass
...
>>> p=P()
>>> dir(p)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>>
def __init__(self,name):
self.name = name
def get_name(self):#实例方法都要加self
print(self.name)
p1=Person("wulaoshi")
p1.get_name()
内存:
类Person放在内存地址:xxxxyyy1
get_name():这个方法的调用要有一个self参数
实例p1放在内存地址:mmmmzzzz2
name=“wulaoshi”
p1.get_name()的调用过程:
1)在xxxxyyy1中先把get_name()的内容找出来
想去调用。
2)实例变量p1的内存地址 --->self=mmmmzzzz2
3)get_name(self=mmmmzzzz2)
4)执行方法体:print(self.name)
5)去mmmmzzzz2找到name的值,然后打印
6)完成。
实例所在内存的地址,通过这个地址,可以找到
实例方法中需要使用的各种实例属性(数据)
def __init__(self,name):
self.name = name
def get_name(self):#实例方法
print(self.name)
def get_name2(self):#实例方法
print(self.name,self.name)
p1=Person("wulaoshi") #mmmmzzzz2
p1.get_name() #self就是p1的内存地址
p1.get_name2() #self就是p1的内存地址
p2=Person("李老师") #mmmmzzzz3
p2.get_name() ##self就是p2的内存地址
p2.get_name2() #self就是p2的内存地址
x=0 #类变量 放在方法外面 全局生效 所有的方法看到的变量只有一个
def __init__(self,name):#只有在实例化才可以调用__init__方法
self.name = name
Person.x+=1
def get_name(self):#实例方法
print(self.name)
p1=Person("wulaoshi")#实例化:类名+()+参数
p2=Person("laoli")
p3=Person("laoli")
print(Person.x)#可以用类名访问 也可以用实例名访问
print(p1.x)
print(p2.x)
实例对象:p2
实例方法:get_name
实例变量:self.name
class P:
pass
p=P()
def __init__(self,name):
self.name = name
p=Person("老王")
print(p.name)
def __init__(self,name):
self.name = name
def set_name(self,name):
self.name = name
def get_name(self):
return self.name
class AsianPerson(Person):
def __init__(self,name,nation):
Person.__init__(self,name)#初始化类的实例
self.nation = nation
def set_nation(self,nation):
self.nation = nation
def get_nation(self):
return self.nation
ap= AsianPerson("laowang","china")
print(ap.get_name())
print(ap.get_nation())
ap.set_name("laolaowang")
print(ap.get_name())
p=Person("老李")
print(p.get_name())
子类的构造函数中来完成父类实例的构造方法的调用
def __init__(self,name):
self.name = name
def set_name(self,name):
self.name = name
def get_name(self):#父类的get_name方法
return self.name
class AsianPerson(Person):#子类
def __init__(self,name,nation):#父类的__init__构造函数,不会被子类所继承
父类其他的共有变量和共有方法,会被子类所继承
Person.__init__(self,name)
self.nation = nation
def get_name(self):#重写了父类中的方法,调用的时候不会在使用父类中的该方法
return "****:"+self.name#如果在子类重写的方法中明确的想调用父类的方法可以用super().get_name() /Person.get_name(self)/super(AsianPerson,self).get_name()三种调用了父类的方法
ap= AsianPerson("laowang","china")
print(ap.get_name())
def __init__(self,name):
self.__name = name
def set_name(self,name):
self.__name = name
def get_name(self):
return self.__name
class AsianPerson(Person):
def __init__(self,name,nation):
Person.__init__(self,name)
self.nation = nation
ap= AsianPerson("laowang","china")
print(ap.get_name())
print(ap.set_name("laoli"))
print(ap.get_name())
print(ap.__name)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
def __init__(self):
self.__name = "laowang"
def set_name(self,name):
self.__name = name
def get_name(self):
return self.__name
class AsianPerson(Person):
def __init__(self,name,nation):
Person.__init__(self)
self.nation = nation
def get_name(self):
return self.__name
ap= AsianPerson("laowang","china")
print(ap.get_name())
如果父类中有私有变量,那么子类的方法是不能读取
父类中的私有变量的
任何东西
1)属性(特征:通常可以用数据来描述)
(类变量和实例变量)
2)可以做一些动作(方法)
属性:类变量和实例变量(私有变量)
方法:
1)实例方法
2)类方法
3)静态方法
类:
专有数据(可以存储,和对外使用)
方法(用于操作专有数据的),实现操作数据的规则。
无专有数据,谁给他传值都可以处理,并返回
本身不能存储数据。
self.a = a
self.b = b
return self.a+self.b
return a+b
print(compute(1,2).add())
把一组相关数据放到类的实例里面,进行存储、计算等
实现安全性、独立性,规则的操作统一。
'''
1)实例方法
2)类方法
3)静态方法
"""
'''
class Person:
count = 0 #类变量
nation = "中国"
self.name = name
self.gender = gender
Person.count +=1
return self.name
#通过类名来使用,类名.get_instance_count()
#也可以通过实例调用,实例对象.get_instance_count()
@classmethod
def get_instance_count(cls):
return Person.count
def create_a_instance(cls):
return Person("张","女")
def get_nation():
return Person.nation
'''
#print(Person("吴老师","Male").get_name())
#wulaoshi = Person("吴老师","Male")#实例化
#print(wulaoshi.get_name())
#print(Person.count)
#Person("吴老师","Male")
#print(Person.count)
#print(Person.get_instance_count())
#print(Person.create_a_instance())
print(Person("吴老师","Male").get_instance_count())
print(Person.get_nation())
print(Person("吴老师","Male").get_nation())
三种方法的区别:
1 实例方法,参数要有self,必须通过实例化的对象去调用。
2 类方法,要加上@classmethod来声明,参数至少有一个,
一般定义为cls,可以使用类变量,不能使用实例变量。
通过类名或者实例对象调用。
3 静态方法,要加上@staticmethod来声明,可以没有参数,
使用类变量,不能使用实例变量。
通过类名或者实例对象调用。
'''
@staticmethod #静态方法:不需要self和cls
def get_more():
Person.count +=100
return Person.count
'''
如果子类没有定义__init__构造方法,会自动调用父类的。
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
return self.name
pass #如果子类没有定义__init__构造方法
#会自动调用父类的。
print(cp.name)
print(cp.gender)
print(cp.get_name())
print(cp.count)
如果子类没有定义__init__构造方法,会自动调用父类的。
好处:站在老爸的肩膀上,增加属性,增加方法
在原有的基础上进行扩展。
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
def get_name(self):#实例方法,必须要实例化
return self.name
class ChinaPerson(Person):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender):
Person.__init__(self,name,gender)
def get_gender(self):
return self.gender
cp = ChinaPerson("吴老师","男")
print(cp.count)
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
def get_name(self):#实例方法,必须要实例化
return self.name
class Bird:
def __init__(self,color):
print("a bird is birthed!")
self.color = color
def fly(self):
print("I can fly in the sky!")
class ChinaBirdPerson(Person,Bird):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender,color):
Person.__init__(self,name,gender)
Bird.__init__(self,color)
def get_gender(self):
return self.gender
cp = ChinaBirdPerson("吴老师","男","红色")
print(cp.color)
print(cp.get_name())
print(cp.fly())
"""
继承:子类具备所有父类的共有变量和共有方法
如果子类没有定义__init__构造方法,会自动调用父类的。
好处:站在老爸的肩膀上,增加属性,增加方法
在原有的基础上进行扩展。
多继承:在括号里面写上多个基类(父类)
子类的构造函数,如果没有实现,则调用第一个基类的构造
函数。
"""
#def get_name(self):
# return "P name!"
pass
class Person(P):
count = 0 #类变量
nation = "中国"
def __init__(self,name,gender):
self.name = name
self.gender = gender
Person.count +=1
print("创建了一个新的人")
class Bird:
def __init__(self,color):
print("a bird is birthed!")
self.color = color
def fly(self):
print("I can fly in the sky!")
def get_name(self):#实例方法,必须要实例化
return "bird has no name"
class ChinaBirdPerson(Person,Bird):
#如果子类没有定义__init__构造方法
#会自动调用父类的。
def __init__(self,name,gender):
Person.__init__(self,name,gender)
#Bird.__init__(self,color)
def get_gender(self):
return self.gender
cp = ChinaBirdPerson("吴老师","男")
print(cp.get_name())
"""
继承:子类具备所有父类的共有变量和共有方法
如果子类没有定义__init__构造方法,会自动调用父类的。
好处:站在老爸的肩膀上,增加属性,增加方法
在原有的基础上进行扩展。
多继承:在括号里面写上多个基类(父类)ChinaBirdPerson(Person,Bird)
子类的构造函数,如果没有实现,则调用第一个基类的构造
函数。
"""
从多继承的同级类去查找方法,叫做广度优先
Person(父类) Bird-->get_name(父类)
ChinaBirdPerson(孙类)
class P:
x=100
def __init__(self,name):
self.name = name
def print_sth(s):
print(s)
class P1(P):
def print_sth(s):
print(s,s)
类变量:x,首先没有self,定义在方法外。
实例变量:self.name,在所有的类实例方法中有效。
局部变量:s,name,在函数内有效,出了就不能用了
数据成员(属性):类变量、实例变量
方法的重写:P1类中的print_sth重写了父类P中的print_sth方法
继承:P1继承了P,可以使用P中所有的共有属性和共有方法
实例化:p=P() ,每个实例有自己的内存地址,互相独立
对象:p(包含属性和方法)
实例方法:只能用实例调用
类方法:可以用类名调用,也可以用实例调用
示例:
"""人类的类"""
x=100
def __init__(self,name): #构造方法
self.name = name #
self.count=123
return self.name
def get_count(cls):
return Person.x
print(Person.get_count())#类方法可以用类名调用
print(p.get_count())#类方法可以用实例调用
print(p.get_name())
print(Person.get_name())#实例方法不可以用类调用
运行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
100
100
吴老师
Traceback (most recent call last):
File "C:\Users\dell\Desktop\练习\4\20190411.py", line 21, in <module>
print(Person.get_name())#实例方法不可以用类调用
TypeError: get_name() missing 1 required positional argument: 'self'
为什么非得定义类变量,在普通方法中不是也可以返回吗?
类变量的好处:方便统计所有实例返回的总结果
代码实例:统计每个实例的共工资。
class Person: """人类的类""" x=100 total_salary =0 def __init__(self,name,salary): #构造方法 self.name = name # self.count=123 self.salary =salary Person.total_salary +=salary def get_name(self): #实例方法 return self.name @classmethod #类方法 装饰器 cls指向类对象 def get_count(cls): return Person.x @staticmethod #静态方法 tips:静态方法和类方法的区别:静态方法不加cls def get_total_salary(): return Person.total_salary p1 = Person("吴老师",1000) p1 = Person("张老师",2000) p1 = Person("李老师",3000) print(Person.get_total_salary())
运行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
6000
为什么要定义类方法,在普通方法中不是也能返回类变量吗?
1 首先能用类名调用的只有:类变量,类方法,静态方法
2 其次,所以类方法可以直接用类名来调用,不需要实例化才能调用。
简单来说,就是不需要实例化的都可以方法类方法或静态方法里。
实例:把常用的函数放到一个类里
import time class Time: @staticmethod def t(): return time.time() print(Time.t())
执行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
1554990347.386067
总结:
实例方法:方法一个参数是self,要用实例去调用。
类方法:方法第一个参数是cls,可以用实例或者类名去调用。
方法里面不能使用实例变量。@classmethod
静态方法:方法不需要第一个参数,可以用实例或者类名去调用。
方法里面不能使用实例变量。@staticmethod
类里面,可以调用类外面的函数吗?可以
实例1:
import time def add(a,b): return a+b class Time: @staticmethod def t(): return time.time() @staticmethod def t1(): return add(1,2) print(Time.t1())
执行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
3
实例2:
import time def add(a,b): return a+b def sub(a,b): print(Time.t()) return a-b class Time: @staticmethod def t(): return time.time() @staticmethod def t1(): return add(1,2) print(Time.t1()) print(sub(2,1))
执行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
3
1554991822.1741009
1
三种方法访问私有类变量,实例:
class Person: __x = 0 #私有类变量 def __init__(self,name): self.name = name Person.__x +=1 def get_count1(self): return Person.__x @classmethod def get_count2(cls): return Person.__x @staticmethod def get_count3(): return Person.__x p = Person("吴老师") print(p.get_count1()) print(Person.get_count2()) print(Person.get_count3())Person.__x #私有类变量不能在方法外部访问
执行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
1
1
1
Traceback (most recent call last):
File "C:\Users\dell\Desktop\练习\4\20190411.py", line 23, in <module>
Person.__x
AttributeError: type object 'Person' has no attribute '__x'
私有实例变量,实例:
class Person: __x = 0 def __init__(self,name): self.__name = name #私有实例变量 Person.__x +=1 def get_count1(self): return self.__name p = Person("吴老师") print(p.get_count1()) p.__name #私有实例变量外部不能访问
执行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
吴老师
Traceback (most recent call last):
File "C:\Users\dell\Desktop\练习\4\20190411.py", line 13, in <module>
p.__name
AttributeError: 'Person' object has no attribute '__name'
可以在类里写一个方法来访问私有变量,实例:
class Person(): def __init__(self,name): self.__name = name def get_name(self): return self.__name def set_name(self,name): self.__name = name p =Person("吴老师") print(p.get_name()) p.set_name("李老师") print(p.get_name())
执行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
吴老师
李老师
私有方法:只能在类里面使用
实例:
class Person(): def __init__(self,name): self.__name = name def __get_name(self): return self.__name def set_name(self,name): if len(name)>5: return self.__name = name def print_name(self): print(self.__get_name()) p =Person("吴老师") p.print_name() p.__get_name()#外部不可访问
执行结果:
C:\Users\dell>py -3 C:\Users\dell\Desktop\练习\4\20190411.py
吴老师
Traceback (most recent call last):
File "C:\Users\dell\Desktop\练习\4\20190411.py", line 21, in <module>
p.__get_name()
AttributeError: 'Person' object has no attribute '__get_name'
python学习笔记----面向对象的更多相关文章
- python学习笔记--面向对象的编程和类
一.面向对象的编程 面向对象程序设计--Object Oriented Programming,简称oop,是一种程序设计思想.二.面向对象的特性类:class类,对比现实世界来说就是一个种类,一个模 ...
- Python学习笔记——面向对象基础
1.类和实例 1.1类的定义 类的定义使用class关键字,其后紧跟类名(通常大写开头),紧接着是(object),object是该类继承的类名,没有就继承object类. 实例化时就是类名+(),有 ...
- python学习笔记-面向对象设计
前言 1.三大编程范式: 面向过程编程 函数式编程 面向对象编程 2.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起,便实现 ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- python学习笔记目录
人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...
- Python学习笔记:装饰器
Python 装饰器的基本概念和应用 代码编写要遵循开放封闭原则,虽然在这个原则是用的面向对象开发,但是也适用于函数式编程,简单来说,它规定已经实现的功能代码不允许被修改,但可以被扩展,即: 封闭:已 ...
- python学习笔记1之-python简介及其环境安装
python学习笔记之-python简介及其环境安装 最近几年python之火不用多说,最近开始利用时间自学python,在学习的过程中,按照自己的思路和理解记录下学习的过程,并分享出来,如果正好你也 ...
- Python 学习笔记(下)
Python 学习笔记(下) 这份笔记是我在系统地学习python时记录的,它不能算是一份完整的参考,但里面大都是我觉得比较重要的地方. 目录 Python 学习笔记(下) 函数设计与使用 形参与实参 ...
随机推荐
- SQL注入学习(一)
注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...
- 对TSNU网站的初步分析
这是一个教育网的网站,其中网站的教务子系统,html页面是用表单嵌套来格式化显示样式的,另外还有<div>.<iframe>等等 .在这个上有个form表单,提交的参数有如下几 ...
- 芯灵思Sinlinx A64开发板设置qt程序自启动
开发平台 芯灵思Sinlinx A64 内存: 1GB 存储: 4GB 开发板详细参数 https://m.tb.cn/h.3wMaSKm 对于开发板开机启动程序的设置可以这样做通过串口连接开发板 v ...
- 谷歌浏览器可以google了
做为一个开发者好多疑问点或者难点大多数时间 都在进行百度,百度也能解决问题,但是呢如果让我能够google呢?我肯定会优先google的,这里面能够搜到一些国外技术人的文章可供参考. 下面是一个能够支 ...
- org.apache.commons等常用工具学习
StringUtils 1,StringUtils.isNotBlank isNotEmpty : 判断某字符串是否非空 StringUtils.isNotEmpty(null) = false St ...
- Day 22 初识面向对象
一.两种编程思想 1.面向过程编程 核心是'过程',过程指的是解决问题的步骤,就是先干什么再干什么 基于面向过程思想编写程序相当于写一条流水线,是一种机械式的思维方式 优点:解决问题的思路清晰,可以把 ...
- 1080P60视频源---verilog
1080P60视频源---verilog `timescale 1ns / 1ps ////////////////////////////////////////////////////////// ...
- H3C IRF MAD检测原理及相关问题验证
一.IRF简介 IRF(Intelligent Resilient Framework,智能弹性架构)是H3C自主研发的软件虚拟化技术.它的核心思想是将多台设备通过IRF物理端口连接在一起,进行必要的 ...
- Linux下MySQL编码的修改
默认登录mysql之后可以通过SHOW VARIABLES语句查看系统变量及其值. mysql> show variables like '%character%'; 说明:以下是在Cent ...
- ssl握手数据结构
ssl握手 SSL记录头(5字节) 字节0:记录内容的类型 Content Type Hex Code Description Change_Cipher_Spec 0x14 指示加密方式的更改 Al ...