当前位置: 首页 > 编程日记 > 正文

Java学习总结:4

面向对象

面向对象的程序设计具有封装性、继承性、多态性。
类的定义语法如下:

class 类名称{数据类型 属性(变量);...public 返回值的数据类型 方法名称(参数1,参数2...){程序语句;[return 表达式;]
}
}

定义类

class Book {String title;double price;public void getlnfo() {System.out.println("图书名称:" + title + ",价格" + price);}}

声明并实例化对象

类名称 对象名称 = new 类名称();
class Book {								//定义一个类String title;double price;public void getlnfo() {				//此方法将由对象调用System.out.println("图书名称:" + title + ",价格" + price);}}
public class Test1_2 {public static void main(String args[]){Book bk = new Book();				//声明并实例化对象bk.title = "java开发";bk.price = 89.9;bk.getlnfo();						//调用类中的getlnfo()方法}
}

堆内存:
保存每一个对象的属性内容,堆内存需要用关键字new才可以开辟(可以理解为只要有关键字new,不管在何种情况下,都表示要开辟新的堆内存空间),如果一个对象没有对应的堆内存指向,将无法使用。
栈内存:
保存的是一块堆内存的地址数据,可以把它想象成一个int型变量(每一个 int型变量只能存放一个数值),所以每一块栈内存只能够保留一块堆内存地址。

二者关系如下:
在这里插入图片描述

引用传递

public class Test1_2 {public static void main(String args[]){Book bookA = new Book();Book bookB = null ;	//注意这里没有使用new实例化bookA.title = "java开发";bookA.price = 89.9;bookB=bookA;		//引用传递,相当于BookA和BookB这两个栈内存同时指向同一块堆内存bookB.price = 60;	//所以BookB修改属性内容时,会直接影响BookA对象的内容bookA.getlnfo();}
}

我将它理解为创造多个不同名称的指针来指向同一个地址。

同理,声明并实例化的对象也可以进行引用传递。

public class Test1_3 {public static void main(String args[]){Book bookA = new Book();//声明并实例化Book bookB = new Book();//声明并实例化bookA.title = "java开发";bookA.price = 89.8;bookB.title = "JSP开发";bookB.price = 69.8;bookB=BookA;//引用传递bookB.price = 100.1;bookB.getlnfo();}
}

在这里插入图片描述

经过引用传递后bookB原来的堆内存里面的数据就没有对象指向了,该内存空间也就成为了垃圾空间。
在java中所有的垃圾都会不定期地被垃圾收集器(GC)回收,回收后会释放掉其所占用的空间。

封装性初步分析

使用private关键字封装,将类中的属性进行私有化操作。
封装后的属性只能在该类中被访问,除非定义相应的setter、getter方法。

class Book2{private String title;private double price;public void setTitle(String t){title = t;}public void setPrice(double p){if(p>0.0){						//数据验证price = p;}}public String getTitle(){return title;}public double getPrice(){return price;}public void getInfo(){System.out.println("图书名称:"+title+",价格:"+price);}
}
public class Test1_4 {public static void main(String args[]){Book2 book = new Book2();book.setTitle("Java开发");book.setPrice(-89.9);book.getInfo();}
}

setter方法主要是设置内容:public void setTitle(String t),有参;
getter方法主要是取得属性内容:public String getTitle(),无参;

构造方法

构造方法本身是一种特殊的方法,它只在新对象实例化的时候调用
定义原则:
方法名称与类名称相同,没有返回值类型声明,同时构造方法可以进行重载。

class Book3{public Book3(){				//构造方法System.out.println("**********");}
}
public class Test1_5 {public static void main(String args[]){Book3 book = null;book = new Book3();}
}

构造方法只有在使用关键字new实例化对象时才会被调用一次。

用构造方法为属性赋值

class Book3{private String title;private double price;public Book3(String t,double p){setTitle(t);setPrice(p);}public void setTitle(String t){title = t;}public void setPrice(double p){price = p;}public String getTitle(){return title;}public double getPrice(){return price;}public void getInfo(){System.out.println("图书名称:"+title+",价格:"+price);}
}
public class Test1_5 {public static void main(String args[]){Book3 book = new Book3("Java开发",69.8);book.getInfo();}
}

匿名对象

没有栈内存指向的堆内存空间,就是一个匿名对象。
在这里插入图片描述

class Book4{private String title;private double price;public Book4(String t,double p){title = t;price = p;}public void getInfo(){System.out.println("图书名称:"+title+",价格:"+price);}
}
public class Test1_6 {public static void main(String args[]){new Book4("Java开发",69.8).getInfo();     //匿名对象}
}

这里的匿名对象由于没有对应的栈内存指向,所以只能使用一次,一次过后就将成为垃圾,并等待GC回收释放。

简单Java类

基本开发要求:
1.类的名称必须存在意义;
2.类中所有的属性必须private封装,封装后的属性必须提供setter、getter;
3.类中可以提供任意多个构造方法,但是必须保留一个无参构造方法;
4.类中不允许出现任何输出语句,所有信息输出必须交给被调用处输出;
5.类中需要提供一个取得对象完整信息的方法,而且返回String型数据。

class Emp{private int empno;      //雇员编号private String ename;   //雇员姓名private String job;     //雇员职位private double sal;     //雇员工资private double comm;    //佣金public Emp(){           //明确一个无参构造方法}public Emp(int eno,String ena,String j,double s,double c){//有参构造empno = eno;				//为属性赋值ename = ena;job = j;sal = s;comm = c;}public void setEmpno(int e){	//设置属性内容empno = e;}public void setEname(String e){ename = e;}public void setJob(String j){job = j;}public void setSal(double s){sal = s;}public void setComm(double c){comm = c;}public int getEmpno() {			//取得属性内容return empno;}public String getEname(){return ename;}public  String getJob(){return job;}public double getSal(){return sal;}public double getComm(){return comm;}public String getInfo(){		//取得完整信息return "雇员编号:"+empno+"\n"+ "雇员姓名:"+ename+"\n"+"雇员职位:"+job+"\n"+"基本工资:"+sal+"\n"+"佣金:"+comm;}
}
public class Test1_7 {public static void main(String args[]){Emp e =new Emp(7369,"SMITH","CLERK",800.0,1.0);	//实例化对象System.out.println(e.getInfo());				//取得对象信息}
}

数组

java中数组的基本概念:
数组指的就是一组相关变量的集合。

数组属于引用型数据。

声明并开辟数组:

数据类型 数组名称 [] = new 数据类型 [长度] ;
数据类型 [] 数组名称 = new 数据类型 [长度] ;

java为了方便数组的输出,提供了一个"数组名称.length"的属性,可以取得数组长度

数组动态初始化

public class Test1_8 {public static void main(String args[]){int data [] = new int [3];		//定义数组data[0] = 10;data[1] = 20;data[2] = 30;for(int x=0;x<data.length;x++){System.out.println(data[x]);}}
}

注意:不能直接使用未开辟空间的数组

数组也可以进行引用传递

public class Test1_9 {public static void main(String args[]){int data[] = new int [3];data[0] = 10;data[1] = 20;data[2] = 30;int temp[] = data;  //数组的引用传递temp[0] = 99;for(int x=0;x<data.length;x++) {System.out.println(data[x]);}}
}

数组静态初始化

格式:
1.简化形式

数据类型 数组名称 [] ={,,...};

2.完整形式

数据类型 数组名称 [] = new 数据类型 [] {,,...};
public class Test1_1_1 {public static void main(String args[]){int data[] = new int[] {1,2,3,4,5};for(int x=0;x<data.length;x++){System.out.println(data[x]);}}
}

二维数组

动态初始化:数据类型 数组名称[][] = new 数据类型[行数][列数];
静态初始化:数据类型 数组名称[][] = new 数据类型[][] {{,...,},{,...,}}

所谓的二维数组其实就是将多个一维数组变为一个大数组,并且为每个一维数组设置一个行号。

public class Test1_1_2 {public static void main(String args[]){int data[][] = new int [][]{{1,2,3},{4,5,6},{7,8,9}};for(int x=0;x<data.length;x++){for(int y=0;y<data.length;y++){System.out.print(data[x][y]+"\t");}System.out.println();}}
}

数组作为方法参数的传递

public class Test1_1_3 {public static void main(String args[]){int data[] = new int[]{1,2,3};change(data);for(int x=0;x<data.length;x++){System.out.println(data[x]);}}public static void change(int temp[]){for(int x=0;x<temp.length;x++){temp[x]=temp[x]*2;}}
}

在这里插入图片描述

既然有匿名对象,那当然也有匿名数组。

数组操作方法

数组复制

数组复制可以将一个数组的部分内容复制到另外一个数组之中。

System.arraycopy(数组名称,源数组复制开始索引,目标数组名称,目标数组复制开始索引,长度)
public class Test1_1_4 {public static void main(String args[]){int dataA[] = new int[]{1,2,3,4,5,6,7,8};int dataB[] = new int[]{11,22,33,44,55,66,77,88};System.arraycopy(dataA,4,dataB,2,3);print(dataB);}public static void print(int temp[]){for(int x=0;x<temp.length;x++){System.out.print(temp[x]+"、");}System.out.println();}
}
结果为:1122567667788

数组排序

数组排序可以按照由小到大的顺序对基本数据类型进行排序。
其定义如下:

java.util.Arrays.sort(数组名称);
public class Test1_1_5 {public static void main(String args[]){int data[] = new int[]{3,6,1,2,8,0};java.util.Arrays.sort(data);print(data);}public static void print(int temp[]){for(int x=0;x<temp.length;x++){System.out.print(temp[x]+"、");}System.out.println();}
}

相关文章:

在3ds Max中使用V-Ray 5渲染引擎视频教程

在3ds Max中使用V-Ray 5渲染引擎视频教程 MP4 | 视频&#xff1a;h264, 1280x720 | 音频&#xff1a;AAC, 44.1 KHz, 2通道。AAC, 44.1 KHz, 2 Ch. 技能水平。初学者&#xff5c;类型&#xff1a;电子学习&#xff5c;语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕…

OC实用转换model的工具

OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点如下: 1. 用组合设计模式处理树形数据结构(非线性数据结构) 2. 在调试台中处理生成Model…

后端怎么防止重复提交?(常用的做法)

后端怎么防止重复提交&#xff1f;&#xff08;常用的做法&#xff09; 客户端的抖动&#xff0c;快速操作&#xff0c;网络通信或者服务器响应慢&#xff0c;造成服务器重复处理。防止重复提交&#xff0c;除了从前端控制&#xff0c;后台也需要控制。因为前端的限制不能解决…

利用MAC OS X 自带的磁盘工具提取光盘镜像ISO文件

虽说渐渐地Mac笔记本基本告别内置光驱时代了&#xff0c;随着网络的普及&#xff0c;使用到光驱的机会也渐少&#xff0c;但有时又难免需要光驱&#xff0c;比如二货出版社的随书光盘等…我们可以通过USB外置光驱将光盘内容提取为ISO文件保存到电脑里&#xff0c;方便以后可以随…

Java学习总结:5

面向对象 对象数组 引用数据类型也可以定义数组 格式&#xff1a; 1.对象数组的动态初始化 类名称 对象数组名称 new 类名称 [长度];动态初始化默认情况下&#xff0c;数组的每一个元素都是其对应的默认值null。 class Book5{private String title;private double price;…

Maya初学者完整的3D动画大师班视频教程

Maya初学者完整的3D动画大师班视频教程 时间13小时30分 包括课程项目文件 1280X720 MP4 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 教程大小解压后&#xff1a;8.38G Maya初学者。完整的3D动画大师班 百度一下 云桥网络 平台…

jQuery-1.9.1源码分析系列(四) 缓存系统

先前在分析Sizzle的时候分析到Sizzle有自己的缓存机制&#xff0c;点击这里查看。不过Sizzle的缓存只是对内使用的&#xff08;内部自己存&#xff0c;自己取&#xff09;。接下来分析jQuery可以对外使用的缓存&#xff08;可存可取&#xff09;。 首先需要明白jQuery缓存需要解…

CBA 赛程的笔记 - 北京首钢

2014-11-01 19:35北京首钢103:89广东宏远结束技术统计 发挥不错&#xff0c;打的比较好&#xff01;2014-11-05 19:35八一双鹿89:100北京首钢结束技术统计 第一节国内球员打的太屎&#xff0c;最后一节国内球员发挥不错&#xff01;2014-11-07 19:35浙江稠州107:116北京首钢结束…

个人技术生涯的感悟(2)

很多时候&#xff0c;一门门槛很低的编程语言对于初学者的帮助是非常大的&#xff0c;从而决定这个人的技术路线的选择。 在经历过大一下学期对C&#xff0c;和C的迷茫之后&#xff0c;在大二上学期&#xff0c;学校在搞一个网页设计比赛&#xff0c;正好和两个朋友一起参赛。开…

HtmlAgilityPack 处理通配的contains

//选择不包含class属性的节点 var result node.SelectNodes(".//span[not(class)]"); //选择不包含class和id属性的节点 var result node.SelectNodes(".//span[not(class) and not(id)]"); //选择不包含class"expire"的span var result node…

游戏风格化角色创建入门指南视频教程

游戏风格化角色创建入门指南视频教程 时间 33小时 包括项目文件 1920X1080 MP4 语言&#xff1a;英语中文字幕&#xff08;根据原英文字幕机译更准确&#xff09;原英文字幕 游戏中的风格化角色创建入门指南 百度一下 云桥网络 平台huo取 教程&#xff01; 信息。 教程33小…

Java学习总结:6

String类(接上篇) 字符串的拆分 public class Test1_1_2_1 {public static void main(String args[]){String str "hello world";String result[] str.split(" "); //以空格作为间隔for(int x0;x<result.length;x){System.out.print(result[x]"…

java面试常见问题之Hibernate总结

1 Hibernate的检索方式 导航对象图检索&#xff08;根据已经加载的对象&#xff0c;导航到其他对象。&#xff09; OID检索&#xff08;按照对象的OID来检索对象。&#xff09; HQL检索&#xff08;使用面向对象的HQL查询语言。&#xff09; QBC检索&#xff08;使…

HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询

题意&#xff1a; n个数字 下面n个数字表示数列 2个操作 1 [u, v] k add [u,v ]区间 &#xff08;u点要计算&#xff09;每隔k个位置&#xff0c;该数字add 2 pos 询问 pos下标的值&#xff08;下标从1开始&#xff09; 思路&#xff1a; 因为k很小&#xff0c; 可以直接存 k…

Java学习总结:7

static关键字 一个类的主要组成就是属性和方法(分为构造方法和普通方法两种)&#xff0c;而每一个对象都分别拥有各自的属性内容(不同对象的属性保存在不同的堆内存中)&#xff0c;如果类中的某个属性希望定义为公共属性(即所有对象都可以使用的属性)&#xff0c;则可以在声明…

mybatis 使用resultMap实现数据库的操作

resultType:直接表示返回类型 resultMap&#xff1a;对外部resultMap的引用 二者不能同时使用 创建一个实体类Role和User public class Role {private Integer id;private String roleCode;private String roleName;//省略set、get方法 创建User类&#xff08;在User中有roleId…

【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course

【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course 三维产品可视化课程 教程大小&#xff1a;5.38G 1280X720 含课程素材文件 你会学到什么 项目简介及其必须包含的内容 蓝图以及如何获得和使用 逐步建模流程 如何制作UV和纹理 用UV投射材料 生成…

Spring MVC 和WebFlux 区别

本节主要对比了WebMvc 和 WebFlux两个Web框架,Spring已经为我们开发做了很大努力了,所以在合适的场景下这种异步框架还是非常可行的。但是还要考虑后期其它异步框架是否能够完善,全链路异步才能发挥异步最大的优势。

Cygwin鸡毛蒜皮

2019独角兽企业重金招聘Python工程师标准>>> Windows命令乱码: cygwin控制台mintty的编码缺省是UTF-8, 右键调整mintty选项[text] 改编码为GBK UNIX路径和Windows路径互转: 使用cygpath工具. 如: #cd cygpath C:\\Windows 安装包管理器apt-cyg: 安装: # svn --fo…

Using unique option prefix myisam-recover instead of myisam-recover-option

[转载]关于mysql error.log报"Using unique option prefix myisam-recover instead of myisam-recover-options ..."转载&#xff1a;http://blog.csdn.net/cloud_xy/article/details/21756601启动时日志中有这个警告的&#xff1a;[Warning] Using unique option pr…

Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020

Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264&#xff0c;1280720 |音频:aac&#xff0c;48000 Hz 语言:英语 中文字幕&#xff08;机译&#xff09;原英文字幕 |大小:33.0 GB | 145节课程| (36h 18m) 你会学到什么 云…

Java学习总结:8

链表 class Node2{ //定义一个节点private String data;private Node2 next; //要保存的下一个节点public Node2(String data){ //每一个Node2对象都必须保存相应的数据this.datadata;}public void setNext(Node2 next){this.nextnext;}public Node2 getNext(){return this.…

(原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员

10.3 接口的实现 在继续前&#xff0c;先讨论一下如何定义和实现接口。第9章介绍了接口定义的方式与类相似&#xff0c;使用的代码如下&#xff1a; interface IMyInterface {// Interface members. } 接口成员的定义与类成员的定义相似&#xff0c;但有几个重要的区别&#…

JVM架构解析

本文阐述了JVM的构成和组件&#xff0c;配图清晰易懂&#xff0c;是学习Java开发者的入门必读文章。 每个Java开发人员都知道字节码经由JRE&#xff08;Java运行时环境&#xff09;执行。但他们或许不知道JRE其实是由Java虚拟机&#xff08;JVM&#xff09;实现&#xff0c;JV…

cmd实用命令

1.netstat 查看电脑端口状况 实际应用举例&#xff1a;查看某软件坚监听的电脑端口。 在任务管理器中选择列...&#xff0c;打开PID的显示。在这里查看某个应用程序的线程ID是多少。例如QQ&#xff1a;4904. 运行&#xff0c;cmd&#xff0c;输入netstat -ano&#xff0c;显示当…

嵌入式BootLoader技术内幕(三)

四、 关于串口终端 在 boot loader 程序的设计与实现中&#xff0c;没有什么能够比从串口终端正确地收到打印信息能更令人激动了。此外&#xff0c;向串口终端打印信息也是一个非常重要而又有效的调试手段。但是&#xff0c;我们经常会碰到串口终端显示乱码或根本没有显示的问题…

Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020

Maya 2020面部绑定动画学习视频教程 Facial Rigging 101 – Maya 2020 时长:16h 55m |视频:. MP4 1280x720&#xff0c;30 fps(r) |音频:AAC&#xff0c;44100 Hz&#xff0c;2ch |大小:15.5 GB 共62小节课程 流派:电子学习|语言:英语中文字幕&#xff08;机译&#xff09;含…

Java学习总结:9

继承 继承性是面向对象的第二大主要特征&#xff0c;而继承性要解决的就是代码重用的问题&#xff0c;利用继承性可以从已有的类继续派生出新的子类&#xff0c;也可以利用子类扩展出更多的操作功能。 继承的实现 继承的格式 class 子类 extends 父类 {}子类实际上是将父类…

转 小辉_Ray CORS(跨域资源共享)

前言&#xff1a;上一篇文章在写如何使用JSONP实现跨域请求的时候&#xff0c;偶然间提到CORS&#xff0c;即Cross-Origin Resource Sharing&#xff08;跨域资源共享&#xff09;。虽然前些天也看了一下CORS相关的文章&#xff0c;但是今天兴趣一来还是亲自地写篇博客来研究一…

使用dd命令复制ASM磁盘的spfile

通过下面sql查询参数文件在ASM磁盘中的AU分布SELECT x1.file_number,x1.name,x2.GROUP_KFFXP,x2.DISK_KFFXP,x2.AU_KFFXP,x3.pathFROM (SELECT *FROM (SELECT t1.GROUP_NUMBER, t1.FILE_NUMBER, t2.NAME, rownum AS rnFROM v$asm_file t1LEFT JOIN v$asm_alias t2ON t1.FILE_NU…