java学习从“菜鸟”到“放弃”
今天学到java的对象和类中,
由于刚考完c++面向对象与程序设计这门课,对于c++中的类掌握自认为不错,就开始过渡到java。
今天面对的问题,在书写一个类的时候,发现了许多与c++不同的地方。
比如:
1.在java中,所有的Java对象都是在堆中构造的,构造器总是伴随着new操作符一起使用。
这玩意,就和c++很不一样。
在主函数main中为例,
public static void main(String[] args){
Employee a= new Employee("zhangzhenyu",1000);
}
2.在java中,函树中有static参数和没有static调用函数方法不同
这玩意,语法上和c++完全不一样。
在主函数main中为例,
1)有static
1 public class test {
2
3 public static void main(String[] args){
4 Employee a= new Employee("zhangzhenyu",1000);
5 triple(a);
6 }
7 public static void triple(Employee x) { //静态方法可以直接调用。
8 x.changeSalary(2000);
9 };
10 }
2)没有static
1 public class test {
2
3 public static void main(String[] args){
4 Employee a= new Employee("zhangzhenyu",1000);
5 test A = new test();
6 A.triple(a);
7 }
8 public void triple(Employee x) { //非静态函数,需要使用对象来调用。
9 x.changeSalary(2000);
10 };
11 }
3.java中对象引用采用的是值传递
以书中Empolyee代码为例
public class test {
public static void main(String[] args){
Employee a= new Employee("zhang",1000);
Employee b= new Employee("chen",2000);
//System.out.println(a.getName());
System.out.println("a = "+ a.getName());
System.out.println("b = " + b.getName());
swap(a,b);
System.out.println("a2 = " + a.getName());
System.out.println("b2 = " + b.getName());
}
public static void swap(Employee x,Employee y) {
Employee temp = x;
x = y;
y =temp;
System.out.println("x in the methods = " + x.getName());
System.out.println("y in the methods = " + y.getName());
};
}
class Employee
{
private static int nextId = 1;
private String name;
private double salary;
private int id;
public Employee(String n,double s)
{
name = n;
salary = s;
id = 0;
}
public String getName() {
return name;
}
public double get() {
return salary;
}
public void changeSalary(double a) {
salary = a;
}
public int getId() {
return id;
}
public void setId() {
id = nextId;
nextId++;
}
}
结果:
a = zhang
b = chen
x in the methods = chen
y in the methods = zhang
a2 = zhang
b2 = chen
如果Java对对象采用的是按引用调用,纳闷这个方法就应该能够实现数据的交换。但是结果不是。
在swap方法结束时,参数变量x和y被丢弃,原来变量a和b仍然引用这个方法调用之前所引用的对象。
方法不能修改传递给它的任何参数变量的内容。
public static void changeSalary(Employee x)
{
x. raiseSalary(200);
} //当调用
a = new Employee(xxxx);
changeSalary(a);
补充一种对象引用
对象引用作为参数有些不同
public class test {
public static void main(String[] args){
Employee a= new Employee("zhang",1000);
//System.out.println(a.getName());
System.out.println("a = "+ a.get());
swap(a);
System.out.println("a2 = " + a.get());
}
public static void swap(Employee x) {
x.changeSalary(5555);
System.out.println("a in = " + x.get());
};
}
class Employee
{
private static int nextId = 1;
private String name;
private double salary;
private int id;
public Employee(String n,double s)
{
name = n;
salary = s;
id = 0;
}
public String getName() {
return name;
}
public double get() {
return salary;
}
public void changeSalary(double a) {
salary = a;
}
public int getId() {
return id;
}
public void setId() {
id = nextId;
nextId++;
}
}
//结果
a = 1000.0
a in = 5555.0
a2 = 5555.0
可以看出来,值发生了改变,这个问题我目前还需要再学习学习,还是有些不懂。
java学习从“菜鸟”到“放弃”的更多相关文章
- Java学习从菜鸟变大鸟之一 hashCode()和equals()的本质区别和联系
在学习java,根据视频做实例的过程中,对equals和hashcode两个方法理解稍微深刻一点,主要是它们两个很容易混淆,容易出错,自己又通过网上的资料学习,和大家分享 equals()方法 equ ...
- Java学习从菜鸟变大鸟之三 多线程中Thread 和Runnable的区别与运用
多线程机制是java中的一个特点,掌握它对后面的知识的理解至关重要,是java工程师的必备知识,多线程指在单个程序中可以运行多个不同的线程执行的不同的任务,线程是一个程序内部的顺序控制流.进程是静态的 ...
- Java学习从菜鸟变大鸟之二 输入输出流(IO)
在软件开发中,数据流和数据库操作占据了一个很重要的位置,所以,熟悉操作数据流和数据库,对于每一个开发者来说都是很重要的,今天就来总结一下JavaI/O. 流 流是一个很形象的概念,当程序需要读取数据的 ...
- 从.Net到Java学习第二篇——IDEA and start spring boot
从.Net到Java学习第一篇——开篇 所谓工欲善其事,必先利其器,做java开发也一样,在比较了目前最流行的几个java IDE(eclipse,myeclipse.IDEA)之后,我果断选择IDE ...
- Java 学习(21):Java 实例
Java 实例 本章节我们将为大家介绍 Java 常用的实例,通过实例学习我们可以更快的掌握 Java 的应用. Java 环境设置实例 //HelloWorld.java 文件 public cla ...
- Java学习笔记-多线程-创建线程的方式
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...
- Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
- Java学习路径:不走弯路,这是一条捷径
1.如何学习编程? JAVA是一种平台.也是一种程序设计语言,怎样学好程序设计不只适用于JAVA,对C++等其它程序设计语言也一样管用.有编程高手觉得,JAVA也好C也好没什么分别,拿来就用.为什么他 ...
- Java 学习文章汇总
目前JAVA可以说是产业界和学术界最热门的语言,许多人都很急切想把JAVA学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...
随机推荐
- mac下protobuf配置记录
sudo vi /etc/profile加到文件底部 export PATH=$PATH:$GOBIN:/usr/local/go/bin export GOPATH=/Users/jinfuzhan ...
- ceph 快照,克隆
转载 https://my.oschina.net/wangzilong/blog/1595081 ceph 快照,克隆 ceph是一个非常好的后端存储系统.其中包括最常用的块存储,对象存储,文件系统 ...
- Shell编程—创建函数
1基本的脚本函数 函数是一个脚本代码块,你可以为其命名并在代码中任何位置重用.要在脚本中使用该代码块时,只要使用所起的函数名就行了. 1.1创建函数 有两种格式可以用来在bash shell脚本中创建 ...
- 区块链入门到实战(25)之以太坊(Ethereum) – 以太币单位
以太币的主要单位是以太/Ether,即一个以太币,以太币的最小单位是wei. 以太币最小单位 wei 是以虚拟币先驱人物:戴伟 Wei Dai 命名,戴伟 W Dai 是一位兴趣广泛的密码学专家,他在 ...
- 漏洞重温之sql注入(五)
漏洞重温之sql注入(五) sqli-labs通关之旅 填坑来了! Less-17 首先,17关,我们先查看一下页面,发现网页正中间是一个登录框. 显然,该关卡的注入应该为post型. 直接查看源码. ...
- 医疗seo常用的图标工具
http://www.wocaoseo.com/thread-304-1-1.html 下面是一些医疗seo常用的一些图表工具,这些都是些最简单的工具,主要放置这里以防止以后有作用. 1,医疗的常用搜 ...
- 揭秘日活千万腾讯会议全量云原生化上TKE技术实践
腾讯会议,一款联合国都Pick的线上会议解决方案,提供完美会议品质和灵活协作空间,广泛应用在政府.医疗.教育.企业等各个行业.大家从文章8天扩容100万核,腾讯会议是如何做到的?都知道腾讯会议背后的计 ...
- Linux:用户账号、密码、群组、群组密码文件查看
使用者账号密码存放文件:/etc/passwd, /etc/shadow 虽然我们登入 Linux 主机的时候,输入的是我们的账号,但是,其实 Linux 主机并不会直接认识你的『账 号名称』的,他仅 ...
- vue学习笔记一
vue 颠覆式的开发方式 解疑 为什么要学习vue? 降低项目的复杂度 就业需要 vue难不难? 特别简单 相比于React,vue有什么优势? 前端三大框架:Angular.React.Vue Vu ...
- CTF常见源码泄漏总结
.hg源码泄漏 漏洞成因: hg init的时候会生成.hge.g.http://www.am0s.com/.hg/ 漏洞利用:工具:dvcs-ripperrip-hg.pl -v -u http:/ ...