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学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...
随机推荐
- 第1章 Spark SQL概述
第1章 Spark SQL概述 1.1 什么是Spark SQL Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作 ...
- 0基础算法基础学算法 第八弹 递归进阶,dfs第一讲
最近很有一段时间没有更新了,主要是因为我要去参加一个重要的考试----小升初!作为一个武汉的兢兢业业的小学生当然要去试一试我们那里最好的几个学校的考试了,总之因为很多的原因放了好久的鸽子,不过从今天开 ...
- 黑马新版PYTHON教学课程(全)资料加视频完整版百度网盘资料
黑马新版PYTHON教学课程(全)资料加视频完整版 无加密,适合0基础人群.基础班+就业班.不用解压在线看 百度网盘地址一 淘宝店地址二
- Oracle - Flashback standby after resetlogs on primary
一.概述 本文将给大家介绍主库使用rman做不完全恢复后,备库如何通过flashback,继续同步 二.正式实验 本次实验采用的是oracle 11g 单实例 + oracle 11g 单实例dg 1 ...
- FinalShell远程连接工具推荐
今天给大家推荐一个类似Xshell的工具FinalShell,这个工具也使用了很长时间了, Windows和Mac版本都有,方便连接虚拟机 可以很方便的上传文件,有兴趣可以试试这款软件. 地址:htt ...
- Java面试题(多线程篇)
多线程 35.并行和并发有什么区别? 1.并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔发生. 2.并行是在不同实体上的多个事件,并发是在同一实体上的多个事件. 3.在 ...
- HP Probook 4230s 更换 CPU 过程
HP Probook 4230s 更换 CPU 过程 原来使用的 CPU 是 i5-2540M 更换为 i7-2760QM 1.松开 硬盘线 硬盘线插头上有一片黑色的胶片,可以用来拔起插头 硬盘 ...
- SecureCRT 关键字高亮显示
grep命令红色高亮关键字 1. 左边侧栏 Session Manage 右键Sessions --Properties 2 Terminal--Appearance Current color s ...
- 分分钟玩转UI自动化测试
有没有那么一刻,看到自动模拟用户操作界面感觉好神奇. 关于什么叫 UI 自动化测试就不解释了,基本上是你刚才脑海里想到什么就是什么. 在分层自动化测试中包括:UI 测试.集成/接口测试.单元测试.大神 ...
- 透过UIRoot深入理解NGUI提供的屏幕适配方案
主要代码:UIRoot,UIOrthoCamera,UIRect.GetSides(UIPanel使用UIRect的)里的GetSides,代码量很少,但需要思考和测试验证. 一.UIRoot的基本内 ...