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();}
}
结果为:11、22、5、6、7、66、77、88、
数组排序
数组排序可以按照由小到大的顺序对基本数据类型进行排序。
其定义如下:
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 | 视频:h264, 1280x720 | 音频:AAC, 44.1 KHz, 2通道。AAC, 44.1 KHz, 2 Ch. 技能水平。初学者|类型:电子学习|语言:英语中文字幕(根据原英文字幕…

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

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

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

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

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

jQuery-1.9.1源码分析系列(四) 缓存系统
先前在分析Sizzle的时候分析到Sizzle有自己的缓存机制,点击这里查看。不过Sizzle的缓存只是对内使用的(内部自己存,自己取)。接下来分析jQuery可以对外使用的缓存(可存可取)。 首先需要明白jQuery缓存需要解…

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

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

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 语言:英语中文字幕(根据原英文字幕机译更准确)原英文字幕 游戏中的风格化角色创建入门指南 百度一下 云桥网络 平台huo取 教程! 信息。 教程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的检索方式 导航对象图检索(根据已经加载的对象,导航到其他对象。) OID检索(按照对象的OID来检索对象。) HQL检索(使用面向对象的HQL查询语言。) QBC检索(使…

HDU 4267 线段树 离散点区间更新, 自叶子节点至根单点查询
题意: n个数字 下面n个数字表示数列 2个操作 1 [u, v] k add [u,v ]区间 (u点要计算)每隔k个位置,该数字add 2 pos 询问 pos下标的值(下标从1开始) 思路: 因为k很小, 可以直接存 k…

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

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

【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course
【3DMax教程】三维产品可视化视频教程 3d Products Visualization Course 三维产品可视化课程 教程大小: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 ..."转载:http://blog.csdn.net/cloud_xy/article/details/21756601启动时日志中有这个警告的:[Warning] Using unique option pr…

Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020
Maya硬表面建模学习教程 Master Hard Surface Modeling in Maya 2020 流派:电子学习| MP4 |视频:h264,1280720 |音频:aac,48000 Hz 语言:英语 中文字幕(机译)原英文字幕 |大小: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 接口的实现 在继续前,先讨论一下如何定义和实现接口。第9章介绍了接口定义的方式与类相似,使用的代码如下: interface IMyInterface {// Interface members. } 接口成员的定义与类成员的定义相似,但有几个重要的区别&#…

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

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

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

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

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

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

使用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…