-
2019-03-15 10:28:29
万物皆对象,在我们生活中,一个水杯,一个枕头,都可以把它当做一个对象.
java面向对象有三个特性,封装,继承,多态,如果再加一个,那就是抽象
我们来举个例子
我是上帝,我要开始造人了,我会先想,人是由什么构成的? 好了,我知道了,人是由灵魂和肉体构成的(抽象就相当于定义了模板)
我想好了用什么来构成人,那我就开始造人了,我造着造着发现,太多了,我造着很累,每次都要一个一个来造,那么我自己就做了一个机器,我把造人这个方法放入机器中包裹起来(安全private),让机器来造人,我只需要用这个机器就可以了(封装封装不一定安全,我们等下来说),
造着造着我还是觉得很累,我觉得我不能自己用这个机器造了,我得让我自己造的人去使用这个机器,这样我就不用干活了,我就轻松了,于是我就让我造的人去使用
这个机器去造新的人(继承)由于我造人的时候让他们有了灵魂,有了思想,于是我发现他们造人的时候造出了很多不一样的人,有的是黄种人,有的是白种人,还有的是黑人(他们本质上都是人)(多态),但是我的机器设置的只能造黄种人,他们为什么就可以造出黑人和白人呢?我知道了,他修改了机器(破坏封装 java中的反射)于是就出现了各种各样的人.
这就是java的封装.继承.多态.抽象.
又来了个问题,既然private并不能保证绝对安全,那么private的意义是什么
继续举个例子,
某岛国的boss管理着他的国家,有一个人用着特别顺手,boss让它做了除了自己意外最大的官,还给了他兵权(private没人能管他,只有自己能管),但是这个人不爽啊,你什么事情都让我来做官还比我大,还管着我,我不服,然后他就开始各种各样搞事情了,于是boss知道了,他也不爽了,你整天在那里搞事情,国家都乱了,但是bosos也没办法直接去把这个人拿掉,因为很多事情还要靠他来完成,他还有兵权,动不了他,于是boss在国家法律上增加了一条,黑社会的合法化(反射),有意思了,boss想,我不搞你,但是我可以找人来搞你,然后boss就让黑社会去修理这个人,威胁他之类得,然后这个人就听话了,他也不调皮了,一直给boss安静的做事这个例子比较简单,我们可以看出,反射可以破坏封装,private只可以在一定程度下保证安全,反射的作用就是获取一些成员的属性方法,包括私有的,在我们实际的使用过程中是很灵活的
更多相关内容 -
Java中private的使用
2021-02-12 20:48:37Java中也有为了数据的封装性而声明的private类型。这篇就使用一下,大致的用法和C++类似。Java中引入private的类型,目的是为了防止类中的数据成员,在类的定义之外被修改。也就说,private类型的数据成员只能在定义...Java中也有为了数据的封装性而声明的private类型。这篇就使用一下,大致的用法和C++类似。
Java中引入private的类型,目的是为了防止类中的数据成员,在类的定义之外被修改。也就说,private类型的数据成员只能在定义的时候修改,其余任何地方都不可以,该类的对象也不可以。
而且,private类型的数据可以作为构造函数的输入。
不过,我们也可以在类中定义读取和修改private类型数据的public函数。如下程序:
/***
*
* @author Administrator
*
*/
class Circle3 {
/**
* CLASS CIRCLE3
*
* Data: radius
* Functions: getRadius, setRadius, getArea
*/
private double radius;
Circle3() {
radius = 0;
}
Circle3(double newRadius) {
radius = newRadius;
}
double getRadius() {
return radius;
}
void setRadius(double newRadius) {
radius = newRadius;
}
double getArea() {
return Math.PI * radius * radius;
}
}
public class TestingPrivate {
/**
* MAIN CLASS
*/
public static void main(String[] args) {
Circle3 circle = new Circle3();
System.out.println("The radius is " + circle.getRadius());
//
//System.out.println("The radius is " + circle.radius); // wrong, since the radius is private
circle.setRadius(10.0);
System.out.println("The modified radius is " + circle.getRadius());
Circle3 c = new Circle3(50.0);
System.out.println("The radius is " + c.getRadius());
}
}
运行结果:
-
java中private什么意思
2021-02-12 20:48:38private作为一种权限修饰符可以修饰类、属性和方法;用private修饰的类、属性、方法,只能自己使用,别的类是不能访问的,也就是说对于别的类来说是隐藏不可见的,private一般不修饰类,但是可以修饰内部类。可以...private作为一种权限修饰符可以修饰类、属性和方法;用private修饰的类、属性、方法,只能自己使用,别的类是不能访问的,也就是说对于别的类来说是隐藏不可见的,private一般不修饰类,但是可以修饰内部类。
可以使用private实现封装:
将属性和方法用private封装后表示,被封装的属性与方法只能在本类中使用,类外部不可见。
此时要想访问被封装的属性,必须提供getter与setter方法
setter方法:主要进行属性内容的设置与修改
getter方法:主要进行属性内容的取得
类的设计原则:编写类的时候,没有额外说明,所有属性必须使用private封装(成员变量)
private不能用于外部类的封装,但是可以用于内部类的封装:class Persion{
//被private封装的属性
private String name;
private int age;
public void setname(String n){
name = n;
}
public String getname(){
return name;
}
public void setage(int num){
if(num>0 && num<150){
age = num;
}
else{
age = 0;
}
}
public int getage(){
return age;
}
public void getPersionInfo(){
System.out.println("姓名:"+name+", 年龄:"+age);
}
}
public class test{
public static void main(String[] args){
Persion per1 = new Persion();
per1.setname("guo");//通过set方法设置参数
per1.setage(200);
per1.getPersionInfo();//获取参数
}
}
private 只是封装的第一步。
-
java中 private关键字的作用及使用方法
2020-12-13 15:24:53private 先看一个程序; 创建的类; package demo04private; public class person { String name; int age; public void show(){ System.out.println("我叫"+name+"我几年"+age+"岁了"); } } 创建的对象; ...private
先看一个程序;
创建的类;package demo04private; public class person { String name; int age; public void show(){ System.out.println("我叫"+name+"我几年"+age+"岁了"); } }
创建的对象;
public class demo04person { public static void main(String[] args) { person stu = new person(); stu.name = "lao k"; stu.age = -20; stu.show(); } }
运行结果;
让我们来看,程序没有任何问题,但是有一个常识问题,年龄是-20岁,这样好吗,这样不好。
我们定义person的时候用int来定义的,所以我们无法阻挡他的有效之内的赋值。
【解决方案】- 用private关键字将需要保护的成员变量进行修饰。
【格式】;
private 数据类型 变量名称;private int age;
一旦使用private关键字 ,在本类当中仍然可以随意访问,但是一旦超过本类范围就不能直接访问了。
不过我们可以简介访问,就是要等一一对儿setter//getter方法。下面使用方法的代码;
类;package demo04private; public class person { String name; private int age; public void show(){ System.out.println("我叫"+name+"我几年"+age+"岁了"); } public void setAge(int num){ if (num<=100&&num>=0){ age = num; }else{ System.out.println("数据不合理"); } } public int getAge(){ return age; } }
对象;
package demo04private; public class demo04person { public static void main(String[] args) { person stu = new person(); stu.name = "lao k"; //stu.age = -20; stu.show(); stu.setAge(20); } }
运行情况;
切记 一定会要在一个包里才行。
【注意事项】;
两个方法必须叫setXxx和getXxx命名规则。
对于setter来说,不能有返回值,参数类型和成员变量类型一致。
对于getter来说,不能有参数,返回值类型和成员变量类型一致。 -
Java中public,private,protected,和默认的区别
2021-02-12 18:50:02作用域 当前类 同包 子类 其他public √ √ √ √protected √ √ √ ×默认 √ √ × ×private √ × × ×类的成员不写访62616964757a686964616fe... -
Java 访问权限控制:public、private、protected
2018-11-30 08:41:50本篇文章主要介绍 Java 的访问权限控制。 -
Java-利用反射访问类的私有(private)属性及方法&private的意义
2019-02-25 20:01:40Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射... -
java中private,public,protected详解
2017-01-06 11:36:46参照甲骨文的java文档:点击打开链接 访问级别修饰符确定其他类是否可以使用特定字段或调用特定方法。有两个级别的访问控制: 1.在顶级 - public或package-private(没有显式修饰符即默认权限)。 类可以用修饰符... -
私有(private)属性及方法可以通过反射访问,那么private的意义是什么?
2021-03-08 16:18:06私有(private)属性及方法可以通过反射访问,那么private的意义是什么? 在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与... -
java中的private到底有什么用 ;private特点;
2016-05-05 11:05:421、private作为一种权限修饰符可以修饰类、属性和方法; 2、用private修饰的类、属性、方法,只能自己使用,别的类是不能访问的,也就是说对于别的类来说是隐藏不可见的,private一般不修饰类,但是可以修饰内部... -
为什么Java中属性用private封装?
2018-10-19 21:12:51如果不用private封装: class Person { public String name ; public int age ; public void work ( ) { System . out . println ( name + "在工作!" ) ; } public void age ... -
private声明的类的作用范围
2021-03-17 21:27:26java中private声明的类的作用范围?java中private声明的类的作用范围: private 私有的;因此只能在当前类下使用 类修饰符 :public、default、abstract、final、strictfp 接口修饰符 :public、default、abstract、... -
既然Java反射可以访问和修改私有成员变量,那封装成private还有什么意义
2019-01-03 18:18:28简单来说,private并不是解决“安全”问题的。...但是从更高一层的角度,即便使用了SecurityManager,还是可以通过各种方式拿到java的bytecode,并做任意修改。比如有asm这样的lib,也有instrument ... -
在java里,外部类为啥不能用private和protected修饰,内部类却可以?
2021-02-12 20:50:57我是这样理解的:这些修饰权限是针对类中的那些变量、方法、内部类来说的,而外部类已经在最外部(即不存在说在哪个类的内部,或是哪个类的子类这些范围),类作为单独文件被加载不能被修饰为私有(private)或受保护的... -
junit测试private函数
2013-12-26 17:07:06利用java的反射,实现在junit中测试private函数 -
Java中访问修饰符public、private、protect、default范围
2018-08-30 11:39:23http://lvdairy.blogbus.com/logs/51747079.html 同一个类 同一个包 ... Private √ ... -
【Java】子类能获取父类中private权限的属性和方法
2020-02-28 20:46:35首先我们明确一下“继承”一词的概念,在 Java 中,继承一词的意义是有限制的。一个子类只能继承其父类的可访问的成员,并且该子类没有覆盖或者说隐藏父类中的那些可访问成员。所以,一个类的成员就是指在这个类中所... -
Java中public、private、protected、默认四种访问权限
2019-07-16 17:53:32java的访问权限有四种,public,protected,默认,private 四种权限作用图。Y代表可以访问到。 类的成员方法的访问权限: 其从语法角度来讲,这写访问权限控制符作用于类的方法和作用于类的属性上的效果是一样的。 ... -
Java的访问控制修饰符(public,protected,private)总结
2021-03-31 09:06:03Java中的访问修饰符有四种,分别是public,protected,默认,private。主要作用是控制类之间的数据的访问权限。这些修饰符可以修饰的Java元素有下面这些: 类 接口 类中的方法 接口中的方法 类中的字段 接口中的... -
Java中四个访问修饰符public private protected 和默认(package-private)的用法详解
2019-12-01 21:07:39public或package-private(没有显式修饰符即默认权限)。 类可以用修饰符public声明,在这种情况下,类对所有类都可见。如果一个类没有修饰符(默认,也称为package-private),它只在自己的包中可见。 2.在成员... -
Java的外部类为什么不能使用private和protected进行修饰的讲解
2021-02-25 19:34:23Java的外部类为什么不能使用private和protected进行修饰对于这个问题,一直没有仔细思考,今天整理一下:对于顶级类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类... -
Java权限修饰符详解及为什么Java外部类不能用private和protected修饰?
2019-03-26 02:38:23首先,不清楚Java外部类和内部类的同学可以先百度一下。 其次,我们简单了解一下四种权限修饰符: private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问。... -
既然反射可以拿到private里的值,那private的意义在哪里?
2019-09-05 17:31:201、Java的private修饰符不是为了绝对安全设计的,而是对用户常规使用Java的一种...2.private的意义是OOP(面向对象编程)的封装概念。 3.setAccessible(true),这行代码取消了java的权限控制检查,会产生安全隐患 ... -
【简单点说】private修饰的方法可以通过反射访问,那么private的意义是什么
2019-07-24 14:00:11Methos.setAccessible(true)取消了java的权限控制检查(public protected private)。 private的概念是符合OOP(面向对象编程)的封装性,并不是为了方法的安全。 setAccessible的潜在意义相信你自己能把控自己的... -
关于修饰符private public什么时候用的问题
2021-03-17 23:03:21一、java修饰符分为访问控制符和非访问控制符(一)访问控制符:public、protected、default、private;不加其他三个控制符则默认为default包外 子类 包内 类内使用对象public 可 可 可 可 类、接口、构造器、成员(全局... -
Java 模块化技术演进和对现有应用微服务化的意义.pdf
2020-05-08 18:33:52Java模块化技术演进 对现有应微服务化的意义 张建锋 1 Java模块化需求 语言定义粒度缺失的一环 顺序加载带来的问题 多版本组件部署 Public Package Private Applicaon ? (Module/ Bundle) Default protected Jar 2 ... -
Java外部类不能用private和protected修饰
2020-03-20 10:42:11private(私有的)无法访问:使用private关键字,就意味着被声明的成员或方法,除了本类,其他任何类都无法访问。 public(公共的)接口访问权限:使用public关键字,就意味着被声明的成员或方法对所有类都是可以... -
Java中为什么不能用private protect修饰类
2020-06-01 16:31:37对于顶级类(外部类)来说,只有两种修饰符:public...内部类的上一级是外部类,那么对应的有四种访问控制修饰符:本类(private),同包(default),父子类(protected),任何位置(public)。当一个内部类使用了private修饰后 -
java抽象类和接口有什么意义
2021-02-04 16:53:06用了java这么久,对接口和抽象类使用一直很模糊。为什么接口和抽象类不能实例化,为什么接口可以多个实现而抽象类只能单继承,特别是java8之后,抽象类和接口里面都可以写代码后,就更加分不清了,今天重新整理一下...