1.函数
函数就是定义在类中,具有特定功能的一段小程序。
在面向对象编程的语言中,函数也叫方法。
2.函数的格式
修饰符 返回值类型 函数名(参数类型 实际参数,....)
{
执行语句;
return 返回值;
}
修饰符 public private static final[修饰的是常量]
返回值类型 函数/方法 运行后返回结果的数据类型 返回值类型 可以是没有 void
函数名
参数类型 参数的具体数据类型
实际参数 传入参数的具体数值
return 用于结束函数. 这个必须有的. 返回值类型未定义, 可以省略不写 编译器编译时会自动加上
返回值 该函数/方法 运行完成后 ,该结果会返回给调用者接收
传参:
当方法被调用时,传递值给参数。这个值被称为实参或变量。参数列表是指方法的参数类型、顺序和参数的个数。参数是可选的,方法可以不包含任何参数。
1.对象就是传引用(在java里面,如果是类,都是传引用),按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本
2.原始类型就是传值(注意Integer和String),按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本
返回:
修饰符:
非访问修饰符static
static修饰变量,则此变量在内存中只保存一份。(因此不常变动的数据适合声明为静态的)
static修饰函数时,此函数内无法访问到函数外定义的非static类型的全局变量。
类在加载到内存的时候是最先加载进来的部分是被static修饰的静态成员。(因此可以解释上一点为啥访问不到)
静态成员的访问不需要依赖对象,可以直接通过类名.的方式来访问。静态代码块的用法(重要)。
静态函数声明周期跟类保持一致[内存不会得到释放,如果类中函数变量全是静态,可能会出现Java内存溢出,所以面向对象编程]
什么样的方法适合声明为static类型的方法?都不需要依赖对象,很方便调用
工具方法:不依赖类的非静态的全局变量
packagejava_learning;public classStaticLearn {private staticString name;private staticString gender;private static intage;public StaticLearn(String name,String gender,intage) {this.name=name;this.gender=gender;this.age=age;
}public staticString getGender() {returngender;
}public staticString getName() {returnname;
}public static voidsetName(String name) {
StaticLearn.name=name;
}public static voidsetGender(String gender) {
StaticLearn.gender=gender;
}public static intgetAge() {returnage;
}public static void setAge(intage) {
StaticLearn.age=age;
}
}
View Code
packagejava_learning;public classTestStaticLearn {static {//完成数据的初始化 比main方法或者其他方法先执行
System.out.println("静态代码块");
System.out.println("+++++++++++++华丽分割线========");
}public static voidmain(String[] args) {
StaticLearn sta= new StaticLearn("肖战", "男", 28);
StaticLearn sta1= new StaticLearn("王一博", "男", 22);
StaticLearn sta2= new StaticLearn("金瀚", "男", 26);
System.out.println(sta.getName()+ "," + sta.getGender() + "," +sta.getAge());
System.out.println(sta1.getName()+ "," + sta1.getGender() + "," +sta1.getAge());
System.out.println(sta2.getName()+ "," + sta2.getGender() + "," +sta2.getAge());
TestStaticLearn.sayHi();//静态成员的访问不需要依赖对象,可以直接通过类名来访问。静态代码块的用法(重要)。
}public static String name1 = "肖战";public String name2 = "张翰";public static voidsayHi() {
System.out.println("hello," +name1);//System.out.println("hello,"+name2);报错//static修饰函数时,此函数内无法访问到函数外定义的非static类型的全局变量。//是因为类在加载到内存的时候是最先加载进来的部分是被static修饰的静态成员。
}
}
#######################
静态代码块+++++++++++++华丽分割线========金瀚,男,26金瀚,男,26金瀚,男,26hello,肖战
View Code
非访问修饰符final:
final:最终的
被final修饰的变量,它的值不能再做修改;
被final修饰的函数,不能被重写;
被final修饰的类,不能被继承。
非访问修饰符abstract:
抽象的
访问修饰符:
一个人可能同时又是设计者和调用者,修饰符的出现是为了空着设计者设计的类有哪些东西可以呗调用者使用 ,哪些东西不能被调用,从而实现访问控制,保护类里面的一些重要的成员。
public,protected,默认修饰符,private;[可修饰函数、修饰变量,基本上不会用private修饰类,存在的意思是什么呢?啊哈]
该四种访问修饰符的权限从左到右依次降低。
private:Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
default:即不加任何访问修饰符,通常称为“默认访问权限“或者“包访问权限”。该模式下,只允许在同一个包中进行访问。
protected:介于public 和 private 之间的一种访问修饰符,一般称之为“保护访问权限”。被其修饰的属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。
原文链接:https://blog.csdn.net/sdjadycsdn/article/details/81560096
3.面向过程
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。“面向过程”也可称之为“面向记录”编程思想。
就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
局部变量之前不能用修饰符,方法名前没有的话有默认修饰符。
4.面向对象
面向对象程序设计(Object Oriented Programming), 其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。
5.两者对比
我们现在要做一件 把 可乐放进冰箱里.
面向过程: 打开冰箱->存储可乐->关冰箱 代表语言 C
我们思考的是需要经历哪些步骤/过程去完成我们要做的事情. 注重过程面向
面向对象: 冰箱打开->冰箱存储可乐->冰箱关闭 代表语言 Java C++ python
区别:
人做,冰箱做
面向过程是找到功能一步步去执行
面向对象是我们先找到冰箱这个实体(对象),然后去用冰箱包含的功能,注重的是对象
面向对象是基于面向过程,封装了功能到具体的对象中去.
特点:
1.面向对象更符合人类的思考习惯
2.从过程的执行者,转换成了对象的指挥者
3.把复杂的问题,分解成一个个简单的问题
6.类,对象和构造方法
类是一个模板,它描述一类对象的行为和状态。--比如人、动物、电器等等
类的组成:变量和函数
类描述的是具有共性的一类事物,所以又把类称作模板技术;
共性:
具有相同的属性:Java变量;具有相同的行为:Java函数
对象是类的一个实例,有属性和行为。
对象就是能够被描述的书屋,都可以称作对象. 比如某个具体人. 大狗. 他有他的名字,年龄, 有性别,有身高....
也可以有有些行为:说话,跑,学习等等.... 大狗这个对象就是学生类或者人类的一个实体....
类就是用于描述事物,对象就是该类事物的具体个体.
描述事物中的属性和行为:
1.类是由成员组成
2.属性对应的就是类中的成员变量
3.行为对应的就是类中的成员方法
构造方法是一种特殊的方法,它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。
构造函数/方法
用于创建对象. 初始化对象 如果不写, 表示方法里没有自定义功能, 为空那编译器编译时会自动补上一个默认的构造函数,如果类中有定义代餐的构造函数,那么默认的构造函数就会被覆盖掉了。
构造方法是一种特殊的成员方法,它具有如下特殊性:
1.作用: (1)创建类的实例, (2)对构造出来的实例(对象)进行初始化
2.构造方法必须和类同名 没有返回值, 连void也没有
3.主要完成对象初始化的工作. new 的时候就会进行
4.类中必定有构造方法. 如果不写, 表示方法里没有自定义功能, 为空那编译器编译时会自动补上
5.不能被static final 等修饰符修饰
packagejava_learning;public classPerson {//成员属性 名字 年龄 性别
public String name;//String类型默认值null
public int age;//int类型默认值为0 double类型默认值为0.0
publicString school;publicString speciality;publicPerson() {
System.out.println("我是无参构造方法");
}public Person(String name, intage,String school, String speciality) {this();
name=name;this.age =age;this.school=school;this.speciality =speciality;
}public voidmsg() {
System.out.println("我叫:" + this.name);
}public voidspecialities() {
System.out.println("我的特长是:"+this.speciality);
}
}
View Code
packagejava_learning;public classtest_person {public static voidmain(String[] args) {//TODO Auto-generated method stub
Person person2=new Person("肖战",28,"重庆工商大学","唱歌,跳舞,演戏,迷人");
person2.msg();
person2.specialities();
}
}
我叫:肖战
我的特长是:唱歌,跳舞,演戏,迷人
View Code
this:代表的是一个对象的引用
调用函数之前首先要想到的是:准备对象————通过调用构造函数
函数(并非构造函数)到底怎么定义:返回值,参数列表的定义原则:取决于我们要定义的这个函数是为了解决一个什么问题
调用无参构造方法:创建最原始的对象
调用有参构造方法:创建带参的对象
7.命名规则
java中的包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。例如com.dongnao.jy
类的名字必须由大写字母开头而单词中的其他字母均为小写;如果类名称由多个单词组成,则每个单词的首字母均应为大写例如Human,Animal,Dog。
8.静态变量和静态方法
类变量:类变量也声明在类中,方法体之外,但必须声明为static修饰。我通常也称为静态变量。无论一个类实例化多少对象,它的静态变量只有一份拷贝。 静态变量也被称为类变量。局部变量不能被声明为 static 变量。
只有一份拷贝, 一处修改,全都变化;
静态函数: static 关键字用来声明独立于对象的静态方法。静态方法不能使用类的非静态变量。
静态函数,可以通过类直接调用,不必实例化。
普通函数,我们称为成员函数。
静态不能调用非静态
注意:和python中的区别。