java的类与对象

                                     java的类与对象

1 面向对象

1.1 面向对象与面向过程的区别

面向过程和面向对象都是解决问题的逻辑方法,面向过程是强调解决问题的步骤,可以先定义多个函数,在使用的使用调用函数即可;面向对象把问题分解成多个对象,强调的是解决问题的行为,总结如下:

面向过程:强化函数,过程(步骤),实现功能模块。

面向对象:用类和对象的方法来解决问题的行为或功能。

1.2 对象

对象(实例):具有属性和行为的个体,称为对象。万物皆对象。比如人:   名字、年龄、高矮, 吃饭、睡觉、跑步——具体的每一个人就是一个对象。属性是名词,行为是动词,不同的对象具有不同的属性值和行为。

对象在内存中存储结构,有如下代码

public class ObjectStructure {public static void main(String[] args) {int n = 10;  //栈存储int m = 10;  //栈存储Person p = new Person();//属性赋值p.name="张三";System.out.println(p.name);  //   张三System.out.println(p.age);   //0		//调用String name = "ls";   //局部变量(常量池)String aaaa="ls";String pwd = "123";p.login(name,pwd);System.out.println("name:"+name);   //lsSystem.out.println("执行");}
}class Person {// 属性String name;int age;//用户登录String userName;String pwd;public void login(String userName,String pwd){	System.out.println(userName+"===="+pwd);   //ls  123}public void show() {System.out.println("姓名:" + name + ",年龄:" + age);}
}

其内存图如下:

1.3 类

类:具有相同属性(特征)和行为(动作)对象的集合。

类和对象之间的关系,从设计层面与编码层面分析如下:

(1)设计层面:众多的对象,从众多的对象中,根据需求,划分成不同的类别。
           (2)编码层面:从类别出发,编写类的代码——对应的就是我们的class  关键字后面的类名。

可以简单的理解为类是模板,蓝图,对象是类具体实例化出来的对象,个体。

 

2 类的创建和初始化

2.1 类的定义

【访问权限修饰符】【修饰符】 class 类名{
                       类体
             }

权限修饰符如下:

权限修饰符描述

         public

公共的,在同包,不同包中的类该权限修饰修饰的属性都可以访问
缺省:默认的只能在同包中的类进行访问

注意:protected和private只能修饰内部类,不能修饰外部类。外部类就只有以上两种修饰符。

static不能修饰外部类,能修饰内部类直接作为一个普通类来使用,而不需先实例一个外部类。

修饰符如下:

修饰符描述
abstarct可以被指示一个类只能作为其它类的基类
final不能再申明子类

注意:一个java文件中,可以有多个class,但是只能有一个public class

2.2 类的属性

属性:描述类中对象的特征。

语法:【访问权限修饰符】【修饰符】类型 属性名 【= 初始值】;

访问权限修饰符:private 缺省(default)默认 protected  public

修饰符如下:

修饰符描述

static

指定变量被所有对象共享,即所有实例都可以使用该变量。变量属于这个类。

final

最终修饰符,指定此变量的值不能变

transient

指定该变量是系统保留,暂无特别作用的临时性变量。修饰的属性不能序列化

volatile

指定该变量可以同时被几个线程控制和修改。

其中初始值,可以在声明的同时对属性进行赋值。也可以在使用之前进行赋值。在声明的同时赋值,和在使用之前进行赋值有本质的区别:(1)在类中,声明成员变量的同时赋值,相当于创建的所有对象默认的属性值就是赋予的默认值;(2)在使用之前,使使用  对象名a.属性名  进行赋值,只针对当前这个对象a有效,对其他对象无效。

成员变量(属性)与局部变量的异同:

相同点

①定义的语法格式相同:  类型  名称 = “初始值”;

②都有作用域 (作用范围)  

不同点

①定义位置不同,成员变量定义在类中,方法外;局部变量定义方法内或者方法的参数或者是代码块中;

②成员变量有默认的初始值;基本类型:

整型:byte short int long 默认值 :0

浮点类型:float double 默认值:0.0

字符类型:char 默认值 :空格  \u0000

布尔类型:boolean 默认值 :false

引用类型 :都是null;

局部变量没有初始值。

③在内存在的位置不同,成员变量存放在堆中;局部变量存放在栈中。

④成员变量的访问权限修饰符有四个(public 默认 protected private );局部变量没有权限修饰符;

 

2.3 类的方法

类中定义一个行为或者动作。

语法:【访问权限修饰符】【修饰符】  返回值类型  方法名字(参数类型  参数1,参数类型   参数2,....){ 方法体  }

访问权限修饰符: private 缺省(default)默认 protected  public;

修饰符如下:

修饰符描述
static

指定不需要实例化就可以激活的一个方法。

final

指定该方法不能被重载。

abstract指定此方法不需要实现,实现留给子类覆盖,子类覆盖该方法之后方法才能够生效。  
native

本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。

synchronized

同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。

方法的参数:分为形式参数和实际参数

形式参数

形式参数,没有值的参数,在函数定义时候的参数

实际参数

有具体值的参数,在函数调用时候的参数

在调用方法的时候,会自动的将实际参数的值,赋予给形式参数。

方法的返回值:一个方法是用来实现某一个或者多个功能的模块,方法执行的结果有的时候,需要传递出来,被调用端来使用。

设置返回值:(1)在方法内部,写return 返回值表达式。(2)在方法定义的时候,将返回值类型设置成,跟返回值表式匹配的类型。

注意:在方法中,程序当执行到return的时候,一定会跳出当前的方法;在方法中,return后面的代码段一定不执行。

2.4 方法重载

定义:如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载,如下代码构成重载。

class GetMax{public void max(int a,int b) {int max=a>b?a:b;System.out.println("最大值:"+max);}public double max(double a,double b) {double max=a>b?a:b;return max;}public double max(double a,double b,double c) {//double max=a>b?a:b;double result = max(a,b)>c?max(a,b):c;return result;}
}

特点:

(1)方法必须在同一类中且方法名相同;

(2)方法名必须相同;

(3)参数列表必须不一致(a.参数类型 b.参数个数 c.参数的顺序);

(4)与方法的返回值类型无关(可以相同也可以不同)。

2.5 匿名对象

匿名对象 :创建的对象是匿名的,代码如下

//创建学生对象,并且要输入学生信息
Student student = new Student();
student.info();
//匿名对象 
new Student().info();

缺点:对象只能创建一次.。

对象中的成员只调用一次时,可以使用匿名对象.。

2.6 方法的可变参数

语法:访问权限修饰符 返回值类型 方法名(类型…变量名){}

特点:

(1)可变参数与同名方法构成重载;

(2)可变参数只能出现一次,并且必须放在最后;

(3)可变参数的使用和数组的使用方式一致。

2.7 意类型作为方法的返回值类型

作为返回值:返回一个该类型的对象

public class TestCar {public static void main(String[] args) {Car car = factory.getCar("benz", "黑色");car.info();		}
}
//工厂
class Factory{	public Car getCar(String brand,String color) {Car car = new Car();car.brand=brand;car.color=color;return car;}
}
//汽车
class Car{//属性String brand;String color;//方法输出汽车的信息public void info() {System.out.println("品牌:"+brand+",颜色:"+color);}
}

 

2.8 值类型和引用类型作方法的参数区别

值类型作为方法的参数:值传递的过程只是将实参的值复制给形参,它们实参与形参并不是共享一段相同的内存,因此形参的改变只是改变自己占用的内存的值,而不改变实参。

引用类型作为方法的参数:通过指针和引用将实参传给形参,因为此时实参与形参共享同一地址单元,形参改变值了,实参自然也要改。

通过内存图可以明确的区分,代码及内存图如下:

class Test {public static void main(String args[]) {Test t = new Test();t.first();}public void first() {int i = 5;Value v1 = new Value();v1.i = 25;second(v1, i);System.out.println(v.i);  //20}public void second(Value v, int i) {i = 0;v.i = 20;Value val = new Value();v = val;System.out.println(v.i + " " + i);  //15  0}
}
class Value {int i = 15;
}

2.9 构造器

作用:(1)用于创建对象;(2)创建对象的同时给当前对象的属性赋值

语法:访问权限修饰符 类名(参数列表) {}

特点:(1)用户没有手动创建构造器系统会自动创建一个无参构造器;

          (2)用户创建够造器系统不会为类提供无参构造器;

          (3)也可以和方法一样实现重载;

          (4)默认构造器的修饰符与所属类的修饰符一致。

class Boy{private String name;private int age;//无参	public Boy() {super();}//有参public Boy(String name, int age) {this.name = name;this.age = age;}
}

2.10 package包

作用:防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。

规范:项目类型.公司名称.项目名称.模块名称.包名(所有字母小写)

package com.refuel.java;

2.11 import导入

作用:导入相关类。

导入规范:import 包名.类名/接口名

静态导入:import static 包名.类.静态成员

特点:可以使用“*”代表包下的所有类或接口;java.lang包下接口或类自动导入不需要import ;如: String ,System,Math等

注意:如果调用不同包中的相同类名,创建对象时要定义类的全路径。如:包名.类名 对象=new包名.类名();

import com.refuel.java.Test;
import static java.lang.System.out;
public class TestPckage {
public static void main(String[] args) {Test t  = new Test();out.println(t.name);com.aura.java1.Test t1 = new com.aura.java1.Test();out.println(t1.age);}
}
class Test{String name;int age;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473937.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学车总结

学车总结: 1、左脚离合,右脚油门和刹车。2、左脚脚跟着地,用脚尖控制离合。3、踩离合要快,松要慢点;刹车刚好相反。4、平时不要猛打方向盘,轻微调整就行,需要拐急弯要降低车速。5、换挡时需要将…

建设网站需要的Bootstrap介绍与操作

01-流体布局 流体布局,就是使用百分比来设置元素的宽度,元素的高度值固定, calc():可以通过计算的方式给元素添加尺寸,比如:width:calc(25%-4px); box-sizing:content-box默认的盒子计算方式 2.border-box 盒子的计算方式从边框开始,盒子的尺寸,边框和…

04.卷积神经网络 W4.特殊应用:人脸识别和神经风格转换

文章目录1. 什么是人脸识别2. One-Shot学习3. Siamese 网络4. Triplet 损失5. 人脸验证与二分类6. 什么是神经风格迁移7. 深度卷积网络在学什么8. Cost function9. Content cost function10. Style cost function11. 一维到三维推广作业参考:吴恩达视频课深度学习笔…

java的封装,继承,多态

java的封装,继承,多态 1 封装 1.1 封装 指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据,必须通过严格的…

详解一个自己原创的正则匹配IP的表达式

第一种方法(可以匹配有点毛病):检测IP地址的正则表达式 正则表达式: ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) ((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?) 红色块代…

亚洲赛前训练计划

回顾和加深所学算法。 主要回顾用途及使用方法。 图论方面: 1.dfs,bfs 2.强连通,点双连通,边双连通,2-sat 3.匈牙利算法km,以及不等式解 4.网络流,费用流 5.最短路,SPFA,dijstra, floay,斯坦纳树…

天池在线编程 2020年9月26日 日常周赛题解

文章目录1. K步编辑2. 折纸3. 字符串的不同排列4. 硬币排成线题目地址,请点这 1. K步编辑 给出一个只含有小写字母的字符串的集合以及一个目标串(target),输出所有可以经过不多于 k 次操作得到目标字符串的字符串。 你可以对字符串进行一下的3种操作:…

JavaScript试题练习题

1. 我们可以在下列哪个HTML元素中放置javascript代码&#xff1f; A.< script > B.<javascript > C.< js > D.<scripting > ★标准答案&#xff1a;A 2. 预测以下代码片段的输出结果: var str alert(typeof str); A.. string B..un…

Java的static,final,代码块,内部类,抽象类,接口等

Java的static&#xff0c;final&#xff0c;代码块&#xff0c;内部类&#xff0c;抽象类&#xff0c;接口等 1 static关键字月final关键字 1.1 static static表示静态。可以修饰属性&#xff0c;方法&#xff0c;代码块内部类等&#xff0c;总结如下&#xff1a; 特点修饰属…

使用parted划分GPT分区(转)

parted命令可以划分单个分区大于2T的GPT格式的分区&#xff0c;也可以划分普通的MBR分区&#xff0c;fdisk命令对于大于2T的分区无法划分&#xff0c;所以用fdisk无法看到parted划分的GPT格式的分区。 Parted 命令分为两种模式&#xff1a;命令行模式和交互模式。 1、命令行模式…

04.卷积神经网络 W4.特殊应用:人脸识别和神经风格转换(作业:快乐屋人脸识别+图片风格转换)

文章目录作业1&#xff1a;快乐房子 - 人脸识别0. 朴素人脸验证1. 编码人脸图片1.1 使用卷积网络编码1.2 Triplet 损失2. 加载训练过的模型3. 使用模型3.1 人脸验证3.2 人脸识别作业2&#xff1a;神经风格转换1. 问题背景2. 迁移学习3. 神经风格转换3.1 计算内容损失3.2 计算风…

javascript练习题

1.用typeof bar”object”判断bar是否是一个object的潜在缺陷是什么&#xff1f;怎样才能避免这种缺陷&#xff1f; 答&#xff1a;尽管用typeof bar”object”是一个判断bar是一个object的可靠方法&#xff0c;但是令人惊讶的是&#xff0c;在JavaScript中null也是一个object!…

Maven3路程(三)用Maven创建第一个web项目(1)

一.创建项目 1.Eclipse中用Maven创建项目 上图中Next 2.继续Next 3.选maven-archetype-webapp后&#xff0c;next 4.填写相应的信息&#xff0c;Packaged是默认创建一个包&#xff0c;不写也可以 5.创建好项目后&#xff0c;目录如下&#xff1a; 至此&#xff0c;项目已经创建…

java基础之设计模式

1 设置模式之单例设计模式 概念&#xff1a;保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。 &#xff08;1&#xff09;饿汉式&#xff1a; /*** Description 饿汉式* author refuel* version v1.0*/ public class TestSingleton{public static void ma…

数组排序(冒泡、排序)

目前对于数组的排序有主要的两种&#xff0c;一种是选择排序&#xff0c;一种是冒泡排序。当然大学学过数据结构的知道&#xff0c;还有一些其他的排序&#xff0c;这里就不说明了&#xff0c;有时间自己上网查查。其实排序在开发中并不常用&#xff0c; 我们学习它是学一种思想…

LeetCode 1598. 文件夹操作日志搜集器

文章目录1. 题目2. 解题1. 题目 每当用户执行变更文件夹操作时&#xff0c;LeetCode 文件系统都会保存一条日志记录。 下面给出对变更操作的说明&#xff1a; "../" &#xff1a;移动到当前文件夹的父文件夹。如果已经在主文件夹下&#xff0c;则 继续停留在当前文…

Java集合Set,List和Map等

Java集合Set,List和Map等 1 Java集合框架 因为Java是面向对象的语言&#xff0c;对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用Array存储对象方面具有一些弊端 。Java集合就像一个容器&#x…

利用bootstrap框架做了一个采摘节节日活动网页

效果欣赏如下&#xff1a; 总共主要是一下两个块代码&#xff1a; 1.主题&#xff1a; <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"width, initial-scale1.0&qu…

FC网络学习笔记02 -网络配置方法

随着新一代飞机的综合化航电系统对通信需求的不断提高&#xff0c;传统的ARINC429、1553B总线的传输速率分别只有100Kbps和1Mbps&#xff0c;其带宽已远远不 论文联盟 http://Www.LWlm.cOm能满足系统通信的需求&#xff0c;无法为高性能数据处理提供有力的通信支撑。 FC网络是…

LeetCode 1599. 经营摩天轮的最大利润(模拟)

文章目录1. 题目2. 解题1. 题目 你正在经营一座摩天轮&#xff0c;该摩天轮共有 4 个座舱 &#xff0c;每个座舱 最多可以容纳 4 位游客 。你可以 逆时针 轮转座舱&#xff0c;但每次轮转都需要支付一定的运行成本 runningCost 。摩天轮每次轮转都恰好转动 1 / 4 周。 给你一…