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学好. 但学习是需要步骤的,除非像电影中演的那样,能够把需要的专业技巧下载到脑海:主角只花了几秒下载资料,就马上具备飞行员的技 ...
随机推荐
- beego 快速入门
原文链接:https://beego.me/quickstart 1.安装依赖 git clone http://github.com/astaxie/beego.git git clone http ...
- Vue源码分析之实现一个简易版的Vue
目标 参考 https://cn.vuejs.org/v2/guide/reactivity.html 使用 Typescript 编写简易版的 vue 实现数据的响应式和基本的视图渲染,以及双向绑定 ...
- python numpy常用的数学和统计函数
numpy模块的核心就是基于数组的运算,相比于列表和其他数据结构,数组的运算效率是最高的.在统计分析和挖掘过程中,经常会使用到numpy模块的函数,以下是常用的数学函数和统计函数: 常数p就是圆周率 ...
- 双操作系统(ubuntu/windows7)安装教程
前言 前两天出于项目原因,本人心血来潮地给久经战场的电脑老大哥找个小媳妇,哈哈哈,装了两个系统.分别是用了多年的win7和接触不久的Ubuntu,在其中遇到了一些坑,在此记录下来,希望能给自己和大家带 ...
- ClassFile与JClass
本次大作业中 java程序——>二进制流(byte[ ]表示)——>ClassFile对象——>JClass ClassFile的字段:magic,minorversion..... ...
- 终于弄明白了 Singleton,Transient,Scoped 的作用域是如何实现的
一:背景 1. 讲故事 前几天有位朋友让我有时间分析一下 aspnetcore 中为什么向 ServiceCollection 中注入的 Class 可以做到 Singleton,Transient, ...
- unity3d插入android有米广告
有米官网:http://www.youmi.net/register?r=MTI0MDg= 国内的广告,我觉得万普和有米还不错,我也只试了这两个,其他的都是看评价的,呵呵~~~首先我们去有米官网注册一 ...
- FZU - 2037 -Maximum Value Problem(规律题)
Let’s start with a very classical problem. Given an array a[1…n] of positive numbers, if the value o ...
- Fibonacci and Counting(水题)
链接:https://ac.nowcoder.com/acm/contest/303/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...
- Codeforces 1324E Sleeping Schedule DP
题意 给你一个长度为\(n\)的数组\(a\)和3个数字\(h,l和r\).\(t\)初始为0,每次可以使\(t=(t+a_i) \% h\)或者\(t=(t+a_i-1)\%h\),如果这时\(t\ ...